diff --git a/.env b/.env
index 431fdc073..afab0bce3 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,2 @@
VERSION_LATEST="v11.0.0"
-VERSION_NEXT="v12.0.0"
\ No newline at end of file
+VERSION_NEXT="v11.0.0"
\ No newline at end of file
diff --git a/_blogposts/2020-08-10-bucklescript-is-rebranding.mdx b/_blogposts/2020-08-10-bucklescript-is-rebranding.mdx
deleted file mode 100644
index 168c3abf5..000000000
--- a/_blogposts/2020-08-10-bucklescript-is-rebranding.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
----
-author: rescript-team
-date: "2020-08-10"
-badge: roadmap
-title: "BuckleScript & Reason Rebranding"
-description: A new unified experience for the platform
----
-
-We're pleased to announce that BuckleScript is getting a brand new name: **ReScript**.
-
-## History & Summary
-
-- **OCaml** is a typed FP language compiling to bytecode and native code.
-- **Js_of_ocaml** is based on OCaml and compiles to JavaScript for OCaml users.
-- **BuckleScript** is a fork of OCaml that also outputs JavaScript, optimized (features, JS interoperability, output, build tools) for JS developers rather than OCaml developers.
-- **Reason** is an alternative, JS-looking syntax layer over OCaml, plus extra tools. Reason used 1. BuckleScript to produce JavaScript output and 2. OCaml to produce native output. Most of the community focused on the former usage.
-- Reason and BuckleScript shared most teammates, who wanted to double down on the JS use-case.
-- **ReScript**, thus born, is the new branding for BuckleScript that reimplements or cleans up Reason's syntax, tools, ecosystem & docs into a vertically integrated experience.
-- Reason project will continue serving its purpose of a syntax layer for native OCaml. Some folks might use Reason with Js_of_ocaml to output JS code.
-
-## Community Situation
-
-BuckleScript started with the idea that **JavaScript programmers deserved a great typed language with a fast and lean toolchain**. This idea took root and, over the years, we've gradually accomplished feats such as:
-- a state of the art compiled JavaScript output that rivals hand-written JS,
-- a fast & reliable toolchain much needed in front-end and Node development,
-- various JS interop features that spawned an ecosystem of well typed libraries,
-- a production-ready standard library,
-- [and recently](/blog/bucklescript-8-1-new-syntax), a fresh syntax made by a major contributor of Reason's old syntax.
-
-These developments have attracted many people into our community. But one bigger challenge persisted: newcomers dropped out at the sheer amount of extra incongruent tools and learning overhead from having to understand OCaml concepts, Reason concepts, and BuckleScript's concepts. Take, for example, what's required to make a React app using BuckleScript:
-- Knowledge of React.
-- Knowledge of JS.
-- Knowledge of BuckleScript's specific bindings to React (that we've tried hard to keep to a minimum).
-- Knowledge of OCaml idioms, which leaked through BuckleScript.
-- Knowledge of BuckleScript's JS interop and the build system.
-- Knowledge of the Reason syntax.
-- Avoiding the distractions of OCaml and Reason's unrelated, native-oriented build tools, package manager, etc.
-
-Ironically, the more documentation we pile up, the more mental overhead newcomers suffered. During the meetups, we've frequently seen folks' enthusiasm crushed at the sheer prospect of making a web app while keeping 5+ tabs' worth of documentations open. This was discouraging for everyone.
-
-The adoption barrier is real, and it's about time we finally solve it.
-
-## The Rebranding
-
-Today, we'll start to truly unify the various BuckleScript-related projects under the ReScript umbrella. This includes:
-- The compiler, build system and the new syntax unified under a single installation.
-- Doubling down on editor tooling for ReScript usage.
-- A single documentation site (this one), which unifies all the docs and greatly trims down on redundant and stale info.
-- Streamlined communication through said website, a [forum](https://forum.rescript-lang.org) and a new [Twitter](http://twitter.com/rescriptlang).
-- The renaming of various tools, always in a backward-compatible way.
-
-In short, all JS-related concepts previously under disparate Reason and BuckleScript ecosystems are now called ReScript. Previously, due to the messy situation, most real-world BuckleScript adoption came from a few heroic community members suffering through the technical and social risk of spreading our tech to their coworkers. From today onward, you can simply tell to your coworkers: **"this is ReScript"**, and point to them a clear starting point.
-
-It's worth emphasizing that while this rebranding seems disruptive, it's mostly a bunch of name changes for the same tech. The Q&A below addresses some of the worries on existing code.
-
-## Q & A
-
-**What's that recently released BuckleScript syntax called?**
-
-There's no dedicated name for the syntax anymore. It's simply called the ReScript syntax. The extension is `.res` and `.resi`. Existing tools operating on `.ml`, `.mli`, `.re` and `.rei` continue working.
-
-**Will there be a migration script to gradually convert our code to the new syntax?**
-
-Yes. See our [migration page](/docs/manual/v10.0.0/migrate-from-bucklescript-reason). You can mix and match old and new code for a smoother transition.
-
-**Will BuckleScript (now ReScript) break my existing code?**
-
-No. The new syntax & tools sit alongside the existing code. We **won't** remove OCaml and Reason support from ReScript for a long time.
-
-**What's the editor tooling story?**
-
-Much more streamlined now! See our [Editor Plugins](/docs/manual/latest/editor-plugins) page.
-
-Reason-language-server will continue working as-is for existing usage. We as first party don't work on ocaml's language server.
-
-**Will I be able to continue writing OCaml/Reason and compile to JS using BuckleScript in the future?**
-
-It follows from our previous answer that yes, you will still be able to. Though community-wise, we're encouraging the new syntax and tools.
-
-The compiler will also continue to acquire upstream OCaml features when relevant.
-
-**Will the new syntax prompt the move to a non-OCaml AST?**
-
-No, since that'd break existing ppxes (e.g. internationalization, graphql). If we feel the need to adopt a new AST in the future, it'll again be purely additive.
-
-**Will we have 3 syntaxes to worry about?**
-
-The plan is to emphasize the new syntax and focus our tooling around it. It'll be confusing to temporarily have different syntaxes in the same codebase, but that's the cost of a proper migration support. We hope this is transient; it's darkest before the dawn.
-
-**How do we address the fragmentation of the community by the new syntax?**
-
-Folks who have been in the community for a while know that there have always been opposing philosophies regarding newcomer funneling, tooling emphasis, library preferences, etc., due to differing cultures.
-
-Rather, it's more accurate to say a few pieces of awkwardly shared infrastructure held opposing forces together. This is true when Reason spun off from OCaml's engineering, and true when BuckleScript entered the picture.
-
-We can't realistically always release new features that are a compromise of various philosophies, but that's exactly what we've been trying to do for the past few years. BuckleScript's reimplementation of the Reason syntax is a departure from that (much tighter integration with the compiler, more JavaScript/TypeScript-friendly philosophy, fewer compromises, faster, less buggy). We believe that its quality speaks for said departure.
-
-The ReScript community will comprise of the majority of the old Reason community, most of which focused on the BuckleScript part already. The remainder of the Reason community still exists and will now focus on their existing use-case better.
-
-**The new changes make me worried about the future support I'm going to receive from the team.**
-
-_Retrospective edit, in 2021_: suffice to say that we've been doing well =).
-
-## Conclusion
-
-Thank you for your support and keep shipping. A brighter future awaits us!
-
-Stay safe,
-
-The ReScript team (Hongbo, Cheng, Cristiano, Maxim, Patrick, Ricky).
diff --git a/_blogposts/2020-08-28-new-rescript-logo.mdx b/_blogposts/2020-08-28-new-rescript-logo.mdx
deleted file mode 100644
index 0d40e3903..000000000
--- a/_blogposts/2020-08-28-new-rescript-logo.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-author: made_by_betty
-date: "2020-08-27"
-title: "A New Logo for ReScript"
-articleImg: /static/blog/rescript-launch/ReScript-3.jpg
-description: |
- Today, our resident designer Bettina is unveiling to us the fresh new ReScript branding we've been long waiting for. We hope you're as excited about the result as us!
----
-
-import Image from "src/components/Image";
-
-## Why the Rebranding?
-
-ReScript is the evolution and fusion of Reason and BuckleScript. As we're a design-minded community, we'd like to convey this new identity not only through new technical changes as we've done so far, but also through a proper, more professionally crafted logo, color scheme and font. At the same time, we'd like to do so while recalling our roots.
-
-Here it is!
-
-
-
-
-
-The old Reason and BuckleScript logo had many limitations:
-- The icons didn't really work well on round Social Media profile images (or round shapes at all).
-- There's no guideline on how the logo works inverted, or on colored background.
-- The large red rectangle makes it difficult to balance the logo with other elements.
-- The buckle and belt were a bit too literal and did not convey much.
-
-The new logo addresses all these and more:
-
-
-
-## Creating Meaning Through Simple Shapes
-
-A minimal logo design is achieved by putting aside all distractions while focusing on legibility, meaning and small details like clear lines, interesting perspective and depth.
-
-
-
-
-
-**The letter "r"**, composed of two shapes, is inspired by Albers, a german-born American Bauhaus artist and typographer. An object should be simple, beautiful, functional and accessible for everyone - a statement which applies to ReScript's principles perfectly.
-
-**I/O**: The rectangle and circle represent the input / output, recalling the digital nature of a program.
-
-**The red app-shaped background** references the vibrant, playful applications our developers are empowered to create with ReScript.
-
-**The Logotype** ("rescript") complements the brand mark with its clean look and its embrace of technology while retaining a functional look.
-
-We'd like to position ReScript to be a community of product-first developers who care about the fit & finish of their work, while keeping an eye on the quality of their engineering. This interplay of design and engineering is a hard-to-achieve but beautifully worthwhile sweet spot that's frequently been missing in the programmer community; our vibrant logo is our renewed symbolic step toward this mission. Come along with us on our journey!
-
-## Next Steps
-
-In the next few weeks, we will gradually roll out our new brand identity across our official communication platforms. We'll also provide marketing material and assets on our [brand assets page](/brand) for our users.
-
-We hope you enjoyed our new design article. In the future, we're hoping to interleave our technical releases with a few design and UX-oriented posts. Stay tuned!
-
-## About the Designer / Creator
-
-[Bettina Steinbrecher](https://bettystein.com/) is a freelance designer and brand consultant, specialising in digital products and brands, based in Vienna. Previously she has been a Digital Designer and later on Head of Brand Design at [Adidas Runtastic](https://runtastic.com/), where she led major design efforts in the visual brand developing processes before and during the Runtastic / Adidas acquisition. She is now working as a freelance designer.
-
-She has been involved in our design processes since the inception of the [ReScript Association](https://rescript-association.org) in 2018, and was responsible for all the user-facing websites such as `reasonml.org` (now `rescript-lang.org`) and rescript-association.org. She also created the new logo of the [OCaml Software Foundation](https://ocaml-sf.org/).
diff --git a/_blogposts/2020-09-25-release-8-3-2.mdx b/_blogposts/2020-09-25-release-8-3-2.mdx
deleted file mode 100644
index a0ba49a92..000000000
--- a/_blogposts/2020-09-25-release-8-3-2.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
----
-author: hongbo
-date: "2020-09-26"
-previewImg:
-title: What's new in ReScript 8.3 (Part 2)
-description: |
----
-
-## Introduction
-
-ReScript is a soundly typed language with an optimizing compiler focused on the JS platform.
-It's focused on type safety, performance and JS interop. It used to be called BuckleScript.
-
-[ReScript@8.3](https://www.npmjs.com/package/bs-platform/v/8.3.0) is now available for testing, you can try it via
-
-```
-npm i bs-platform@8.3.1
-```
-
-Following the [previous post](/blog/release-8-3), in this post we will go through
-the enhancement over the build system.
-
-## Performance enhancement
-
-The underlying build engine for `bsb` is [ninja](https://ninja-build.org/), it is famous for
-[being fast](https://www.aosabook.org/en/posa/ninja.html)
-to build large C++ repos.
-
-In the last releases, we did lots of work for vertical integration into the bsb build chain.
-For example, we replaced the dynamic dependency parser with a minimal specialized one for bsb.
-we also removed the static dependencies parser which is only used for parsing C++ compiler output.
-
-Thanks to various other low-level improvements, the final outcome is quite impressive.
-For example, The binary size for [Mac platform](https://github.com/ninja-build/ninja/releases/tag/v1.10.1) is 270 KB
-while our vendored version is only 136KB. This is a non-trivial gain given that ninja is minimalist and already
-optimized by top-level C++ experts.
-
-Note such vertical integration not only brings better performance, smaller sizes, it also brings new features
-
-## Build system enhancements for editor diagnostics
-
-When people are coding in their favorite editors, they expect to see syntax and type errors in real-time.
-There are multiple ways to achieve this. The most reliable way is to always invoke the build system whenever the user saves a file. Due to not having an in-memory cache, our build system is very reliable. However we didn't yet optimize the build system for live feedback in editors.
-what syntax errors, type checking errors do they have when editing? There are multiple ways to achieve this, the most easy
-and reliable way is to always invoke the build system whenever the user saves the files, since it's the same build system
-without any in-memory cache, the reliability is very high, however, there's several challenges to use the build system output as editor diagnostics.
-
-### The build system/compiler has to be fast to deliver real-time feedback
-
-Our build system is fast enough to deliver feedback for reasonable sized projects in less than 100ms.
-thanks to our previous [hard work](/blog/scalable). We continue improving
-Pushing the limits of performance in the build system allows us to provide real-time feedback in editors.
-
-### The warnings for each file should not be flushed during a rebuild
-
-For a typical file based build system, if the file A is compiled successfully with some warnings, the rebuild will not build A anymore.
-This is problematic if we use the build system output for editor diagnostics. Since the second build will not capture those warnings, we
-could use some caching mechanism to cache previous build output. But… stateful systems are not reliable and come with a whole range of different problems.
-
-To solve such a challenging problem, we did some innovations to co-ordinate the compiler and build system. When the file A is compiled with warnings,
-the compiler will produce some marks to the build system, the build system will keep building but such marks are encoded in the build rules
-so that the second build will do the rebuild.
-
-The benefit is two fold:
-
-- Rebuild will re-capture those warnings
-- Rebuild will be fast since only those files with warnings get rebuilt, it will not trigger unnecessary builds since our build is [content-based](https://rescript-lang.org/blog/scalable) build system.
-
-The integration between compiler and build system is encoded in a specialized protocol. This makes it almost cost-free.
-
-### Notifying clients through .compiler.log
-
-To get the build output, instead of communicating through IPC, we adopted a simple protocol. Whenever a build is done, we write the output to a file called `.compiler.log`.
-This makes the editor integration build-system agnostic, it does not need talk to the build system directly.
-
-It also makes our build tool work with other watchers including Facebook's [watchman](https://facebook.github.io/watchman/).
-Watchman is a more scalable watcher tool for some specific platforms and less memory hungry, however, we still need a watchman-client to get the output of triggered job.
-We write the output to `.compiler.log` per each build, allowing clients to read compiler diagnostics when they want.
-
-## A better algorithm for removing stale outputs
-
-Whenever we rename a file, e.g. `a.res` to `b.res`, will lead to the output of `a.res` being stale. Thanks to the deeper integration of the build system and compiler,
-we employ a more advanced strategy to remove stale outputs in this release. Pruning stale outputs is done in the beginning of each build.
-
-There are two ways of removing staled artifacts, the second one is introduced in this release:
-
-- Based on live analysis and prebuilt-in knowledge
-
-We scan `lib/bs` directory and check some dangling `cm{i,t,j,ti}` files, if it does not exist in
-the current build set, it is considered stale artifacts. If it is `cmt` file, it would trigger some hooks of `genType`, notably -cmt-rm.
-
-- Based on previous build logs
-We store previous compilation stats. If a file is in the previous compiler output, but no longer in the output of the new build, it is considered stale and can be removed.
-it is considered stale output which can be removed.
-
-In general, strategy two is more reliable and efficient.
-
-- We don't need to recompute the path since it is already done by the build system.
-- When we change the in-source build to out-source build, it will still do the pruning properly
-
-However, strategy one is easier for tooling like `genType`. Not every tool has knowledge of the build system.
-
-
-Sometimes a combination of both strategies is needed.
-- When removing .cm* files, we use the first strategy.
-- When removing generated javascript, we use strategy two,
-
-
-
-Happy Hacking!
diff --git a/_blogposts/2020-09-25-release-8-3.mdx b/_blogposts/2020-09-25-release-8-3.mdx
deleted file mode 100644
index 5975e6678..000000000
--- a/_blogposts/2020-09-25-release-8-3.mdx
+++ /dev/null
@@ -1,184 +0,0 @@
----
-author: hongbo
-date: "2020-09-25"
-previewImg:
-title: What's new in ReScript 8.3 (Part 1)
-description: |
----
-
-## Introduction
-
-ReScript is a soundly typed language with an optimizing compiler focused on the JS platform.
-It's focused on type safety, performance and JS interop. It used to be called BuckleScript.
-
-[ReScript@8.3](https://www.npmjs.com/package/bs-platform/v/8.3.0) is now available for testing, you can try it via
-
-```
-npm i bs-platform@8.3.0
-```
-
-The changes are listed [here](https://github.com/rescript-lang/rescript/blob/master/Changes.md#83), this is a large release, and we will go through some highlighted changes.
-
-
-
-## Lightweight FFI attributes without `bs.` prefix
-
-In this release, we make the `bs.` prefix optional, this will make the FFI less verbose.
-
-For example, the old externals for `readFileAsUtf8Sync` used to be written like this
-
-
-
-
-```res
-@bs.val @bs.module("fs")
-external readFileAsUtf8Sync: (string, @bs.as("utf8") _) => string = "readFileSync"
-```
-```reason
-[@bs.val] [@bs.module "fs"]
-external readFileAsUtf8Sync: (string, [@bs.as "utf8"] _) => string =
- "readFileSync";
-```
-```ocaml
-external readFileAsUtf8Sync : string -> (_[@bs.as "utf8"]) -> string = "readFileSync" [@@bs.val] [@@bs.module "fs"]
-```
-
-
-
-It can now be simplified as
-
-
-
-```res
-@val @module("fs") external readFileAsUtf8Sync: (string, @as("utf8") _) => string = "readFileSync"
-```
-```reason
-[@val] [@module "fs"]
-external readFileAsUtf8Sync: (string, [@as "utf8"] _) => string =
- "readFileSync";
-```
-```ocaml
-external readFileAsUtf8Sync : string -> (_[@as "utf8"]) -> string = "readFileSync"
-[@@val] [@@module "fs"]
-```
-
-
-
-Note almost all previous attributes with `bs.xx` can be simplified as `xx`
-with the exception of the following two that don't have abbreviations:
-
-- `bs.send.pipe` : this attribute was deprecated in favor of `bs.send`; you can still use the existing one for backward compatibility.
-
-- `bs.splice` : this attribute was deprecated in favor of `bs.variadic`; you can still use the existing one for
-backward compatibility.
-
-
-## default import in Es6 support
-
-If you use es6 module output, the default bindings will be compiled properly now:
-
-
-
-```res
-@module("hello") external input: string => string = "default"
-
-let a = input("hello")
-```
-```reason
-[@module "hello"] external input: string => string = "default";
-
-let a = input("hello");
-```
-```ocaml
-external input : string -> string = "default" [@@module "hello"]
-
-let a = input "hello"
-```
-
-
-
-Will now be compiled properly under es6 format as below:
-
-```js
-import Hello from "hello";
-var a = Hello("hello");
-```
-
-
-## Customized js file extension support
-
-Now user can pick up their js file extension support per module format:
-
-```json
- "package-specs": [{
- "module": "es6",
- "suffix": ".mjs"
- },{
- "module": "commonjs",
- "suffix": ".cjs"
- }],
-
-```
-
-## More flexible filename support
-
-To have better integration with other [JS infrastructures](https://github.com/rescript-lang/rescript/issues/4624),
-for example, Next.js/React Native, we allow file names like `404.res`,
-`Button.Android.res` so that it can just be picked up by those tools
-
-
-
-## Better type based inference for pattern `let {a,b,c} = value`
-
-Previously, for code like this:
-
-
-
-```res
-module N = {
- type t = {x: int}
-}
-
-let f = (u: N.t) => {
- let {x} = u
- x + 1
-} /* type error */
-```
-```reason
-module N = {
- type t = {x: int};
-};
-
-let f = (u: N.t) => {
- let {x} = u;
- x + 1;
-}; /* type error */
-```
-```ocaml
-module N = struct
- type t = {
- x : int
- }
-end
-
-let f (u : N.t) =
- let {x } = u in x + 1 (* type error *)
-```
-
-
-
-You will get a type error
-
-```
-Error: Unbound record field x
-```
-
-However, since the compiler already knows the type of `u`, it is capable of looking up the label `x` properly.
-In this release, we make the original code style work out of the box without a work-around such as adding a module prefix
-like `let {N.x} = ..`
-
-## Build system enhancement
-
-A lot of work is put in improving the build system, we will expand on this topic in the next post!
-
-Happy Hacking!
diff --git a/_blogposts/2020-11-17-editor-support-custom-operators-and-more.mdx b/_blogposts/2020-11-17-editor-support-custom-operators-and-more.mdx
deleted file mode 100644
index 43b21fe30..000000000
--- a/_blogposts/2020-11-17-editor-support-custom-operators-and-more.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-author: maxim
-date: "2020-11-17"
-previewImg:
-badge: roadmap
-title: "Editor Support, Custom Operators and More"
-description: |
- Update on what we're doing around the end of 2020 and early next year.
----
-
-import Video from "src/components/Video";
-
-## Upcoming Improvements
-
-As we're approaching the end of 2020, we'd like to inform our community of our remaining tasks for the year and early next year.
-
-## Editor Integration
-
-In the coming days, Cristiano and Cheng Lou will finally be ready to unveil the new VSCode ReScript experience, including diagnosis, autocompletion, jump to definition and type hints!
-
-
-
-Patrick and Maxim will also help polishing the same feature set for Vim and Sublime Text.
-
-## Compiler & Build
-
-Hongbo continues to improve the compiler experience in monorepo-like setups. Expect your build to keep getting faster and more robust!
-
-## Docs
-
-Patrick is [rearranging the React documentation](https://github.com/rescript-lang/rescript-lang.org/pull/96), and continues to improve the main documentation site with Cheng Lou.
-
-## Syntax
-
-### Custom Operators
-
-The team had a few discussions surrounding the issue of the new syntax disallowing custom infix operators. Two of our values collided here:
-
-- We'd like our community to focus on product discussions rather than FP idiosyncrasies, given that it is a common issue that the shiny corners of FP suck the air out of discussions. Many FP and OOP communities (the latter with their own noisy design pattern bickering) have seen the same pattern [played over and over](https://www.youtube.com/watch?v=46ypzDp2yDU&feature=emb_logo), and we'd like to avoid it. This was one of the primary motivations for the new ReScript syntax to disallow custom infix operators.
-- **However**, we also care about supporting our existing users, and providing a smooth transition path toward newer code, as we've shown over the years. Alas, it is a fact of life that many existing codebase on the older syntax use custom infix operators.
-
-After much debates, we've decided to re-enable the ability for users to define their infix operators, the same way they did in the old syntax. Note that this is only meant to provide a good upgrade path; we do **not** encourage the usages of infix operators and we hope that the community is responsible enough using them.
-
-### Simpler Interop
-
-We're considering a lightweight, familiar syntax sugar for `@bs.module` for binding to JS code:
-
-```res
-@js
-import {
- dirname: string => string,
- relative: (~from: string, ~to: string) => string
-} from "path"
-```
-
-(Just a prototype syntax. Not set in stone.)
-
-This will mix well with the other existing `external` features that aren't about importing a module, such as `bs.send`.
-
-We will consider providing an automatic translation of your current `@bs.module` externals into the new format, so you can keep writing your bindings right now while expecting a potentially nice upgrade when the time comes.
-
-Hopefully this encourages more usages of zero-cost JavaScript interop! We value this very much.
-
-### React 17
-
-Last but not least, there are some updates to JSX coming.
-
-> Although React 17 doesn't ship with any new features, there is [a new JSX transform](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html). The new JSX improves bundle size, reduces the number of concepts you need to learn in React and improves the performance.
-
-ReScript will be the first to adopt the new JSX spec, which we've deemed to be solid enough. Our own Ricky has had a hand in drafting it.
-
-It goes without saying that this will also have an upgrade path.
-
-## Wrapping Up
-
-2020 has been rather weird; hopefully these end-of-year changes brighten you up a bit!
-
-Stay safe and keep shipping products!
diff --git a/_blogposts/2020-11-26-editor-support-release-1-0.mdx b/_blogposts/2020-11-26-editor-support-release-1-0.mdx
deleted file mode 100644
index 090f101b6..000000000
--- a/_blogposts/2020-11-26-editor-support-release-1-0.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
----
-author: rescript-team
-date: "2020-11-26"
-previewImg: /static/blog/editor_support_preview.jpg
-articleImg: /static/blog/editor_support_article.jpg
-badge: release
-title: "Editor Plugin for VSCode and Vim Officially Released!"
-description: |
- Type hints, jump to definition, error diagnostics, and more.
----
-
-
-## Editor Integration Has Finally Landed
-
-Thank you so much for the wait!
-
-**Here are all the features:**
-- Highlighting
-- Formatting
-- Diagnostics
-- Jump to definition
-- Autocompletion with markdown preview
-- Type hint on hover
-
-We've doubled down on the depth of features instead of breath; hopefully these few crucial ones can stay fast and robust in your big production codebases!
-
-For VSCode, install [rescript-vscode](https://marketplace.visualstudio.com/items?itemName=chenglou92.rescript-vscode) in your editor. For vim, install our [vim-rescript](https://github.com/rescript-lang/vim-rescript) extension and configure it with your preferred setup (plain vim or with coc-vim).
-
-The plugins require `bs-platform@8.3.3`, though also works with slightly older versions.
-
-We'll keep on iterating on the polish of the plugins, and release better [Sublime Text support](https://github.com/rescript-lang/rescript-sublime) soon.
-
-Happy thanksgiving!
-
-
diff --git a/_blogposts/2020-12-07-release-8-4.mdx b/_blogposts/2020-12-07-release-8-4.mdx
deleted file mode 100644
index bc7484feb..000000000
--- a/_blogposts/2020-12-07-release-8-4.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-author: hongbo
-date: "2020-12-07"
-previewImg:
-badge: release
-title: ReScript 8.4
-description: |
- bsb improvements
----
-
-## Introduction
-
-ReScript is a soundly typed language with an optimizing compiler focused on the JS platform.
-It's focused on type safety, performance and JS interop. It used to be called BuckleScript.
-
-[ReScript@8.4](https://www.npmjs.com/package/bs-platform/v/8.4.2) is now available for testing, you can try it via
-
-```
-npm i bs-platform@8.4.2
-```
-
-The changes are listed [here](https://github.com/rescript-lang/rescript/blob/master/Changes.md#841).
-
-We will go through some highlighted changes.
-
-### The integrity of `bsb -make-world`
-
-When we introduced `bsb` as a build system around four years ago, we made the assumption that dependencies are immutable,
-so that once it's built for the first time, we don't need to rebuild it any more. The integrity of `bsb -make-world` will be broken
-when the assumption does not hold.
-
-In this release, we fix the integrity of `bsb -make-world` which allows user to change the dependencies.
-The fix is well implemented that people who don't do such modifications will not pay for it.
-
-This is one of the highest desired feature request based on the
-[user feedback](https://github.com/rescript-lang/rescript/issues/4361#issuecomment-739538789), so we will expand a bit here why it is tricky to implement it without compromising performance.
-
-In ReScript compilation scheme, dependencies as packages are treated as a black box,
-changes of dependencies should be _transitive_. The is due to that we have cross module
-optimizations and the binary interface itself is a hash of its dependencies.
-So for a package dependency chain: A -> B -> C, if A changes and B does not change, C still needs get rebuilt.
-Because the intermediate output of B may still change due to the change of A.
-To make things worse, each package comes with an installation process which is a shell script, so re-installation will make the
-package look like freshly built.
-
-In this release, we track the installation in the build graph as well, and we calculate the hash of the installation of dependencies and put it in the
-dependent's command line flags for building binary artifacts. Such strategy benefits in such aspects:
-
-- The calculation of the hash of installation is almost free since it is just one stat, we don't need track all dependencies' artifacts.
-- The introduction of such hashing does not appear in parsing, so that the changes of dependencies will never trigger re-parsing.
-- Once the package installation is a no-op, the transitive rebuild graph will be cut off so that we can save some unneeded rebuild.
-- When people make changes to the dependencies, if such changes don't change the package interface, it will not trigger the build of its dependents.
-
-### Introducing `pinned-dependencies`
-
-To make `bsb -make-world` more practical for e.g. multi-package setups (`lerna`, `yarn workspaces`, etc.), we introduced a new concept called `pinned-dependencies`. A pinned dependency allows you to automatically rebuild packages that are pinned by a toplevel package, like your final webapp.
-
-Please refer to our [pinned dependencies](/docs/manual/latest/build-pinned-dependencies) docs for more details.
-
-### More robust handling of removal of staled output
-
-When people delete or rename ReScript files, it will introduce dangling staled output, for example, renaming `src/A.res`
-into `src/B.res` will bring `src/A.cmi` (and more intermediate outputs) stale. This is worse than it sounds like, suppose you have a
-local `src/List.res` which shadows the stdlib's List. Now we remove it, it will introduce stale `List.cmi` file, without the proper removal
-of such stale outptu, such stale `List.cmi` file will break the integrity of the build.
-
-In this release, we introduced a more robust algorithm that will always remove stale output before the build so
-that such integrity is not broken.
-
-Last but not the least, we continue improving the readability, debuggability of the [generated output](https://github.com/rescript-lang/rescript/pull/4858) : )
-
-Happy Hacking! -- Hongbo Zhang
diff --git a/_blogposts/2021-02-09-release-9-0.mdx b/_blogposts/2021-02-09-release-9-0.mdx
deleted file mode 100644
index 0ae1f049c..000000000
--- a/_blogposts/2021-02-09-release-9-0.mdx
+++ /dev/null
@@ -1,213 +0,0 @@
----
-author: hongbo
-date: "2021-02-09"
-previewImg: /static/blog/compiler_release_9_0.jpg
-title: ReScript 9.0
-badge: release
-description: |
- Featuring a new external stdlib configuration, some syntax improvements and a small breaking change for nested records.
----
-
-## Introduction
-
-We are happy to announce ReScript 9.0!
-
-ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript. It comes with one of the fastest build toolchains and offers first class support for interoperating with ReactJS and other existing JavaScript code.
-
-Use `npm` to install the newest [9.0.1 release](https://www.npmjs.com/package/bs-platform/v/9.0.1) with the following command:
-
-```sh
-npm install bs-platform@9.0.1
-```
-
-You can also try our new release in the [Online Playground](/try).
-
-In this post we will highlight the most notable changes. The full changelog for this release can be found [here](https://github.com/rescript-lang/rescript/blob/master/Changes.md#90).
-
-## Compiler Improvements
-
-### New External Stdlib Configuration
-
-This is a long-awaited [feature request](https://github.com/rescript-lang/rescript/pull/2171).
-
-Our compiler comes with a set of stdlib modules (such as `Belt`, `Pervasives`, etc.) for core functionality. Compiled ReScript code relies on the JS runtime version of these stdlib modules.
-
-In previous versions, users couldn't ship their compiled JS code without defining a `package.json` dependency on `bs-platform`. Whenever a ReScript developer wanted to publish a package just for pure JS consumption / lean container deployment, they were required to use a bundler to bundle up their library / stdlib code, which made things way more complex and harder to understand.
-
-
-To fix this problem, we introduced an `external-stdlib` configuration that allows specifying a pre-compiled stdlib npm package (`@rescript/std`). More details on how to use that feature can be found in our [External Stdlib](/docs/manual/latest/build-external-stdlib) documentation.
-
-### Less Bundle Bloat when Adding ReScript
-
-With each release we keep a close eye on generating code that is optimized for tree-shaking. We also believe that we reached a milestone where ReScript reliably produces output that has almost no impact on our final JS bundle-sizes (this is what we call our "zero-cost" philosophy).
-
-The bundled code is almost ReScript runtime free because our generated library code fits the tree-shaking principle really well. Tools like `esbuild` can easily drop unnecessary code and make sure that the final code stays lean.
-
-We made a small [demo repo](https://github.com/bobzhang/zero-cost-rescript) and added the precompiled JS bundles to demonstrate what we've achieved. Check it out!
-
-### Improved Code Generation for Pattern Matching
-
-We fine-tuned our pattern matching engine to optimize the JS output even more. Here is an example of a pretty substantial optimization, based on [this issue](https://github.com/rescript-lang/rescript/issues/4924):
-
-```res
-type test =
- | NoArg
- | AnotherNoArg
- | OtherArg(int)
-
-let test = x =>
- switch x {
- | NoArg => true
- | _ => false
- }
-```
-
-The snippet above will compile to the following JS output:
-
-
-
-```js
-function test(x){
- return x === 0
-}
-```
-
-```js
-function test(x) {
- if (typeof x === "number") {
- return x === 0;
- } else {
- return false;
- }
-}
-```
-
-
-
-
-As you can see, the 9.0 compiler removes all the unnecessary `typeof` checks!
-
-This is possible because our optimizer will try to analyze several predicates and get rid of redundant ones. More diffs can be found [here](https://github.com/rescript-lang/rescript/pull/4927/files?file-filters%5B%5D=.js).
-
-Another important improvement is that we fixed the pattern match offset issue, which lead to the consequence that magic numbers will not be generated for complex pattern matches anymore.
-
-For those interested in the details, here is a representative diff resulting from this cleanup:
-
-```diff
-function is_space(param){
-- var switcher = param - 9 | 0;
-- if (switcher > 4 || switcher < 0) {
-- return switcher == 23 ;
-+ if (param > 13 || param < 9) {
-+ return param === 32;
- } else {
-- return switcher !== 2;
-+ return param != 11;
- }
-}
-```
-
-## Syntax Improvements
-
-### `when` -> `if`
-
-Starting from 9.0, [`when` clauses](/docs/manual/latest/pattern-matching-destructuring#when-clause) within a `switch` statement will automatically convert to the `if` keyword instead.
-
-
-
-```res
-switch person1 {
-| Student({reportCard: {gpa}}) if gpa < 0.5 =>
- Js.log("What's happening")
-| _ => () // do nothing
-}
-```
-
-```res
-switch person1 {
-| Student({reportCard: {gpa}}) when gpa < 0.5 =>
- Js.log("What's happening")
-| _ => () // do nothing
-}
-```
-
-
-
-The `when` keyword is deprecated. The syntax will continue supporting it and the formatter will automatically convert to `if`, for a pain-free upgrade.
-
-### Cleaner Polyvariant Syntax
-
-Polyvariants with invalid identifier names (e.g. names including hypens `-`), don't require any special escaping syntax anymore:
-
-
-
-```res
-type animation = [ #"ease-in" | #"ease-out" ]
-```
-
-```res
-type animation = [ #\"ease-in" | #\"ease-out" ]
-```
-
-
-
-We introduced this change to allow easier interop with existing JS string enums. In pure ReScript code, we'd still recommend our users to stick with valid identifier names instead (e.g. `easeIn` instead of `ease-in`).
-
-
-## Breaking Changes
-
-This release comes with a minor breaking change that shouldn't have much impact on the upgrade of existing codebases.
-
-### Nested Records within Objects
-
-Previously, if you wrote `{"user": {age: 10}}`, the inner record was interpreted as an object instead of a record (`{"user": {"age": 10}}`); this is a byproduct of some internal interop transformation details; with the ReScript syntax, this went from understandable to confusing, so we're changing it so that the inner record is indeed now treated as a record. This is an obvious fix, but a breaking change if you were accidentally leveraging that nested record as object.
-
-Here is a code example before and after the change. Note how the `user` record secretly turns into a ReScipt object in the previous version:
-
-
-
-```res
-type user = {
- age: int
-}
-
-let data = {
- "user": {
- age: 1
- }
-}
-
-// This is the way: `age` should be usable via record accessor
-let age = data["user"].age
-```
-
-```res
-type user = {
- age: int
-}
-
-let data = {
- "user": {
- age: 1
- }
-}
-
-// This was the problem: The record implicitly turned
-// into a ReScript object (which is confusing)
-let age = data["user"]["age"]
-```
-
-
-
-More discussions on this change can be found [here](https://forum.rescript-lang.org/t/fixing-the-semantics-of-nested-objects-breaking-changes/976).
-
-## Closing Note
-
-We only highlighted a few user-facing features, but there are also some pretty interesting internal changes happening right now.
-
-For example, we are tinkering with the idea on using WASM to replace Camlp4, and we are also working on a generalized visitor pattern that doesn't require objects.
-
-We will discuss these topics in a separate development post, but we are already excited about the new possibilities this will bring within the compiler toolchain.
-
-
-Happy Hacking!
diff --git a/_blogposts/2021-03-03-rescript-association-rebranding.mdx b/_blogposts/2021-03-03-rescript-association-rebranding.mdx
deleted file mode 100644
index e216cb619..000000000
--- a/_blogposts/2021-03-03-rescript-association-rebranding.mdx
+++ /dev/null
@@ -1,74 +0,0 @@
----
-author: rescript-association
-date: "2021-03-03"
-previewImg: /static/blog/rescript_assoc_rename_preview.jpg
-title: The ReScript Association
-description: |
- After the rebranding of ReScript, its Reason Association has now followed through to become the ReScript Association.
----
-
-## A Small Change for our Association
-
-Last year, our platform rebranded from BuckleScript and Reason to [ReScript](/blog/bucklescript-is-rebranding). The Reason Association however, due to administrative reasons, lagged behind in name change until recently.
-
-Today, we are glad to announce that our organization is now known as the [**ReScript Association**](https://rescript-association.org).
-
-We will continue on our mission to support the development of the ReScript language while leveraging OCaml as its underlying foundation.
-
-## Relation to ReScript the Project
-
-Founded in 2018, the ReScript Association provides a legal and financial foundation for many parts of ReScript. We’re non-profit and independently funded by industrial partners, research institutions and individuals. Our board consists of three members, two of which are also on the ReScript core team (Patrick & Cristiano).
-
-**Here is some of our work you might recognize:**
-
-- Reason Conf 2018 & 2019. Post-covid, we’ll restart prioritizing these.
-- [rescript-lang.org](https://rescript-lang.org).
-- [Community forum](https://forum.rescript-lang.org) & server.
-- ReScript related domains and [analytics data](https://simpleanalytics.com/rescript-lang.org).
-- [genType’s](https://github.com/rescript-lang/genType) release automation.
-- Help maintaining editor related tools such as [rescript-vscode](https://github.com/rescript-lang/rescript-vscode), [vim-rescript](https://github.com/rescript-lang/vim-rescript) and the underlying [editor-support](https://github.com/rescript-lang/rescript-editor-support).
-- Design & logo assets (together with our designer) for all of ReScript.
-- Helping out on upcoming [ocaml.org](https://ocaml.org) work.
-- Experimental tools like the upcoming doc generator.
-- Yearly reports for our donors and partners.
-- Setting up legal contracts, hiring contractors, paying invoices, doing accounting, etc.
-
-## Benefits of an Association
-
-The Association provides a much needed layer of protection so that we can put liabilities onto an organization instead of individuals (a crucial safeguard when things go wrong and money is at risk). As an example, organizing the past conferences or any event past meetup sizes wouldn’t have been realistic for single, legally unaccountable individuals.
-
-We also take non-partisan ownership of some of ReScript’s essential infrastructures listed above, so that ReScript can live on past individual bus factors.
-
-Furthermore, we serve as a communication channel for our partners and donors.
-
-## Donate
-
-High quality, long-term Open Source work doesn’t come from some good words and pats on the back. While we do try to be efficient, past a certain point, big amounts of time and financial resources are needed to keep up the momentum for maintaining and developing the platform. To this end, we regularly raise donations to make sure that the running costs are covered, and Open Source contributors paid.
-
-If your company relies on the ReScript platform for building commercial products, please consider supporting our efforts by [sending a donation](https://rescript-association.org/donate). It’s the best way to future proof your product’s foundation. Alternatively, you can sponsor individual members like [ryyppy](https://github.com/sponsors/ryyppy/) on GitHub Sponsors.
-
-We want to take this opportunity to thank our previous and active sponsors:
-
-- [Tezos Foundation](https://tezos.foundation) (2020-21)
-- [Ahrefs](https://ahrefs.com) (2019)
-- [OCaml Software Foundation](https://ocaml-sf.org) (2018-19)
-
-Your support allowed us to accomplish many of the work listed earlier. Thank you!
-
-## Extra: Why did this change take so long?
-
-We are an established non-profit organization under Austrian law, located in Vienna. We have legal obligations and can't just rename our organization as we please.
-
-**Here are a few things we had to consider:**
-
-- We wrapped up our yearly donation reports and checked in with our partners regarding our new ReScript brand and roadmap. Our partners are satisfied with our plan!
-- Contrary to our compiler, Austrian bureaucracy is not known for its speed. Thankfully, in parallel, we took this time to reach a couple of major milestones on rescript-lang.org.
-- We had to refactor our brand assets, rework the association site, hook up new domains, rename things while making sure nothing breaks, and communicate the goals within the ReScript team.
-
-Luckily, most of the challenging work is done! We only need to wait for legal authorities to verify the new amendments of our statutes.
-
-## Conclusion
-
-The association rebranding and mission alignment took longer than expected, but was a worthwhile investment. The ReScript Association is now an integral part of the ReScript project, with all the aforementioned benefits.
-
-For further updates, make sure to join our [Forum](https://forum.rescript-lang.org), or follow [@ReScriptAssoc](https://twitter.com/ReScriptAssoc) & [@rescriptlang](https://twitter.com/rescriptlang) on Twitter!
diff --git a/_blogposts/2021-05-07-release-9-1.mdx b/_blogposts/2021-05-07-release-9-1.mdx
deleted file mode 100644
index 75f021180..000000000
--- a/_blogposts/2021-05-07-release-9-1.mdx
+++ /dev/null
@@ -1,164 +0,0 @@
----
-author: rescript-team
-date: "2021-05-07"
-previewImg: /static/blog/compiler_release_9_1.jpg
-title: ReScript 9.1
-badge: release
-description: |
- Featuring a new npm package, a CLI revamp, polymorphic variant interop and object cleanup.
----
-
-## Exciting Improvements in ReScript 9.1
-
-Our recent few releases of ReScript contains [lots of improvements](https://github.com/rescript-lang/rescript/blob/3134392a364b70c9c172aa6c1dbaa1ac6580265d/Changes.md#91), among which are a few standout features we'd like to further promote. Hope you're as excited as we are about these! It goes without saying, our [updated editor plugin](https://forum.rescript-lang.org/t/ann-rescript-vscode-1-1-1-released/1542/3) works with the new releases.
-
-### New NPM Package
-
-We've finally moved from [bs-platform](https://www.npmjs.com/package/bs-platform) to [rescript](https://www.npmjs.com/package/rescript)!
-
-This is mostly just a long overdue name change; the package's virtually identical. Apart from the renaming of our CLI.
-
-### CLI Cleanup
-
-We took the occasion of the NPM package move to also unify the binaries `bsc`, `bsb` and their various commands into a single `rescript` command:
-
-```sh
-❯ rescript -help
-Available flags
--v, -version display version number
--h, -help display help
-Subcommands:
- build
- clean
- format
- convert
- help
-Run rescript subcommand -h for more details,
-For example:
- rescript build -h
- rescript format -h
-The default `rescript` is equivalent to `rescript build` subcommand
-```
-
-Here's a table of translation, if you're upgrading your script that is currently using `bsc` and `bsb`:
-- `bsc -format myFile.res`: `rescript format myFile.res`
-- `bsb`: `rescript build` \*
-- `bsb -make-world`: `rescript build -with-deps` \*
-- `bsb -w`: `rescript build -w`
-- `bsb -w -make-world`: `rescript build -w -with-deps` \*
-
-\* **However**, we've gone even further to improve your experience; in most cases you won't need to invoke `build`, nor `-with-deps` anymore! Not only is `rescript` an alias to `rescript build`, it also smartly detects whether your dependencies are already built; if not, it builds them automatically.
-
-This means that you can ditch your old `-make-world` (now the explicit `-with-deps` flag, for edge-case explicit usages). Just call `rescript` and everything including dependencies will always be built! As performance is our highest priority, we've ensured that such extra detections does not slow down the build.
-
-### Polymorphic Variants for Numbers and Strings
-
-*Drumrolls*
-- Poly variants like `#1`, `#42` compile to JavaScript numbers.
-- Poly variants like `#hello`, `#world` compile to JavaScript Strings.
-
-This is a feature many of you were probably waiting for. Now you can interop with a JavaScript value that's a limited set of numbers or strings:
-
-
-
-```res
-let secret = #42
-
-// optional type annotation, for documentation
-type t = [#1 | #3 | #5 ]
-
-// enjoy the pattern matching
-let test = (arg: t) => {
- switch arg {
- | #1 | #3 => "hello"
- | #5 => "world"
- }
-}
-```
-
-```js
-var secret = 42;
-
-function test(arg) {
- if (arg === 5) {
- return "world";
- } else {
- return "hello";
- }
-}
-```
-
-
-
-But wait, **there's more**. We allow safely coercing these poly variants to `int`s or `string`s even at the ReScript side:
-
-
-
-```res
-let test2 = (arg: [#1 | #3 | #5]) => {
- (arg :> int)
-}
-
-let test3 = (arg: option<[#1 | #3 | #5]>) => {
- (arg :> option)
-}
-
-Js.log(test2(#1))
-Js.log(test3(Some(#3)))
-```
-
-```js
-function test2(arg) {
- return arg;
-}
-
-function test3(arg) {
- return arg;
-}
-
-console.log(1);
-console.log(3);
-```
-
-
-
-As usual, check the output tabs: there's no runtime cost. Time to upgrade some interop!
-
-### Object Cleanup
-
-Our objects had various constraints due to legacy reasons; we've managed to clean them up, and expose the UX that they deserve:
-
-- `Js.t<{"x": int}>` is now simply `{"x": int}`. Existing code using `Js.t` still work; it's now a no-op. Our `rescript format` will also format them away.
-- You can now use object type spread:
- ```
- type point2d = {
- "x": float,
- "y": float,
- }
- type point3d = {
- ...point2d,
- "z": float,
- }
- ```
-
-The cleanup also allowed us to unlock very exciting ideas. For example, [this one](https://forum.rescript-lang.org/t/rfc-more-general-type-checking-for-structural-typings/1485).
-
-## What's Next?
-
-First class unicode support! Expect being able to write the following:
-
-```res
-let helloUnicode = (x) =>{
- switch x {
- | '❤️' => "ReScript is awesome"
- | 'Σ' => "Math is fun"
- | _ => "Lots of unicode"
- }
-}
-```
-
-## Conclusion
-
-Don't miss our various other improvements in [our changelog](https://github.com/rescript-lang/rescript/blob/3134392a364b70c9c172aa6c1dbaa1ac6580265d/Changes.md#91). As always we try to keep our changes performant, lean and robust. We hope you'll enjoy these.
-
-See you next time!
diff --git a/_blogposts/2021-06-25-roadmap-2021-and-new-landing-page.mdx b/_blogposts/2021-06-25-roadmap-2021-and-new-landing-page.mdx
deleted file mode 100644
index a1da83db4..000000000
--- a/_blogposts/2021-06-25-roadmap-2021-and-new-landing-page.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-author: rescript-team
-date: "2021-06-25"
-title: Roadmap 2021 & New Landing Page
-badge: roadmap
-description: |
- Announcing our roadmap for 2021 / 2022, release cycle plans and new landing page.
----
-
-import Image from "src/components/Image.mjs"
-
-## Team Update
-
-It has almost been a year since we originally [launched our new ReScript brand](/blog/bucklescript-is-rebranding), and we think it has been a pretty successful journey so far:
-
-- Brand new documentation experience
-- Relaunch of `rescript-react` and its new docs
-- Release of our re-imagined VSCode & Vim plugins
-- New syntax, compiler and build system improvements, including incremental build performance at scale
-- Improved interop with polymorphic variants for numbers and strings
-- Accessible object system (no need for `Js.t`)
-- The release of our new `rescript` npm package and cli to replace `bs-platform`
-- Making every part of ReScript fully community owned
-- etc.
-
-Stay tuned, this is just the beginning!
-
-### New Roadmap and Release Cycle Plans
-
-We had some thorough discussions about the future of the project and outlined the most important milestones for the next upcoming releases.
-
-**Here's the gist:**
-
-- Two release channels: `stable` and `experimental`
-- More predictable release dates and better migration steps
-- Better communication and discussion for breaking changes
-- Help the community / companies align on major stable versions
-
-The detailed roadmap with all our planned changes (and definition of our release cycle plan) can be found in our [community / roadmap](/community/roadmap) section.
-
-### New Landing Page
-
-After several iterations, we are happy to announce our new [landing page](/).
-
-
-
-This is an incredible milestone for the documentation, and will act as a foundation for some cool new future improvements, such as:
-
-- Highlighted Case Studies from production users such as Beop or Rohea
-- An interactive playground widget for the headline code examples
-- New starter templates and guides
-
-Furthermore, in case you are a **production user of ReScript** and you want to see your company logo highlighted on the landing page, please [open an issue](https://github.com/rescript-lang/rescript-lang.org/issues) and let us know!
-
-Happy hacking.
diff --git a/_blogposts/2022-08-25-release-10-0-0.mdx b/_blogposts/2022-08-25-release-10-0-0.mdx
deleted file mode 100644
index b66493af2..000000000
--- a/_blogposts/2022-08-25-release-10-0-0.mdx
+++ /dev/null
@@ -1,91 +0,0 @@
----
-author: rescript-team
-date: "2022-08-25"
-previewImg: static/blog/grid_0.jpeg
-title: ReScript 10.0
-badge: release
-description: |
- The first community powered release.
----
-
-ReScript version 10 is available! Version 10 is a culmination of over a year's worth of work, bringing faster builds, improving JS interop, and including a bunch of bug fixes. It's also the first fully community powered release, with contributions from over 20 community members.
-
-```
-npm install rescript@10
-```
-
-All changes are listed [here](https://github.com/rescript-lang/rescript/blob/10.0_release/CHANGELOG.md). Let's take a tour of a few of the features we're extra excited about.
-
-## Faster builds with native M1 support
-Users with M1 chips should see a notable speedup, as the new ReScript version has full native support for M1.
-
-## Better ergonomics with Unicode support in regular strings
-You can now use Unicode characters directly in regular strings. This will now produce what you'd expect:
-```res
-let str = "Σ"
-```
-
-You can also pattern match on Unicode characters:
-```res
-switch someCharacter {
- | 'Σ' => "what a fine Unicode char"
- | _ => "Unicode is fun"
-}
-```
-
-## Experimental optional record fields
-Previously, a record would always have to define all its optional fields:
-```res
-type user = {
- name: string,
- age: option
-}
-
-let userWithoutAge = {
- name: "Name",
- age: None,
-}
-
-let userWithAge = {
- name: "Name",
- age: Some(34),
-}
-```
-For small records like the one above, this is typically fine. But for records with many fields, the friction of having to always set all optional fields explicitly adds up. This release has a new experimental feature called optional record fields, allowing you to rewrite the above to this instead:
-
-```res
-type user = {
- name: string,
- age?: int
-}
-
-// No need to set `age` unless it should have a value
-let userWithoutAge = {
- name: "Name",
-}
-
-let userWithAge = {
- name: "Name",
- age: 34
-}
-```
-
-Other than drastically improving the experience when working with large records with optional fields, this also has implications for bindings. For example, binding to JS APIs with large configuration objects is now more ergonomic.
-This feature also paves the way for other exciting features coming in the next release, such as a more idiomatic representation of React components.
-
-## What's next
-
-Version 10 brings the building blocks needed for a number of exciting new features that'll be available in the next version. Features ranging from native support for async/await, to a new version of the JSX integration, making it leaner and more flexible. You'll hear more about this soon.
-
-## Upgrade guide
-
-Please see the detailed [changelog](https://github.com/rescript-lang/rescript/blob/10.0_release/CHANGELOG.md) for a list of breaking changes.
-Each breaking change lists suggestions on how to upgrade your project.
-This can be out of your control in case of dependencies. In that case, please raise issues with the maintainers of those libraries.
-
-One special word for PPXs, in particular for PPX authors: As mentioned in the changelog, some PPXs may give an error `"Attributes not allowed here"`. The solution is to adapt the PPXs following the example of `rescript-relay` in https://github.com/zth/rescript-relay/pull/372.
-
-## Acknowledgements
-
-We would like to thank everyone from the community who volunteered their precious time to suport this project with contributions of any kind, from documentation, to PRs, to discussions in the forum.
-In particular, thank you [@cknitt](https://github.com/cknitt), [@TheSpyder](https://github.com/TheSpyder), [@mattdamon108](https://github.com/mattdamon108), [@DZakh](https://github.com/DZakh), [@fhammerschmidt](https://github.com/fhammerschmidt), [@amiralies](https://github.com/amiralies), [@Minnozz](https://github.com/Minnozz), [@Zeta611](https://github.com/Zeta611), [@jchavarri](https://github.com/jchavarri), [@nkrkv](https://github.com/nkrkv), [@whitchapman](https://github.com/whitchapman), [@ostera](https://github.com/ostera), [@benadamstyles](https://github.com/benadamstyles), [@cannorin](https://github.com/cannorin), [@ClaireNeveu](https://github.com/ClaireNeveu), [@kevinbarabash](https://github.com/kevinbarabash), [@JsonKim](https://github.com/JsonKim), [@Sehun0819](https://github.com/Sehun0819), [@glennsl](https://github.com/glennsl), [@namenu](https://github.com/namenu), [@a-c-sreedhar-reddy](https://github.com/a-c-sreedhar-reddy).
diff --git a/_blogposts/2023-02-02-release-10-1.mdx b/_blogposts/2023-02-02-release-10-1.mdx
deleted file mode 100644
index cce653a2e..000000000
--- a/_blogposts/2023-02-02-release-10-1.mdx
+++ /dev/null
@@ -1,308 +0,0 @@
----
-author: rescript-team
-date: "2023-02-02"
-title: ReScript 10.1
-badge: release
-description: |
- Async/await & better Promise support, JSX v4, and more!
----
-
-## Introduction
-
-We are happy to announce ReScript 10.1!
-
-ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript. It comes with one of the fastest build toolchains and offers first class support for interoperating with ReactJS and other existing JavaScript code.
-
-Use `npm` to install the newest [10.1 release](https://www.npmjs.com/package/rescript/v/10.1.2):
-
-```
-npm install rescript
-
-# or
-
-npm install rescript@10.1
-```
-
-This version comes with two major language improvements we've all been waiting for. **async/await support** for an easy way to write asynchronous code in a synchronous manner, and a **new JSX transform** with better ergonomics, code generation and React 18 support.
-
-Alongside the major changes, there have been many bugfixes and other improvements that won't be covered in this post.
-
-Feel free to check the [Changelog](https://github.com/rescript-lang/rescript/blob/master/CHANGELOG.md#1011) for all the details.
-
-## New `async` / `await` syntax
-
-Async / await has arrived. Similar to its JS counterparts, you are now able to define `async` functions and use the `await` operator to unwrap a promise value. This allows writing asynchronous code in a synchronous fashion.
-
-**Example:**
-
-```res
-// Some fictive functionality that offers asynchronous network actions
-@val external fetchUserMail: string => promise = "GlobalAPI.fetchUserMail"
-@val external sendAnalytics: string => promise = "GlobalAPI.sendAnalytics"
-
-// We use the `async` keyword to allow the use of `await` in the function body
-let logUserDetails = async (userId: string) => {
- // We use `await` to fetch the user email from our fictive user endpoint
- let email = await fetchUserMail(userId)
-
- await sendAnalytics(`User details have been logged for ${userId}`)
-
- Js.log(`Email address for user ${userId}: ${email}`)
-}
-```
-
-To learn more about our async / await feature, check out the relevant [manual section](/docs/manual/latest/async-await).
-
-## New `promise` builtin type and `Js.Promise2` module
-
-In previous versions of ReScript, promises were expressed as a `Js.Promise.t<'a>` type, which was a little tedious to type. From now on, users may use the `promise<'a>` type instead.
-
-Quick example of a `.resi` file using the new `promise` type:
-
-```resi
-// User.resi
-type user
-
-let fetchUser: string => promise
-```
-
-Way easier on the eyes, don't you think? Note that the new `promise` type is fully compatible with `Js.Promise.t` (no breaking changes).
-
-Additionally, we also introduced the `Js.Promise2` module as a stepping stone to migrate `Js.Promise` based code to a first-pipe (->) friendly solution. For the daily practise you'll almost always want to use `async` / `await` to handle promises.
-
-(*Sidenote*: We are also well aware that our users want a solution to unify `Belt`, `Js` and `Js.xxx2` and have a fully featured "standard library" instead of adding more `Js.xxx2` modules. Good news is that we have a solution in the pipeline to fix this. `Js.Promise2` was introduced to ease the process later on and is not supposed to be the panacea of promise handling.)
-
-If you are already using a third-party promise library like [ryyppy/rescript-promise](https://github.com/ryyppy/rescript-promise) or similar, there's no need to migrate any existing code. Introduce `async` / `await` gradually in your codebase as you go.
-
-
-## New JSX v4 syntax
-
-ReScript 10.1 now ships with JSX v4. Here's what's new:
-
-- **Cleaner interop.** Due to recent improvements in the type checker, the `@react.component` transformation doesn't require any `makeProps` convention anymore. `make` functions will now be transformed into a `prop` type and a component function. That's it.
-- **Two new transformation modes**. JSX v4 comes with a `classic` mode (= `React.createElement`) and `automatic` mode (= `jsx-runtime` calls). The latter is the new default, moving forward with `rescript/react@0.11` and `React@18`.
-- **Allow mixing JSX configurations on the project and module level.** Gradually mix and match JSX transformations and modes without migrating any old code!
-- **Pass `prop` types** to `@react.component`. You can now fine tune `@react.component` with your specific prop type needs. Very useful for libraries and frameworks to define component interfaces.
-- **Less boilerplate when using `React.Context`**. Check out our [example](/docs/react/latest/migrate-react#reactcontext) for comparison.
-- **Revisited props spread operator.** This will allow users to spread records in JSX without sacrificing their sanity. Note that this implementation has harder constraints than its JS counterpart. (requires `rescript/react@0.11` or higher)
-- **Better type inference of props.** Type inference when passing e.g. variants that are defined in the same module as the component is much improved. With the earlier JSX version, you'd often need to write code like this in order for the compiler to understand which variant you're passing: ``. With JSX v4, you won't need to tell the compiler where the variant you're passing is located: ``.
-
-Code tells more than words, so here's a non-exhaustive code example to highlight the different JSX features. Make sure to also check out the JS output and play around with the code in our newest playground!
-
-
-
-```res
-// Set the jsx configuration per module
-@@jsxConfig({version: 4, mode: "automatic"})
-
-module AutomaticModeExample = {
- // "automatic" mode will compile jsx to the React 18 compatible
- // jsx-runtime calls
- @@jsxConfig({version: 4, mode: "automatic"})
-
- @react.component
- let make = (~name) => {
-
{React.string(`Hello ${name}`)}
- }
-}
-
-module ClassicModeExample = {
- // "classic" mode will compile jsx to React.createElement calls
- @@jsxConfig({version: 4, mode: "classic"})
-
- @react.component
- let make = (~name) => {
-
{React.string(`Hello ${name}`)}
- }
-}
-
-module NoAttributeExample = {
- // No need for `makeProps` anymore
- type props = {name: string}
-
- let make = (props: props) => {
-
- {React.string(
- `Hello ${name}, you are ${Belt.Int.toString(age)} years old.`,
- )}
-
- }
-}
-
-module PropTypeInjectionExample = {
- // Let's assume we have a prop type that we wanna enforce
- // as our labeled arguments
- type someoneElsesProps = {isHuman: bool}
-
- // Here we tell the `react.component` decorator what props to infer.
- // Useful for e.g. NextJS usage, or to create components that should
- // comply to certain library component interfaces
- @react.component(: someoneElsesProps)
- let make = (~isHuman) => {
- let msg = switch isHuman {
- | true => "hello human"
- | false => "hello fellow computer"
- }
-
{React.string(msg)}
- }
-}
-
-module PropSpreadExample = {
- // Note: This will require @rescript/react 0.11 or later
- @@jsxConfig({version: 4, mode: "automatic"})
-
- @react.component
- let make = () => {
- let props = {NoAttributeExample.name: "World"}
-
-
- }
-}
-
-let root =
-
-
-
-
-
-
-
-
-```
-
-```js
-import * as React from "react";
-import * as JsxRuntime from "react/jsx-runtime";
-
-function Playground$AutomaticModeExample(props) {
- return JsxRuntime.jsx("div", {
- children: "Hello " + props.name + ""
- });
-}
-
-var AutomaticModeExample = {
- make: Playground$AutomaticModeExample
-};
-
-function Playground$ClassicModeExample(props) {
- return React.createElement("div", undefined, "Hello " + props.name + "");
-}
-
-var ClassicModeExample = {
- make: Playground$ClassicModeExample
-};
-
-function make(props) {
- return JsxRuntime.jsx("div", {
- children: "Hello " + props.name + ""
- });
-}
-
-var NoAttributeExample = {
- make: make
-};
-
-function Playground$ReactInterfaceExample(props) {
- var age = props.age;
- var age$1 = age !== undefined ? age : 0;
- return JsxRuntime.jsx("div", {
- children: "Hello " + props.name + ", you are " + String(age$1) + " years old."
- });
-}
-
-var ReactInterfaceExample = {
- make: Playground$ReactInterfaceExample
-};
-
-function Playground$PropTypeInjectionExample(props) {
- var msg = props.isHuman ? "hello human" : "hello fellow computer";
- return JsxRuntime.jsx("div", {
- children: msg
- });
-}
-
-var PropTypeInjectionExample = {
- make: Playground$PropTypeInjectionExample
-};
-
-function Playground$PropSpreadExample(props) {
- return JsxRuntime.jsx(make, {
- name: "World"
- });
-}
-
-var PropSpreadExample = {
- make: Playground$PropSpreadExample
-};
-
-var root = JsxRuntime.jsxs("div", {
- children: [
- JsxRuntime.jsx(Playground$AutomaticModeExample, {
- name: "Automatic"
- }),
- JsxRuntime.jsx(Playground$ClassicModeExample, {
- name: "Classic"
- }),
- JsxRuntime.jsx(make, {
- name: "NoAttribute"
- }),
- JsxRuntime.jsx(Playground$ReactInterfaceExample, {
- name: "Interface"
- }),
- JsxRuntime.jsx(Playground$PropTypeInjectionExample, {
- isHuman: true
- }),
- JsxRuntime.jsx(Playground$PropSpreadExample, {})
- ]
- });
-
-export {
- AutomaticModeExample ,
- ClassicModeExample ,
- NoAttributeExample ,
- ReactInterfaceExample ,
- PropTypeInjectionExample ,
- PropSpreadExample ,
- root ,
-}
-```
-
-
-### How to migrate to JSX v4?
-
-We provide a full [migration guide](/docs/react/latest/migrate-react) with all the details of an migration.
-
-Make sure to also check out the [rescript-react changelog](https://github.com/rescript-lang/rescript-react/blob/master/CHANGELOG.md) as well.
-
-## What's next?
-
-Our contributors are already one step ahead and are currently working on improvements for the next major v11 release. Things that are currently being explored:
-
-- Make uncurried functions the default. This will be a huge change in terms of how we do interop and will open completely new ways to interact with existing codebases. It will also allow us to improve tooling in ways that wouldn't have been possible in a curried language.
-- Explorations for a community "standard library" that goes beyond `Belt` and `Js.*`. This will also involve disabling / removing global "Stdlib" modules that shouldn't be used (e.g. `Array`, `List`, etc).
-- New tooling to generate markdown from docstrings (module, type and value level). This will be super simple, but very effective.
-- Explorations for a [localized documentation page](https://forum.rescript-lang.org/t/translation-project-rescript-lang-org/4022) (currently in a slowed-down exploration phase, but we will be getting there)
-
-Check out the [v11](https://github.com/rescript-lang/rescript/issues?q=is%3Aopen+is%3Aissue+milestone%3Av11.0) milestone on our `rescript-lang` repo for more details on future improvements.
-
-## Acknowledgements
-
-As always, we want to thank our [contributors](https://github.com/rescript-lang/rescript/graphs/contributors?from=2019-11-24&to=2023-02-02&type=c) for building an amazing platform. Special thanks go out to [mununki](https://github.com/mununki) for building the new JSX v4 syntax. Amazing work!
-
-## That's it
-
-We hope you enjoy the newest improvements as much as we do.
-
-In case there's any issues / problems, make sure to report bugs to [rescript-lang/rescript](https://github.com/rescript-lang/rescript) (language / syntax / jsx), [rescript-lang/rescript-react](https://github.com/rescript-lang/rescript-react) (React 16 / 18 binding) or [rescript-association/rescript-lang.org](https://github.com/rescript-lang/rescript-lang.org) (documentation) repositories.
-
-Also feel free to visit the [ReScript forum](https://forum.rescript-lang.org/) to ask questions and connect with other ReScripters.
diff --git a/_blogposts/2023-04-17-improving-interop.mdx b/_blogposts/2023-04-17-improving-interop.mdx
deleted file mode 100644
index 4d883dd96..000000000
--- a/_blogposts/2023-04-17-improving-interop.mdx
+++ /dev/null
@@ -1,319 +0,0 @@
----
-author: rescript-team
-date: "2023-04-17"
-title: Better interop with customizable variants
-badge: roadmap
-description: |
- A tour of new capabilities coming in ReScript v11
----
-
-ReScript v11 is around the corner, and it comes packed with new features that will improve interop with JavaScript/TypeScript. Recently we've made some changes to the runtime representation of variants that'll allow you to use variants for a large number of new interop scenarios, zero cost. This is important, because variants are _the_ feature of ReScript, enabling great data modeling, pattern matching and more.
-
-- **Customizable runtime representation.** We're making the runtime representation of variants customizable. This will allow you to cleanly map variants to external data and APIs in many more cases than before.
-- **Zero cost bindings to discriminated unions.** Variants with inline records will map cleanly to JavaScript/TypeScript [discriminated unions](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions).
-- **Unboxed (untagged) variants.** We also introduce untagged variants - variants where the underlying runtime representation can be a primitive, without a specific discriminator. This will let you cleanly map to things like heterogenous array items, nullable values, and more.
-
-Let's dive into the details.
-
-## Tagged variants
-
-Variants with payloads have always been represented as a tagged union at runtime. Here's an example:
-
-```rescript
-type entity = User({name: string}) | Group({workingName: string})
-
-let user = User({name: "Hello"})
-```
-
-This is represented as:
-
-```javascript
-var user = {
- TAG: /* User */ 0,
- name: "Hello",
-};
-```
-
-However, this has been problematic when binding to external data because there has been no way to customize the discriminator (the `TAG` property) or how its value is represented for each variant case (`0` representing `User` here). This means that unless your external data is modeled the exact same way as above, which is unlikely, you'd be forced to convert to the structure ReScript expects at runtime.
-
-To illustrate this, let's imagine we're binding to an external union that looks like this in TypeScript:
-
-```typescript
-type LoadingState =
- | { state: "loading"; ready: boolean }
- | { state: "error"; message: string }
- | { state: "done"; data: Data };
-```
-
-Currently, there's no good way to use a ReScript variant to represent this type without resorting to manual and error-prone runtime conversion. However, with the new functionality, binding to the above with no additional runtime cost is easy:
-
-```rescript
-@tag("state")
-type loadingState = | @as("loading") Loading({ready: bool}) | @as("error") Error({message: string}) | @as("done") Done({data: data})
-
-let state = Error({message: "Something went wrong!"})
-```
-
-This will compile to:
-
-```javascript
-var state = {
- state: "error",
- message: "Something went wrong!",
-};
-```
-
-Let's break down what we've done to make this work:
-
-- The `@tag` attribute lets you customize the discriminator (default: `TAG`). We're setting that to `"state"` so we map to what the external data looks like.
-- Each variant case has an `@as` attribute. That controls what each variant case is discriminated on (default: the variant case name as string). We're setting all of the cases to their lowercase equivalent, because that's what the external data looks like.
-
-The end result is clean and zero cost bindings to the external data, in a way that previously would require manual runtime conversion.
-
-Now, let's look at a few more real-world examples.
-
-### Binding to TypeScript enums
-
-```typescript
-// direction.ts
-/** Direction of the action. */
-enum Direction {
- /** The direction is up. */
- Up = "UP",
-
- /** The direction is down. */
- Down = "DOWN",
-
- /** The direction is left. */
- Left = "LEFT",
-
- /** The direction is right. */
- Right = "RIGHT",
-}
-
-export const myDirection = Direction.Up;
-```
-
-Previously, you'd be forced to use a polymorphic variant for this if you wanted clean, zero-cost interop:
-
-```rescript
-type direction = [#UP | #DOWN | #LEFT | #RIGHT]
-@module("./direction.js") external myDirection: direction = "myDirection"
-```
-
-Notice a few things:
-
-- We're forced to use the names of the enum payload, meaning it won't fully map to what you'd use in TypeScript
-- There's no way to bring over the documentation strings, because polymorphic variants are structural, so there's no one source definition for them to look for docstrings on. This is true _even_ if you annotate with your explicitly written out polymorphic variant definition.
-
-With the new runtime representation, this is how you'd bind to the above enum instead:
-
-```rescript
-/** Direction of the action. */
-type direction =
- | /** The direction is up. */
- @as("UP")
- Up
-
- | /** The direction is down. */
- @as("DOWN")
- Down
-
- | /** The direction is left. */
- @as("LEFT")
- Left
-
- | /** The direction is right. */
- @as("RIGHT")
- Right
-
-@module("./direction.js") external myDirection: direction = "myDirection"
-```
-
-Now, this maps 100% to the TypeScript code, including letting us bring over the documentation strings so we get a nice editor experience.
-
-### String literals
-
-The same logic is easily applied to string literals from TypeScript, only here the benefit is even larger, because string literals have the same limitations in TypeScript that polymorphic variants have in ReScript.
-
-```typescript
-// direction.ts
-type direction = "UP" | "DOWN" | "LEFT" | "RIGHT";
-```
-
-There's no way to attach documentation strings to string literals in TypeScript, and you only get the actual value to interact with.
-
-With the new customizable variants, you could bind to the above string literal type easily, but add documentation, and change the name you interact with in ReScript. And there's no runtime cost.
-
-### Untagged variants
-
-We've also implemented support for _untagged variants_. This will let you use variants to represent values that are primitives and literals in a way that hasn't been possible before.
-
-We'll explain what this is and why it's useful by showing a number of real world examples. Let's start with a simple one on how we can now represent a heterogenous array.
-
-```rescript
-@unboxed type listItemValue = String(string) | Boolean(bool) | Number(float)
-
-let myArray = [String("Hello"), Boolean(true), Boolean(false), Number(13.37)]
-```
-
-Here, each value will be _unboxed_ at runtime. That means that the variant payload will be all that's left, the variant case name wrapping the payload itself will be stripped out and the payload will be all that remains.
-
-It, therefore, compiles to this JS:
-
-```javascript
-var myArray = ["hello", true, false, 13.37];
-```
-
-This was previously possible to do, leveraging a few tricks, when you didn't need to potentially read the values from the array again in ReScript. But, if you wanted to read back the values, you'd have to do a number of manual steps.
-
-In the above example, reaching back into the values is as simple as pattern matching on them.
-
-Let's look at a few more examples of what untagged variants enable.
-
-### Pattern matching on nullable values
-
-Previously, any value that might be `null` would need to be explicitly converted to an option by using for example `Null.toOption` before you could use pattern matching on it. Here's a typical example of how that could look:
-
-```rescript
-type userAge = {ageNum: Null.t}
-
-type rec user = {
- name: string,
- age: Null.t,
- bestFriend: Null.t,
-}
-
-let getBestFriendsAge = user =>
- switch user.bestFriend->Null.toOption {
- | Some({age}) =>
- switch age->Null.toOption {
- | None => None
- | Some({ageNum}) => ageNum->Null.toOption
- }
- | None => None
- }
-```
-
-As you can see, you need to convert each level of nullables explicitly, which makes it hard to fully utilize pattern matching. With the new unboxed variant representation, we'll instead be able to do this:
-
-```rescript
-// The type definition below is inlined here to examplify, but this definition will live in [Core](https://github.com/rescript-lang/rescript-core) and be easily accessible
-module Null = {
- @unboxed type t<'a> = Present('a) | @as(null) Null
-}
-
-type userAge = {ageNum: Null.t}
-
-type rec user = {
- name: string,
- age: Null.t,
- bestFriend: Null.t,
-}
-
-let getBestFriendsAge = user =>
- switch user.bestFriend {
- | Present({age: Present({ageNum: Present(ageNum)})}) => Some(ageNum)
- | _ => None
- }
-```
-
-> Notice how `@as` now allows us to say that an unboxed variant case should map to a specific underlying _primitive_. `Present` has a type variable, so it can hold any type. And since it's an unboxed type, only the payloads `'a` or `null` will be kept at runtime. That's where the magic comes from.
-
-We can now utilize pattern matching fully without needing to do any conversion.
-
-This has a few implications:
-
-- Dealing with external data, that is often nullable and seldom guaranteed to map cleanly to `option` without needing conversion, becomes much easier and zero cost.
-- Special handling like [@return(nullable)](https://rescript-lang.org/syntax-lookup#return-decorator) becomes redundant. This is good also because the current functionality does not work in all cases. The new functionality will work anywhere.
-
-### Decoding and encoding JSON idiomatically
-
-With unboxed variants, we have everything we need to define a JSON type:
-
-```rescript
-@unboxed
-type rec json =
- | @as(false) False
- | @as(true) True
- | @as(null) Null
- | String(string)
- | Number(float)
- | Object(Js.Dict.t)
- | Array(array)
-
-let myValidJsonValue = Array([String("Hi"), Number(123.)])
-```
-
-Here's an example of how you could write your own JSON decoders easily using the above, leveraging pattern matching:
-
-```rescript
-@unboxed
-type rec json =
- | @as(false) False
- | @as(true) True
- | @as(null) Null
- | String(string)
- | Number(float)
- | Object(Js.Dict.t)
- | Array(array)
-
-type rec user = {
- name: string,
- age: int,
- bestFriend: option,
-}
-
-let rec decodeUser = json =>
- switch json {
- | Object(userDict) =>
- switch (
- userDict->Dict.get("name"),
- userDict->Dict.get("age"),
- userDict->Dict.get("bestFriend"),
- ) {
- | (Some(String(name)), Some(Number(age)), Some(maybeBestFriend)) =>
- Some({
- name,
- age: age->Float.toInt,
- bestFriend: maybeBestFriend->decodeUser,
- })
- | _ => None
- }
- | _ => None
- }
-
-let decodeUsers = json =>
- switch json {
- | Array(array) => array->Array.map(decodeUser)->Array.keepSome
- | _ => []
- }
-```
-
-Encoding that same structure back into JSON is also easy:
-
-```rescript
-let rec userToJson = user => Object(
- Dict.fromArray([
- ("name", String(user.name)),
- ("age", Number(user.age->Int.toFloat)),
- (
- "bestFriend",
- switch user.bestFriend {
- | None => Null
- | Some(friend) => userToJson(friend)
- },
- ),
- ]),
-)
-
-let usersToJson = users => Array(users->Array.map(userToJson))
-```
-
-This can be extrapolated to many more cases.
-
-## Wrapping up
-
-We hope you'll enjoy using these new capabilities. Some of them are a big leap forward for ReScript's interop with JavaScript and TypeScript, and we hope they will simplify many scenarios and open up a few new doors.
-
-And last but not least, you can try ReScript v11 today by installing `npm i rescript@next`.
diff --git a/_blogposts/2023-05-17-enhanced-ergonomics-for-record-types.mdx b/_blogposts/2023-05-17-enhanced-ergonomics-for-record-types.mdx
deleted file mode 100644
index 8f799ec46..000000000
--- a/_blogposts/2023-05-17-enhanced-ergonomics-for-record-types.mdx
+++ /dev/null
@@ -1,186 +0,0 @@
----
-author: rescript-team
-date: "2023-05-17"
-title: Enhanced Ergonomics for Record Types
-badge: roadmap
-description: |
- A tour of new capabilities coming to ReScript v11
----
-
-> This is the second post covering new capabilities that'll ship in ReScript v11. You can check out the first post on [better interop with customizable variants here](https://rescript-lang.org/blog/improving-interop).
-
-[Records](https://rescript-lang.org/docs/manual/latest/record) are a fundamental part of ReScript, offering a clear and concise definition of complex data structures, immutability by default, great error messages, and support for exhaustive pattern matching.
-
-Even though records are generally preferable for defining structured data, there are still a few ergonomic annoyances, such as...
-
-1. Existing record types can't be extended, which makes them hard to compose
-2. Functions may only accept record arguments of the exact record type (no explicit sub-typing)
-
-To mitigate the limitations above, one would need to retreat to [structural objects](https://rescript-lang.org/docs/manual/latest/object#sidebar) to allow more flexible object field sharing and sub-typing, at the cost of more complex type errors and no pattern matching capabilities.
-
-We think that records are a much more powerful data structure though, so we want to encourage more record type usage for these scenarios. This is why ReScript v11 will come with two new big enhancements for record types: **Record Type Spread** and **Record Type Coercion**.
-
-Let's dive right into the details and show-case the new language capabilities.
-
-## Record Type Spread
-
-As stated above, there was no way to share subsets of record fields with other record types. This means one had to copy / paste all the fields between the different record definitions. This was often tedious, error-prone and made code harder to maintain, especially when working with records with many fields.
-
-In ReScript v11, you can now spread one or more record types into a new record type. It looks like this:
-
-```rescript
-type a = {
- id: string,
- name: string,
-}
-
-type b = {
- age: int
-}
-
-type c = {
- ...a,
- ...b,
- active: bool
-}
-```
-
-`type c` will now be:
-
-```rescript
-type c = {
- id: string,
- name: string,
- age: int,
- active: bool,
-}
-```
-
-Record type spreads act as a 'copy-paste' mechanism for fields from one or more records into a new record. This operation inlines the fields from the spread records directly into the new record definition, while preserving their original properties, such as whether they are optional or mandatory. It's important to note that duplicate field names are not allowed across the records being spread, even if the fields share the same type.
-
-Needless to say, this feature offers a much better ergonomics when working with types with lots of fields, where variations of the same underlying type are needed.
-
-### Use case: Extending the Built-in DOM Nodes
-
-This feature can be particularly useful when extending DOM nodes. For instance, in the case of the animation library Framer Motion, one could easily extend the native DOM types with additional properties specific to the library, leading to a more seamless and type-safe integration.
-
-This is how you could bind to a `div` in Framer Motion with the new record type spreads:
-
-```rescript
-type animate = {} // definition omitted for brevity
-
-type divProps = {
- // Note: JsxDOM.domProps is a built-in record type with all valid DOM node attributes
- ...JsxDOM.domProps,
- initial?: animate,
- animate?: animate,
- whileHover?: animate,
- whileTap?: animate,
-}
-
-module Div = {
- @module("framer-motion") external make: divProps => Jsx.element = "div"
-}
-```
-
-You can now use `` as a `` component from Framer Motion and your type definition is quite simple and easy to maintain.
-
-## Record Type Coercion
-
-Record type coercion gives us more flexibility when passing around records in our application code. In other words, we can now coerce a record `a` to be treated as a record `b` at the type level, as long as the original record `a` contains the same set of fields in `b`. Here's an example:
-
-```rescript
-type a = {
- name: string,
- age: int,
-}
-
-type b = {
- name: string,
- age: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- name: "Name",
- age: 35,
-}
-
-let name = nameFromB(a :> b)
-```
-
-Notice how we _coerced_ the value `a` to type `b` using the coercion operator `:>`. This works because they have the same record fields. This is purely at the type level, and does not involve any runtime operations.
-
-Additionally, we can also coerce records from `a` to `b` whenever `a` is a super-set of `b` (i.e. `a` containing all the fields of `b`, and more). The same example as above, slightly altered:
-
-```rescript
-type a = {
- id: string,
- name: string,
- age: int,
- active: bool,
-}
-
-type b = {
- name: string,
- age: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- id: "1",
- name: "Name",
- age: 35,
- active: true,
-}
-
-let name = nameFromB(a :> b)
-```
-
-Notice how `a` now has more fields than `b`, but we can still coerce `a` to `b` because `b` has a subset of the fields of `a`.
-
-In combination with [optional record fields](/docs/manual/latest/record#optional-record-fields), one may coerce a mandatory field of an `option` type to an optional field:
-
-```rescript
-type a = {
- name: string,
-
- // mandatory, but explicitly typed as option
- age: option,
-}
-
-type b = {
- name: string,
- // optional field
- age?: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- name: "Name",
- age: Some(35),
-}
-
-let name = nameFromB(a :> b)
-```
-
-The last example was rather advanced; the full feature set of record type coercion will later on be covered in a dedicated document page.
-
-### Record Type Coercion is Explicit
-
-Records are nominally typed, so it is not possible to pass a record `a` as record `b` without an explicit type coercion. This conscious design decision prevents accidental type matching on shapes rather than records, ensuring predictable and more robust type checking results.
-
-## Try it out!
-
-Feel free to check out the v11 alpha version on our [online playground](https://rescript-lang.org/try?version=v11.0.0-alpha.5&code=LYewJgrgNgpgBAJRgYxAJzAFQJ4AcYDKuaMAhmAKIAepwuscAvHAN4BQccALnvKU6w6c4AO1owAXHADOXNAEsRAcwA0QzqSWS4irms4BfNkJ744AIwHtho8VNkLl+4Zu27nRobC63gMAGJoIMAAQgIAFOZS5gCUTAB8FgB0Yn7GnN5wpFL8zNbCqdoARABy4kXOGlpSAMwArB7pcJmFAoWBwSHh4fwSibExbJ6gkAxIqBg4+ADCIDBoyPIgItS09PB5JrxZVuo6YPZyiqp7hYeOJzauUu57pMhc8gBu2uYgIFCNW2aWmzZnMiOTju1R0Ij0Qk8GRgPnaQVCESiFjijH6KXETUy2R2f2E8gOcCKAEYKqc7ISyn5SVdQfVKlkHs9tHIIDAvtDYeI2uIOqFur1+jFBkYgA), or install the alpha release via npm: `npm i rescript@11.0.0-alpha.6`.
-
-This release is mainly for feedback purposes and not intended for production usage.
-
-## Conclusion
-
-The introduction of Record Type Spreads and Coercion in ReScript v11 will greatly improve the handling of record types. We're eager to see how you'll leverage these new language features in your ReScript projects.
-
-Happy coding!
diff --git a/_blogposts/2023-06-05-first-class-dynamic-import-support.mdx b/_blogposts/2023-06-05-first-class-dynamic-import-support.mdx
deleted file mode 100644
index 0baf66778..000000000
--- a/_blogposts/2023-06-05-first-class-dynamic-import-support.mdx
+++ /dev/null
@@ -1,143 +0,0 @@
----
-author: rescript-team
-date: "2023-06-05"
-title: First-class Dynamic Import Support
-badge: roadmap
-description: |
- A tour of new capabilities coming to ReScript v11
----
-
-> This is the third post covering new capabilities that'll ship in ReScript v11. You can check out the first post on [Better Interop with Customizable Variants](/blog/improving-interop) and the second post on [Enhanced Ergonomics for Record Types](/blog/enhanced-ergonomics-for-record-types).
-
-## Introduction
-
-When developing apps in JavaScript, every line of code eventually needs to be bundled up and shipped to the browser. As the app grows, it's usually a good idea to split up and load parts of the app code on demand as separate JS modules to prevent bundle bloat.
-
-To accomplish this, browsers provide support for dynamic loading via the globally available [`import()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import) function to allow code splitting and lazy loading and ultimately reducing initial load times for our applications.
-
-Even though ReScript has been able to bind to `import` calls via `external` bindings, doing so was quite hard to maintain for to the following reasons:
-
-1. An `import` call requires a path to a JS file. The ReScript compiler doesn't directly expose file paths for compiled modules, so the user has to manually find and rely on compiled file paths.
-2. The return type of an `import` call needs to be defined manually; a quite repetitive task with lots of potential bugs when the imported module has changed.
-
-Arguably, these kind of problems should ideally be tackled on the compiler level, since the ReScript compiler knows best about module structures and compiled JS file locations — so we finally decided to fix this.
-
-Today we're happy to announce that ReScript v11 will ship with first-class support for dynamic imports as part of the language.
-
-Let's have a look!
-
-## Import Parts of a Module
-
-We can now use the `Js.import` function to dynamically import a value or function from a ReScript module. The import call will return a promise, resolving to the dynamically loaded value.
-
-For example, imagine the following file `MathUtils.res`:
-
-```rescript
-// MathUtils.res
-let add = (a, b) => a + b
-let sub = (a, b) => a - b
-```
-
-Now let's dynamically import the `add` function in another module, e.g. `App.res`:
-
-```rescript
-// App.res
-let main = async () => {
- let add = await Js.import(MathUtils.add)
- let onePlusOne = add(1, 1)
-
- RescriptCore.Console.log(onePlusOne)
-}
-```
-
-This compiles to:
-
-```javascript
-async function main() {
- var add = await import("./MathUtils.mjs").then(function(m) {
- return m.add;
- });
-
- var onePlusOne = add(1, 1);
- console.log(onePlusOne);
-}
-```
-
-Notice how the compiler keeps track of the relative path to the module you're importing, as well as plucking out the value you want to use from the imported module.
-
-Quite a difference compared to doing both of those things manually, right? Now let's have a look at a more concrete use-case with React components.
-
-### Use-case: Importing a React component
-
-> **Note:** This section requires the latest [@rescript/react](https://github.com/rescript-lang/rescript-react) bindings to be installed (_0.12.0-alpha.2 and above_).
-
-Our dynamic import makes tasks like [lazy loading React components](https://react.dev/reference/react/lazy#lazy) a simple one-liner. First let's define a simple component as an example:
-
-```rescript
-// Title.res
-@react.component
-let make = (~text) => {
-
{text->React.string}
-}
-```
-
-Now let's dynamically import the `` component by passing the result of our dynamic import to `React.lazy_`:
-
-```rescript
-module LazyTitle = {
- let make = React.lazy_(() => Js.import(Title.make))
-}
-
-let titleJsx =
-```
-
-That's all the code we need! The new `` component behaves exactly the same as the wrapped `` component, but will be lazy loaded via React's built-in lazy mechanism.
-
-Needless to say, all the code examples you've seen so far are fully type-safe.
-
-## Import a Whole Module
-
-Sometimes it is useful to dynamically import the whole module instead. For example, you might have a collection of utility functions in a dedicated module that tend to be used together.
-
-The syntax for importing a whole module looks a little different, since we are operating on the module syntax level; instead of using `Js.import`, you may simply `await` the module itself:
-
-```rescript
-// App.res
-let main = async () => {
- module Utils = await MathUtils
-
- let twoPlusTwo = Utils.add(2, 2)
- RescriptCore.Console.log(twoPlusTwo)
-}
-```
-
-And, the generated JavaScript will look like this:
-
-```js
-async function main() {
- var Utils = await import("./MathUtils.mjs");
-
- var twoPlusTwo = Utils.add(2, 2);
- console.log(twoPlusTwo);
-}
-```
-
-The compiler correctly inserts the module's import path and stores the result in a `Utils` variable.
-
-## Try it out!
-
-Feel free to try out our new dynamic import feature with the latest beta release:
-
-`npm install rescript@11.0.0-beta.1`
-
-Please note that this release is only intended for experiments and feedback purposes.
-
-## Conclusion
-
-The most important take away of the new dynamic imports functionality in ReScript is that you'll never need to care about _where_ what you're importing is located on the file system - the compiler already does it for you.
-
-We hope that it will help shipping software with better end-user experience with faster load times and quicker app interaction, especially on slower network connections.
-
-As always, we're eager to hear about your experiences with our new features. Feel free to share your thoughts and feedback with us on our [issue tracker](https://github.com/rescript-lang/rescript/issues) or on the [forum](https://forum.rescript-lang.org).
-
-Happy hacking!
diff --git a/_blogposts/2023-09-18-uncurried-mode.mdx b/_blogposts/2023-09-18-uncurried-mode.mdx
deleted file mode 100644
index f448e73b7..000000000
--- a/_blogposts/2023-09-18-uncurried-mode.mdx
+++ /dev/null
@@ -1,150 +0,0 @@
----
-author: rescript-team
-date: "2023-09-18"
-title: Uncurried Mode
-badge: roadmap
-description: |
- A tour of new capabilities coming to ReScript v11
----
-
-> This is the fourth post covering new capabilities that'll ship in ReScript v11. You can check out the first post on [Better Interop with Customizable Variants](/blog/improving-interop), the second post on [Enhanced Ergonomics for Record Types](/blog/enhanced-ergonomics-for-record-types) and the third post on [First-class Dynamic Import Support](/blog/first-class-dynamic-import-support).
-
-## Introduction
-
-ReScript is a language that strives to keep its users free from experiencing runtime errors. Usually, when a program compiles, it will already do what the user described.
-But there is still a concept in the language that makes it easy to let some errors slip through. Currying!
-
-Because of currying, partial application of functions is possible. That feature is always advertised as something really powerful. For instance,
-
-```rescript
-let add = (a, b) => a + b
-let addFive = add(5)
-```
-
-is shorter than having to write all remaining parameters again
-
-```rescript
-let add = (a, b) => a + b
-let addFive = (b) => add(5, b)
-```
-
-This comes at a price though. Here are some examples to show the drawbacks of currying:
-
-* Errors because of changed function signatures have their impact at the use site. Consider this example, where the signature of the onChange function is extended with
-a labeled argument
- ```diff
- @react.component
- - let make = (~onChange: string => option unit>) => {
- + let make = (~onChange: (~a: int, string) => option unit>) => {
- React.useEffect(() => {
- // As partial application is allowed, there is no error here.
- let cleanup = onChange("change")
-
- // Here it errors with "This call is missing an argument of type (~a: int)"
- cleanup
- })
- }
- ```
-* If you wanted explicitly uncurry a function, you needed to annotate it with the uncurried dot.
- ```rescript
- (. param) => ()
- ```
-* As ReScript could not fully statically analyze when to automatically uncurry a function over multiple files, it led to unnecessary `Curry.` calls in the emitted JavaScript code.
-* In the standard library (`Belt`), there are both curried and uncurried versions of the same function so you were required to think for yourself when to use the uncurried version and when only the curried one will work.
-* In combination with `ignore` / `let _ = ...`, curried can lead to unexpected behavior at runtime after adding a parameter to a function, because you are accidentally ignoring the result of a partial evaluation so that the function is not called at all.
- 1. Have a look at this simple function. It is assigned to `_` because we ignore the resulting `string` value.
- ```res
- let myCurriedFn = (~first) => first
- let _ = myCurriedFn(~first="Hello!")
- // ^ string
- ```
- 2. Now the function got a second parameter `~second`. Here, the resulting value is a function, which means it is not fully applied and thus never executed.
- ```res
- let myCurriedFn = (~first, ~second) => first ++ " " ++ second
- let _ = myCurriedFn(~first="Hello!")
- // ^ (~second: string) => string
- ```
- 3. One way to prevent such errors is to annotate the underscore with the function's return type:
- ```res
- let _: string = myCurriedFn(~first="Hello!")
- ```
- 4. However, the same issue arises when using the built-in ignore function, which cannot be annotated:
- ```res
- myCurriedFn(~first="Hello!")->ignore
- ```
-
-Those are all only some small paper cuts, but all of them are intricacies that make the language harder to learn.
-
-## Uncurried mode
-
-Starting with ReScript 11, your code will be compiled in uncurried mode. Yes, there is still a way to turn it off ([see below](#how-to-switch-back-to-curried-mode)), but we have decided to already default to this behavior to make it easier for newcomers.
-In uncurried mode, the introductory example yields an error:
-
-```rescript
-let add = (a, b) => a + b
-let addFive = add(5) // <-- Error:
-// This uncurried function has type (. int, int) => int
-// It is applied with 1 arguments but it requires 2.
-```
-
-to fix it, you have two options:
-
-1. state the remaining parameters explicitly
- ```rescript
- let add = (a, b) => a + b
- let addFive = (b) => add(5, b)
- ```
-2. or use the new explicit syntax for partial application
- ```rescript
- let add = (a, b) => a + b
- let addFive = add(5, ...)
- ```
-
-The former approach helps library authors support both ReScript 11 and earlier versions.
-
-### No final unit anymore
-
-We are happy to announce that with uncurried mode the "final unit" pattern is not necessary anymore, while you still can use optional or default parameters.
-
-```res
-// old
-let myFun = (~name=?, ())
-
-// new
-let myFun = (~name=?)
-```
-
-### More wins
-
-Furthermore, function calls in uncurried mode are now guaranteed to get compiled as simple JavaScript function calls, which is quite nice for readability of the generated code.
-It may also give you some (negligible) performance gains.
-
-### How to switch back to curried mode
-
-While we strongly encourage all users to switch to the new uncurried mode, it is still possible to opt out. Just add a
-
-```json
-{
- "uncurried": false
-}
-```
-
-to your `bsconfig.json`, and your project will be compiled in curried mode again.
-
-If you have uncurried mode off and still want to try it on a per-file basis, you can turn it on via
-
-```rescript
-@@uncurried
-```
-
-at the top of a `.res` file.
-
-## Conclusion
-
-Many thoughts have led to this decision, but we think this change is a great fit for a compile-to-JS language overall. If you are interested in the details, have a look at the corresponding [forum post](https://forum.rescript-lang.org/t/uncurried-by-default/) and its comments.
-
-We hope that this new way of writing ReScript will make it both easier for beginners and also more enjoyable for the seasoned developers.
-
-As always, we're eager to hear about your experiences with our new features. Feel free to share your thoughts and feedback with us on our [issue tracker](https://github.com/rescript-lang/rescript/issues) or on the [forum](https://forum.rescript-lang.org).
-
-Happy hacking!
diff --git a/_blogposts/2024-01-11-release-11-0-0.mdx b/_blogposts/2024-01-11-release-11-0-0.mdx
deleted file mode 100644
index eef0dd5de..000000000
--- a/_blogposts/2024-01-11-release-11-0-0.mdx
+++ /dev/null
@@ -1,152 +0,0 @@
----
-author: rescript-team
-date: "2024-01-11"
-previewImg: /static/blog/compiler_release_11_0.jpg
-title: ReScript 11.0
-badge: release
-description: |
- The ReScript developer experience now goes up to eleven!
----
-
-Almost a year after the last release, ReScript is available in version 11! It marks the second major community-driven release and we are very thankful that there are so many willing contributors who invested their spare time into improving the compiler and its ecosystem.
-
-Use your favorite package manager to install the new compiler release, e.g.:
-
-```sh
-npm install rescript@11
-```
-
-To upgrade your project or to find out if there are any breaking changes that affect you, please follow the [migration guide](/docs/manual/latest/migrate-to-v11).
-
-The complete list of changes can be found [here](https://github.com/rescript-lang/rescript/blob/v11.0.0/CHANGELOG.md). Let's have a look at the most notable improvements.
-
-## Highlights
-
-**Note**: As this release is packed, please refer to the linked blogposts for a detailed breakdown of each of the main new features.
-
-### Customizable Variants
-
-We are introducing new features that will improve interop with JavaScript/TypeScript, including customizable runtime representation of variants, zero cost bindings to discriminated unions, and unboxed variants that can be used to map to things like heterogenous array items and nullable values.
-
-- Blogpost: [Better interop with customizable variants](/blog/improving-interop)
-
-### Enhanced Ergonomics for Record Types
-
-New enhancements for record types: Record Type Spread and Record Type Coercion. Record Type Spread allows one to share subsets of record fields with other record types, making it easier to work with types with lots of fields. And Record Type Coercion makes it easier to safely to convert between records with the same set of fields (or a subset).
-
-- Blogpost: [Enhanced Ergonomics for Record Types](/blog/enhanced-ergonomics-for-record-types)
-
-### First-class Dynamic Import Support
-
-Another addition is first-class support for dynamic imports, which will allow developers to split up and load parts of the app code on demand as separate JS modules to prevent bundle bloat and reduce initial load times for applications.
-
-- Blogpost: [First-class Dynamic Import Support](/blog/first-class-dynamic-import-support)
-
-### Uncurried Mode
-
-This release is also introducing uncurried mode, which is a new default mode that compiles all dependencies as uncurried, and it aims to make it easier for newcomers to use the language.
-
-- Blogpost: [Uncurried Mode](/blog/uncurried-mode)
-
-### New Standard Library: ReScript Core
-
-[ReScript Core](https://github.com/rescript-lang/rescript-core) is ReScript's new standard library. It replaces the complete `Js` module as well as some of the more frequently used modules from `Belt` and is recommended to use with uncurried mode.
-
-The latest docs on [rescript-lang.org](/) already use it for the examples. Have a look at the new [RescriptCore API docs](/docs/manual/latest/api/core).
-
-## More Features
-
-Furthermore, there are a lot of smaller improvements of which we want to state only a few here.
-
-### More types eligible for type coercion
-
-The `:>` (type coercion) operator now supports a few more datatypes, check out its [Syntax Lookup](/syntax-lookup#type-coercion) page.
-
-### Build System
-
-The watcher can now be called with just `rescript -w`. Also `rescript build` will always build with dependencies by default so the argument `-with-deps` is not needed anymore.
-
-### rescript.json
-
-The compiler config file has been renamed to `rescript.json`. Since the rebrand from `BuckleScript` to `ReScript`, the `bs-` names make no sense anymore. Later on, we will also rename some of the config attributes, like `bs-dependencies`.
-
-### Relaxed Suffix Rules
-
-You can now freely choose the suffix of the generated JS files. We recommend `.res.js`/`.res.mjs` which is also what our official templates in [`create-rescript-app`](#create-rescript-app) are using.
-
-### Opening files from current project globally
-
-It's now possible to have a module opened by default that is just part of the current project. Previously, this only worked with dependencies or namespaced projects. For example, a file with the path `src/Utils.res` can be added to `bsc-flags` like so:
-
-```json
-{
- "bsc-flags": ["-open Utils"]
-}
-```
-
-## Ecosystem
-
-### Create-ReScript-App
-
-Previously, the ReScript binary was able to initialize new projects itself. But it was required to have a global npm install to use it. This functionality has been removed.
-
-Going forward, `create-rescript-app` is the new recommended way to setup a new project. It can even be used to quickly add ReScript to an existing project. Have a look at the updated [installation instructions](/docs/manual/latest/installation) for how to use it.
-
-### ReScript-React v0.12
-
-In tandem with the new ReScript release, a new version of ReScript-React is released as well. It brings support for dynamically loading React components via `React.lazy`, and more. Check out the [corresponding docs](/docs/react/latest/installation).
-
-### ReScript Tools / Documentation Extraction
-
-There is a new experimental tool available that is a building block for documentation generation from ReScript files. It can be installed and used as follows:
-
-```sh
-npm install --save-dev @rescript/tools
-npx rescript-tools doc src/MyFile.res > doc.json
-```
-
-The tool generates a JSON structure with all the information you need to generate documentation automatically for your ReScript code. It also comes with ReScript bindings for that JSON. Shortly we'll also have automatic markdown generation, and we're planning a static site generator as well, so getting a nice looking and useful documentation site for your ReScript code is just a command away.
-
-### LSP
-
-Our LSP powers our editor tooling. Historically, it has lived within the VSCode extension. This has been a problem for people who do not use VSCode. So, we've made sure that each new LSP version is [published standalone to NPM](https://www.npmjs.com/package/@rescript/language-server).
-
-This makes using an up-to-date version of the LSP in other editors than VSCode much easier. You can install and use it like so:
-
-```sh
-npm install -g @rescript/language-server
-npx rescript-language-server --stdio
-```
-
-## What's next
-
-As we now finish up the work on v11, we're looking forward to working on the next ReScript version. Here are some of the features we're planning to focus on in upcoming versions:
-
-- Make JSX usable beyond React:
- - [Generic JSX transform](https://github.com/rescript-lang/rescript/issues/6408)
- - [JSX preserve mode](https://github.com/rescript-lang/rescript/issues/6197)
-- Integrate the Rescript Core standard library into the compiler
- - remove the OCaml standard library
- - remove `Belt` but keep it available as external package
-- Make maintaining TS libraries with ReScript a breeze, [thanks to genType](https://github.com/rescript-lang/rescript/issues/6210)
-- Support [tagged template literals](https://github.com/rescript-lang/rescript/pull/6250)
-- [Dedicated syntax for creating Dicts](https://github.com/rescript-lang/rescript/issues/6545)
-- [Array spread syntax](https://github.com/rescript-lang/rescript/issues/6546)
-- A [new custom build system](https://github.com/rolandpeelen/rewatch) with better support for workspaces / monorepos
-- More improvements to the type system
-
-## Acknowledgements
-
-We want to thank everyone from the community who volunteered their precious time to support this project with contributions of any kind, from documentation, to PRs, to discussions in the forum.
-
-## That's it
-
-We hope you enjoy the newest improvements as much as we do.
-
-In case of issues / problems, make sure to report bugs to one of the following repositories:
-
-- [rescript-lang/rescript](https://github.com/rescript-lang/rescript) (language / syntax / jsx)
-- [rescript-lang/rescript-react](https://github.com/rescript-lang/rescript-react) (React bindings)
-- [rescript-lang/rescript-vscode](https://github.com/rescript-lang/rescript-vscode) (VSCode language support, LSP, tools)
-- [rescript-lang/create-rescript-app](https://github.com/rescript-lang/create-rescript-app) (project generator) or
-- [rescript-association/rescript-lang.org](https://github.com/rescript-lang/rescript-lang.org) (documentation)
diff --git a/_blogposts/2024-02-01-release-11-1-0.mdx b/_blogposts/2024-02-01-release-11-1-0.mdx
deleted file mode 100644
index 868ef6619..000000000
--- a/_blogposts/2024-02-01-release-11-1-0.mdx
+++ /dev/null
@@ -1,257 +0,0 @@
----
-author: rescript-team
-date: "2024-04-19"
-previewImg: /static/blog/compiler_release_11_1.jpg
-title: ReScript 11.1
-badge: release
-description: |
- Unleashing ReScript from React
----
-
-At the beginning of the year, the ReScript team [released ReScript 11.0](/blog/release-11-0-0), which laid ground work for a lot of possible improvements to make it easier to interact with the JavaScript ecosystem.
-
-This next minor has some wonderful additions to the ReScript toolbelt for you today.
-
-Use your favorite package manager to install the new compiler release, e.g.:
-
-```sh
-npm install rescript@11.1
-```
-
-Find a list of all the new features below:
-
-## JSX for more than React
-
-Historically, ReScript has focused mainly on React for its frontend support. This has led to ReScript having a great JSX transform built into the language itself. However, that JSX transform has been quite difficult to use with anything but React.
-
-With v11.1, that changes! The JSX transform can now be configured to work with any framework. First class React support is of course still the same, and remains a priority. This makes it possible to integrate any other framework's JSX idiomatically in ReScript. And, all the tooling like autocompletion of prop names and types just works.
-
-Many popular frameworks like [Vue](https://vuejs.org/) and [Preact](https://preactjs.com/) use JSX. But, JSX is also becoming more and more ubiquitous, and these days JSX can also be used for everything from building CLI apps to responsive e-mail templating. We're happy that ReScript users will now be able to leverage all of these innovations in a more idiomatic way than before.
-
-Here's an example of what a Preact integration could look like:
-
-```rescript
-// Greet.res
-
-// @jsx.component works the same as @react.component does in React
-@jsx.component
-let make = (~name) => {
-
- {Preact.string("Hello " ++ name)}
-
-}
-```
-
-Read more in the [new documentation on the generic JSX transform](/docs/manual/latest/jsx#generic-jsx-transform-jsx-beyond-react-experimental).
-
-## Tagged template literals
-
-This release comes with support for [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates).
-
-A tag function in JavaScript is a function that expects an array of strings and variadic parameters as input. Now it's possibe to bind to such functions with the new [`@taggedTemplate`](/syntax-lookup#taggedTemplate-decorator) decorator:
-
-
-
-```rescript
-// see https://bun.sh/docs/runtime/shell
-type result = {exitCode: int}
-@module("bun") @taggedTemplate
-external sh: (array, array) => promise = "$"
-
-let filename = "index.res"
-let result = await sh`ls ${filename}`
-```
-```js
-var $$Bun = require("bun");
-
-var filename = "index.res";
-
-var result = await $$Bun.$`ls ${filename}`;
-```
-
-
-
-
-Of course you can also create your own tag function in ReScript now as well, it is just a function with the following signature.
-
-```rescript
-let myTagFunction : (array, array<'param>) => 'output
-```
-
-Refer to the docs to find a [detailed example](/docs/manual/latest/tagged-templates).
-
-## Import attributes
-
-Import attributes is a JS feature that is [currently in standardization](https://github.com/tc39/proposal-import-attributes), but is already implemented by many JS tools. Now, ReScript supports it too, as long as the compiler is configured to output ES6.
-
-
-
-```res
-@module({from: "./myJson.json", with: {type_: "json", \"some-identifier": "yep"}})
-external myJson: Js.Json.t = "default"
-Console.log(myJson)
-
-@module({from: "./myCss.css", with: {type_: "css", \"some-identifier": "yep"}})
-external buttonCss: string = "button"
-Console.log(buttonCss)
-```
-```js
-import * as MyCssCss from "./myCss.css" with {"type": "css", "some-identifier": "yep"};
-import MyJsonJson from "./myJson.json" with {"type": "json", "some-identifier": "yep"};
-
-var myJson = MyJsonJson;
-console.log(myJson);
-
-var buttonCss = MyCssCss.button;
-console.log(buttonCss);
-```
-
-
-## BigInt support
-
-ReScript now natively supports [JavaScript's `bigint` type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt).
-
-
-
-```res example
-open! Js.BigInt
-
-let a = 9007199254740991n + 9007199254740991n
-let b = 2n ** 2n
-```
-```js
-var a = 9007199254740991n + 9007199254740991n;
-
-var p = 2n ** 2n;
-```
-
-
-
-See [big integer docs](https://rescript-lang.org/docs/manual/latest/primitive-types#big-integers-experimental) for more.
-
-## Array spread syntax
-
-The spread syntax, which was already supported for records and lists for a long time, now also supports arrays!
-
-```rescript
-let animals = ["🐶", "🐱", "🐷"]
-let moreAnimals = [...animals, "🐔", "🐴", "🐮"]
-```
-
-## Hyphens in JSX tag names
-
-We lifted restrictions on JSX tag names. This means you no longer need to escape tag names that contain hyphens:
-
-Previously:
-
-```rescript
-let x = <\"custom-tag" />
-```
-
-Now:
-
-```rescript
-let x =
-```
-
-This is particularly useful when dealing with [web components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components), where element names tend to use hyphens.
-
-## Omit trailing undefined in external function calls
-
-ReScript 11's uncurried mode allows for much more ergonomic external function bindings, because trailing units are not needed anymore. But, this comes with a potential problem. All arguments, whether they're actually supplied or not, were printed as `undefined` in the resulting JS. This is handled better now, as trailing `undefined`s are automatically omitted.
-
-
-
-```res
-@val
-external stringify: (
- 'a,
- ~replacer: (string, JSON.t) => JSON.t=?,
- ~space: int=?,
-) => string = "JSON.stringify"
-
-let obj = {"test": 1}
-
-let result = stringify(obj)
-
-let result2 = stringify(obj, ~space=2)
-```
-```js
-var obj = {
- test: 1
-};
-
-var result = JSON.stringify(obj, undefined, undefined);
-
-var result2 = JSON.stringify(obj, undefined, 2);
-```
-```js
-var obj = {
- test: 1
-};
-
-var result = JSON.stringify(obj);
-
-var result2 = JSON.stringify(obj, undefined, 2);
-```
-
-
-## %todo and warn-error
-
-Inspired by languages like [Elm](https://package.elm-lang.org/packages/elm/core/latest/Debug#todo) or [Gleam](https://tour.gleam.run/advanced-features/todo/), we introduced a new extension point: [`%todo`](/syntax-lookup#todo).
-
-It is used to tell the compiler that some code still needs to be implemented and it will crash when executed.
-
-
-
-```res
-let implementMeLater = (): string => %todo("This should return a string eventually.")
-
-let x = implementMeLater()
-
-Console.log(x->String.includes("x"))
-```
-
-```js
-var Js_exn = require("./stdlib/js_exn.js");
-
-function implementMeLater() {
- return Js_exn.raiseError("playground.res:1:37-42 - Todo: This should return a string eventually.");
-}
-
-var x = Js_exn.raiseError("playground.res:1:37-42 - Todo: This should return a string eventually.");
-
-console.log(x.includes("x"));
-```
-
-
-
-We also made the compiler's `-warn-error` flag accessible by the build system, so that `%todo`s and other warnings can be turned into errors in production builds.
-
-```sh
-rescript -warn-error +110
-```
-
-See ["Compile with stricter errors in CI"](/docs/manual/latest/build-overview#compile-with-stricter-errors-in-ci).
-
-## Other changes
-
-Of course we also got a bunch of other changes and bug fixes in this release. Check out the [compiler changelog](https://github.com/rescript-lang/rescript/blob/11.0_release/CHANGELOG.md#1110-rc1) if you are interested.
-
-
-## v12 is next
-v11.1 marks the completion of the v11 versions feature wise. We will of course continue to support the v11 release series with bug fixes and other important updates. However, our focus for new feature development will move to v12. You'll hear more about v12 and the plans for that version soon.
-
-## Acknowledgements
-
-Once again we want to thank everyone from the community who volunteered their precious time to support this project with contributions of any kind, from documentation, to PRs, to discussions in the forum. But especially we want to thank the following people, who helped landing this release:
-
-[@aspeddro](https://github.com/aspeddro), [@cknitt](https://github.com/cknitt), [@cometkim](https://github.com/cometkim), [@cristianoc](https://github.com/cristianoc), [@diogomqbm](https://github.com/diogomqbm), [@enzo-pellegrini](https://github.com/enzo-pellegrini), [@fhammerschmidt](https://github.com/fhammerschmidt), [@glennsl](https://github.com/glennsl), [@JonoPrest](https://github.com/JonoPrest), [@mununki](https://github.com/mununki), [@kevinbarabash](https://github.com/kevinbarabash), [@shulhi](https://github.com/shulhi), [@tsnobip](https://github.com/tsnobip), [@zth](https://github.com/zth).
-
-## That's it
-
-We hope you enjoy the newest improvements as much as we do.
-
-If you find any problems with this new release, make sure to report them here:
-
-- [rescript-lang/rescript](https://github.com/rescript-lang/rescript/issues/new/choose)
diff --git a/_blogposts/2025-03-05-what-can-i-do-with-rescript.mdx b/_blogposts/2025-03-05-what-can-i-do-with-rescript.mdx
deleted file mode 100644
index 19ccbb487..000000000
--- a/_blogposts/2025-03-05-what-can-i-do-with-rescript.mdx
+++ /dev/null
@@ -1,143 +0,0 @@
----
-author: josh-derocher-vlk
-date: "2025-03-05"
-title: What can I do with ReScript?
-badge: community
-description: |
- Can I use Vite, or Next.js? Is it only for React? Can I use Node or Deno?
----
-
-You've taken a look and ReScript and you want to try it out, but how do you get started? There's the [installation](/docs/manual/latest/installation) page in the docs,
-which is great if you want to set up a new React app using [create-rescript-app](https://github.com/rescript-lang/create-rescript-app). There's instructions on how to add it to an existing project or set it up manually.
-But that doesn't really answer the question "Can I use this with X?".
-
-## You can use ReScript anywhere you can use JavaScript
-ReScript is just a language that compiles to JavaScript. Unlike other language like [Elm](https://elm-lang.org/) or [PureScript](https://www.purescript.org/) ReScript doesn't have a recommended framework or independent ecosystem, it's just part of the normal JavaScript world.
-
-Here's a really basic example that you can run in Node after compiling:
-
-```res
-// index.res
-Console.log("Hello")
-```
-
-Just run `node index.res.js` and you'll see "Hello" logged to the console. You can import compiled ReScript into any project that could import JavaScript.
-If you can use `.js` or `.mjs` files, you can use ReScript. This does mean that languages with different file formats like Vue or Svelte require you to import the compiled JavaScript instead of writing it directly in the `.vue` or `.svelte` files.
-
-Real world projects are more than JavaScript files that you write; they use libraries and frameworks. This is where [bindings](/docs/manual/latest/external) come into play.
-A binding is a way to tell ReScript the types and imports from external JavaScript. You can think of bindings in the same way that you need to create a `*.d.ts` file to add types to a JavaScript library that doesn't use TypeScript.
-
-ReScript has great integration with [React](/docs/react/latest/introduction) and those bindings are kept up to date by the core team, but that doesn't mean you don't have other options!
-
-## Using existing bindings
-While ReScript isn't as large as TypeScript it has a small but growing list of bindings you can find on NPM. The website has a [package explorer](/packages) you can use to find official and community maintained bindings.
-Many major libraries have existing bindings. Here's a small set of what you can find.
-
-- [Node](https://github.com/TheSpyder/rescript-nodejs)
-- [Material UI](https://github.com/cca-io/rescript-mui)
-- [Bun](https://github.com/zth/rescript-bun)
-- [Deno](https://github.com/tsirysndr/rescript-deno)
-- [Deno's Fresh](https://github.com/jderochervlk/rescript-fresh)
-- [Vitest](https://github.com/cometkim/rescript-vitest)
-- [Rxjs](https://github.com/noble-ai/rescript-rxjs)
-- [React Helmet](https://github.com/MoOx/rescript-react-helmet)
-- [Jotai](https://github.com/Fattafatta/rescript-jotai)
-- [Headless UI](https://github.com/cbowling/rescript-headlessui)
-
-
-## Using libraries and frameworks created for ReScript
-Bindings are great if you want to work with libraries written with JavaScript, but there are great options for libraries and frameworks written with ReScript, which means you don't need bindings.
-
-- [ReScript Schema](https://github.com/DZakh/rescript-schema) - The fastest parser in the entire JavaScript ecosystem with a focus on small bundle size and top-notch DX.
-- [rescript-relay](https://github.com/zth/rescript-relay) - This is an amazing way to connect React to Relay and GraphQL
-- [rescript-rest](https://github.com/DZakh/rescript-rest) - Fully typed RPC-like client, with no need for code generation!
-- [rescript-edgedb](https://github.com/zth/rescript-edgedb) - Use EdgeDB fully type safe in ReScript. Embed EdgeQL right in your ReScript source code.
-- [ResX](https://github.com/zth/res-x) - A ReScript framework for building server-driven web sites and applications.
-
-## Creating your own bindings
-At some point you will probably have to use a library that doesn't have bindings available. Asking on the [forum](https://forum.rescript-lang.org/) is a great place to start. Someone else might have bindings already in a project that they just haven't published to NPM.
-You can also get help and guidance on how to write bindings for what you need. Usually you can figure out what you need from looking at a libraries official docs.
-You don't need to write bindings for an entire library, or even for all of a functions arguments. Just write what you need as you go.
-
-Let's take a look at the `format` function from [date-fns](https://date-fns.org/). We can see the [arguments in the docs](https://date-fns.org/v4.1.0/docs/format#arguments), and how it should be imported and used.
-```ts
-// type signature
-function format(
- date: string | number | Date,
- formatStr: string,
- options?: FormatOptions
-): string
-
-// how it's imported
-import { format } from "date-fns";
-
-// how it's used
-const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')
-```
-
-That's all we need to know to write bindings to use this function in ReScript.
-The first thing we need to figure out is how to handle the type for what `date-fns` considers to be a `date`, which is `Date | string | number`. In ReScript things can't just be of different types like they can in JavaScript or TypeScript. There are a couple options here; you can make a function for each type such as `formatString` and `formatDate`, or you can create a [variant type](/docs/manual/latest/variant) to map to the possible input types.
-Creating a function for each type is simpler, and it's most likely how you will use the library in your project. You probably have a standard type for Dates already. We'll also need a type for `FormatDateOptions` in case we want to pass options. We'll use [labeled argmuments](/docs/manual/latest/function#labeled-arguments) for our binding.
-```res
-// DateFns.res - you might want to put this in a folder called "bindings" or "external"
-type formatDateOptions // we're not even going to add anything to this yet until we need something
-
-@module("date-fns") // this is the import path for the module
-external formatString: (
- ~date: string, // the date string
- ~formatStr: string, // how we want it formatted
- ~options: formatDateOptions=?, // =? means the argument is optional
-) => string = "format" // "format" is the name of the function we are importing from the module
-```
-
-Now we can use the function!
-
-```res
-let formattedDate = DateFns.formatString(~date="2021-09-01", ~formatStr="MMMM dd, yyyy")
-```
-
-```js
-import * as DateFns from "date-fns";
-
-var formattedDate = DateFns.format("2021-09-01", "MMMM dd, yyyy");
-```
-
-
-If we need to use `FormatDateOptions` we can add to our type definition as needed. The first option is `firstWeekContainsDate` which can either be `1` or `4`.
-Here's how we could write bindings for that.
-```res
-@unboxed
-type firstWeekContainsDate =
- | @as(1) One
- | @as(4) Four
-
-type formatDateOptions = {firstWeekContainsDate: firstWeekContainsDate}
-```
-
-And when we use it it will output either `1` or `4`.
-
-```res
-let formattedDate = formatString(
- ~date="2021-09-01",
- ~formatStr="MMMM dd, yyyy",
- ~options={firstWeekContainsDate: Four},
-)
-```
-
-```js
-import * as DateFns from "date-fns";
-
-var formattedDate = DateFns.format("2021-09-01", "MMMM dd, yyyy", {
- firstWeekContainsDate: 4
- });
-```
-
-
-You can write new bindings and extend existing types as you need.
-
-## How can I get started?
-You can [follow this guide](/docs/manual/v11.0.0/converting-from-js) to add ReScript to an existing JavaScript project to get a feel for how the language works and interacts with JavaScript.
-The forum is also a great place to ask questions! Feel free to drop by and ask how to get started with a specific framework or project that you want to work on,
-and you'll probably get great advice and information from users who have already used ReScript for something similar.
-
-Happy coding!
\ No newline at end of file
diff --git a/_blogposts/2025-03-17-retreats.mdx b/_blogposts/2025-03-17-retreats.mdx
deleted file mode 100644
index 2fe26ad9e..000000000
--- a/_blogposts/2025-03-17-retreats.mdx
+++ /dev/null
@@ -1,99 +0,0 @@
----
-author: rescript-association
-date: "2025-03-17"
-previewImg: /static/blog/rescript_retreat_2024.jpg
-articleImg: /static/blog/rescript_retreat_2024.jpg
-title: ReScript Retreat
-description: |
- Accelerating ReScript development through meeting in-person.
----
-
-ReScript is exclusively developed by volunteers. Some help out in their free time, some are lucky to do it in their work time, but overall there is no single developer who exclusively works full-time on the advancement of the ReScript project.
-
-That's not unusual for many open-source projects, but we want to be sustainable long-term. One way to not only accelerate development but also improve collaboration between contributors is to meet together in-person and hack on things. In this article, we explain what usually happens on such a "Retreat".
-
-Last year, from the 23rd to the 26th of May, the ReScript Association invited many contributors to hack on ReScript. In the end almost all of them responded to the invitation and thus, 15 people from all over the world traveled to Vienna, Austria to meet in person, to do talks, discussions and decisions about and contributions to the ReScript toolchain.
-
-## Talks
-
-
-
-Not everybody is on the same level of knowledge about the parser, compiler or other tools. Talks are a great way to get to a better collective understanding before the real work gets started. In 2024 we had the following talks:
-
-- Brief overview of parser development, by Maxim Valcke ([@\_binary_search](https://x.com/_binary_search))
-- Intro to compiler development, by Cristiano Calcagno ([@ccrisccris](https://x.com/ccrisccris))
- - The full talk is also available here: [Youtube Link](https://youtu.be/sQinTXDynew?si=AihxJBQDEyzMCvFz).
-- Talk about editor tooling, by Gabriel Nordeborn ([@\_\_\_zth\_\_\_](https://x.com/___zth___))
-
-## Group work
-
-
-
-Our contributors split up in multiple small groups of 2-4 people. Every group had a specific topic assigned:
-
-- New Build System (Codename rewatch)
-- rescript-lang.org Playground Output
-- ReScript Core and how to include it in the compiler
-- loops, foreach, iterators
-- Syntax, JSX
-
-## Discussions
-
-We also did group discussions about how to elevator pitch ReScript and about ReScript's roadmap.
-
-The full results of this discussions and the group work can be read at the ReScript forum: https://forum.rescript-lang.org/t/ann-rescript-retreat-roadmap-summary-2024/5275. But that is the past, have a look at the following section to see how far we have come:
-
-### Results
-
-Almost a year later, most of the initiatives started at the retreat have either been completed or significantly advanced in development.
-- We moved the new "Core" standard library into the compiler. Only needs some minor tweaks and documentation.
-- We are getting closer to making "rewatch" our new main build system, with many improvements and fixes already in place.
-- We merged first-class `RegExp` syntax.
-- We merged support for pattern-matching on `dict`s.
-- We removed curried mode.
-- We removed `.ml` compilation support.
-- Based on the above and other cleanups we were able to introduce a new abstract syntax tree which will allow for cleaner language design. Of course a compatibility layer is available.
-
-And more. But that's material for another release blog post.
-
-## Food, Drinks and Leisure
-
-After every hard working day, we finished the day with a nice dinner.
-For instance, one day we gathered together at a viennese winery in the evening.
-
-
-
-At the last day we of course also did some city sightseeing and enjoyed a final Viennese lunch.
-
-## Conclusion
-
-After the retreat, most participants stated that they want to do it again and overall it was a very productive but also fun event for all of us. And we are happy to announce that there will be a ReScript Retreat in 2025, from the 3rd - 6th of May, once again in Vienna, Austria. And a similar number of participants will attend.
-
-## Our Sponsors
-
-
-
-The [ReScript Association](https://rescript-association.org/) paid for all the participants hotel rooms and some of the lunches and dinners. We worked at a coworking space which was paid for by the Vienna-based company [cca.io](https://www.cca.io/), which also happens to employ two of our contributors.
-
-## Acknowledgements
-
-We want to thank all contributors who are so invested into this language that they don't hesitate to travel the globe, some even with their families. Thank you so much!
-
-[@bloodyowl](https://github.com/bloodyowl), [@cknitt](https://github.com/cknitt), [@cometkim](https://github.com/cometkim), [@cristianoc](https://github.com/cristianoc), [@fhammerschmidt](https://github.com/fhammerschmidt), [@glennsl](https://github.com/glennsl), [@IwanKaramazow](https://github.com/IwanKaramazow), [@jfrolich](https://github.com/jfrolich), [@JonoPrest](https://github.com/JonoPrest), [@mununki](https://github.com/mununki), [@rolandpeelen](https://github.com/rolandpeelen), [@ryyppy](https://github.com/ryyppy), [@shulhi](https://github.com/shulhi), [@tsnobip](https://github.com/tsnobip), [@zth](https://github.com/zth).
diff --git a/_blogposts/2025-04-11-introducing-unified-operators.mdx b/_blogposts/2025-04-11-introducing-unified-operators.mdx
deleted file mode 100644
index 312cc0f88..000000000
--- a/_blogposts/2025-04-11-introducing-unified-operators.mdx
+++ /dev/null
@@ -1,268 +0,0 @@
----
-author: rescript-team
-date: "2025-04-11"
-title: "Rethinking Operators"
-badge: roadmap
-description: |
- Discover how unified operators in ReScript v12 simplify arithmetic, reduce syntax noise — plus, a glimpse into the future roadmap.
----
-
-## Introduction
-
-In the upcoming ReScript v12, we're upgrading common arithmetic operators to "Unified Operators".
-
-This means that we can now use a single infix operator syntax for multiple numeric types, and even for string concatenation.
-
-```res
-let addInt = 1 + 2
-let addFloat = 1.0 + 2.0
-let concatString = "Hello" + ", World!"
-```
-
-[Try in the playground](https://rescript-lang.org/try?version=v12.0.0-alpha.5&module=esmodule&code=DYUwLgBAhgJjCSA7SBeCBGCBqCAmAUKJLDAGLAD2UqGAdAAzZ4OHgQDGFi71AymACcAlogDmENACIAEiGCVJTSQBoIAdQoDgMAIST8QA)— it just works since `v12.0.0-alpha.5`. We don't need `+.` and `++` anymore. 🥳
-
-This post covers both the reasoning behind the change and what’s next on the roadmap. If you're interested in the implementation details, you’ll find them in [the pull request](https://github.com/rescript-lang/rescript/pull/7057).
-
-## Problems in operators
-
-Until v12, the operator syntax had a few notable problems.
-
-### Unwanted syntax gap
-
-Using different operators for each type is unfamiliar to JavaScript users, and the lack of operator overloading can feel strange to most programmers.
-
-This is tricky in the real world. Because JavaScript's default number type is `float`, not `int`, ReScript users have to routinely deal with awkward syntax like `+.`, `-.`, `*.`, `%.`.
-
-Some operators are available only as functions. Instead of `<<` and `>>`, we use unfamiliar names like `lsl` and `asr`.
-
-### Infix explosion 💥
-
-ReScript has multiple "add operator" syntaxes for every primitive type.
-
-```res
-let addInt = 1 + 2
-let addFloat = 1.0 +. 2.0
-let concatString = "Hello" ++ ", World!"
-```
-
-We ran into the same issue again when we added `bigint` support.
-
-What other operator syntax could we introduce to add two bigint values? There were suggestions like `+,`, `+!`, `+n`, but the team never felt confident in any of them, so we just hid them inside the `BigInt` module definition instead of introducing new syntax.
-
-It was inconvenient because we had to shadow the definition every time.
-
-```res
-let addBigInt = {
- open BigInt!
- 1n + 2n
-}
-```
-
-Every time we introduce a new primitive type (who knows?), we run into the same issue with all arithmetic operators.
-
-### Hidden risk of polymorphism
-
-So why don’t we just use the same pretty operators everywhere, like in JavaScript?
-
-```res
-let compareInt = (a: int, b) => a < b
-
-let compareFloat = (a: float, b) => a < b
-```
-
-```js
-function compareInt(a, b) {
- return a < b;
-}
-
-function compareFloat(a, b) {
- return a < b;
-}
-```
-
-And this won't be compiled
-
-```res
-let compareNumber = (a: int, b: float) => a < b
-// ~
-// [E] Line 1, column 46:
-// This has type: float
-// But it's being compared to something of type: int
-//
-// You can only compare things of the same type.
-//
-// You can convert float to int with Belt.Float.toInt.
-// If this is a literal, try a number without a trailing dot (e.g. 20).
-```
-
-Because ReScript only intentionally supports monomorphic operations, `(int, int) => int` in this case. Users have to perform type conversions explicitly where necessary.
-
-While it's tempting to allow full operator overloading or polymorphism like JavaScript or TypeScript, we intentionally avoid it to preserve predictable type inference and runtime performance guarantees.
-
-However, comparisons are actually the exception. Time to summon polymorphism!
-
-```res
-let comparePoly = (a, b) => a < b
-```
-
-```js
-import * as Primitive_object from "./stdlib/Primitive_object.js";
-
-let comparePoly = Primitive_object.lessthan;
-```
-
-As both operands `a` and `b` are inferred as "open type", it turned it into a "runtime primitive" that takes any type and performs a struct comparison at runtime.
-
-This is a design decision to support comparisons for arbitrary record or tuple types, but it is not ideal. The runtime primitive is not well optimized and too expensive for common arithmetic operations.
-
-## Unified operators
-
-Unlike polymorphic operators, unified operators don't use runtime primitives at all. Instead, they modify the compiler to translate specific operators to existing compile-time primitives.
-
-More specifically, the following rules are added to the primitive translation process.
-
-> Before handling a primitive, if the primitive operation matches the form of `lhs -> rhs -> result` or `lhs -> result`
->
-> 1. If the `lhs` type is a primitive type, unify the `rhs` and the `result` type to the `lhs` type.
-> 2. If the `lhs` type is not a primitive type but the `rhs` type is, unify `lhs` and the `result` type to the `rhs` type.
-> 3. If both `lhs` type and `rhs` type is not a primitive type, unify the whole types to the `int`.
-
-It changes the type inference like
-
-```res
-let t1 = 1 + 2 // => (int, int) => int
-let t2 = 1. + 2. // => (float, float) => float
-let t3 = "1" + "2" // => (string, string) => string
-let t4 = 1n + 2n // => (bigint, bigint) => bigint
-
-let fn1 = (a, b) => a + b // (int, int) => int
-let fn2 = (a: float, b) => a + b // (float, float) => float
-let fn3 = (a, b: float) => a + b // (float, float) => float
-
-let inv1 = (a: int, b: float) => a + b // => (int, int) => int
-// ^ error: cannot apply float here, expected int
-```
-
-Then, in IR, it is translated to the corresponding compile-time primitive based on the unified type.
-
-This approach is inspired by the awesome language [F#](https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/symbol-and-operator-reference/arithmetic-operators#operators-and-type-inference), which also originates from OCaml.
-
-> The use of an operator in an expression constrains type inference on that operator. Also, the use of operators prevents automatic generalization, because the use of operators implies an arithmetic type. In the absence of any other information, the F# compiler infers `int` as the type of arithmetic expressions.
-
-The rules are limited to only specific primitive types and operators. Perhaps this seems inflexible since it is an ad hoc rule and not part of the formal type system.
-
-But this is enough for us as it practically improves our DX while being **100% backward compatible**.
-
-## Further improvements
-
-The unified operators are already a huge DX improvement for ReScript users — but there’s even more to come!
-
-### Reduced internal complexity
-
-By normalizing how primitive operators are added and managed, it also lowers maintenance overhead. A couple of new operators are actually being added by new community contributors [@MiryangJung](https://github.com/MiryangJung) and [@gwansikk](https://github.com/gwansikk)
-
-### Support most JavaScript operators
-
-We are working to support more unified operators to close the syntax gap with JavaScript.
-
-In ReScript v12, most familiar JavaScript operators should work as-is — not just arithmetic operators, but also bitwise and shift operators.
-
-- Remainder operator (`%`) - [#7152](https://github.com/rescript-lang/rescript/pull/7152)
-- Exponentiation operator (`**`) - [#7153](https://github.com/rescript-lang/rescript/pull/7153)
-- Bitwise operators (`~`, `^`, `|`, `&`) - [#7172](https://github.com/rescript-lang/rescript/issues/7172)
-- Shift operators (`<<`, `>>`, `>>>`) - [#7171](https://github.com/rescript-lang/rescript/issues/7171)
-
-### The future of comparison operators
-
-The comparison behavior described above has not changed. The comparability of records and tuples is useful when dealing with data structures. However, relying on the runtime type information is not an ideal solution.
-
-Since record types are much broader than primitive types, we need a new approach beyond the unified operators.
-
-This won't be included in the v12 release, but we'd like to share an idea we're exploring. Imagine Rust's `#[derive(Eq)]` but for ReScript. As the compiler fully understands the structure of each record type, it can generate optimized code for each type.
-
-```res
-@deriving([compare, equals])
-type person = {
- name: string,
-}
-
-// Implicitly derived unified comparison operators for the `person` type.
-external \"person$compare": (person, person) => int = "%compare"
-external \"person$equals": (person, person) => bool = "%equals"
-```
-
-```javascript
-function person$compare(a, b) {
- return a.name.localeCompare(b.name);
-}
-
-function person$equals(a, b) {
- return a.name === b.name;
-}
-```
-
-Then, the compiler performs the same specialization used in unified operators and generates code where the comparison operation is used. So `(a :> person) < b` is expected to be `person$compare(a, b) < 0` or fully inlined as it is less complex than a certain threshold.
-
-The example is over-simplified, but it should work equally well with more complex, nested structures or sum types.
-
-One possible use case for generated comparison operators is React apps. Using complex types in production apps can result in significant performance degradation, as ReScript ADTs are not compatible with React's memoization behavior.
-
-```res
-module MyComponent = {
- type payload = {
- // ...
- }
-
- type state =
- | Idle(payload)
- | InProgress(payload)
- | Done(payload)
-
- @react.component
- let make = (~state: state) => <>>
-}
-
-let myElement =
-```
-
-Because `Idle(...)` creates a new object each time, React's built-in shallow equality check always fails.
-
-If ReScript generates an optimized shallow equality implementation, it could be used with `React.memo` like this:
-
-```res
-module MyComponent = {
- type payload = {
- // ...
- }
-
- type state =
- | Idle(payload)
- | InProgress(payload)
- | Done(payload)
-
- @deriving([shallowEquals])
- type props = {
- state: state,
- }
-
- let make = React.memoCustomCompareProps(
- ({ state }) => <>>,
-
- // It checks tag equality first.
- // If the tags are the same, it checks shallow equality of their payload.
- \"props$shallowEquals",
- )
-}
-```
-
-The React component is now effectively memoized and more efficient than a hand-written component in TypeScript.
-
-## Conclusion
-
-Simplicity and conciseness remain ReScript's core values, but that doesn't necessarily mean we cannot improve our syntax.
-
-The unified operator fixes the most awkward parts of the existing syntax and lowers the barrier for JavaScript developers to adopt ReScript, bridging the gap between intuitive JavaScript syntax and ReScript’s strong type guarantees.
-
-We continue to explore the path to becoming the best-in-class language for writing high-quality JavaScript applications. We’d love to hear your thoughts — join the discussion on the forum or reach out on social media.
-
-Thanks for reading — and as always, happy hacking!
diff --git a/_blogposts/archive/2017-10-01-bucklescript-release-1-0.mdx b/_blogposts/archive/2017-10-01-bucklescript-release-1-0.mdx
deleted file mode 100644
index ddb359cb1..000000000
--- a/_blogposts/archive/2017-10-01-bucklescript-release-1-0.mdx
+++ /dev/null
@@ -1,13 +0,0 @@
----
-author: hongbo
-date: "2017-10-01"
-previewImg:
-badge: release
-title: Bloomberg announces BuckleScript 1.0
-description: |
----
-
-## Hello World!
-
-The BuckleScript announcement can be found on the [Tech at Bloomberg
-blog](https://www.techatbloomberg.com/blog/bucklescript-1-0-release-arrived/).
diff --git a/_blogposts/archive/2017-10-02-bucklescript-release-1-4-2.mdx b/_blogposts/archive/2017-10-02-bucklescript-release-1-4-2.mdx
deleted file mode 100644
index c992e27a1..000000000
--- a/_blogposts/archive/2017-10-02-bucklescript-release-1-4-2.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
----
-author: hongbo
-date: "2017-10-02"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.4.2
-description: |
----
-
-## New Changes
-
-BuckleScript 1.4.2 release comes with quite a few enhancements.
-
-### Most notable features
-
-1. The build system is ready to handle multiple npm packages, and its module
- system can be overriden by the end user. For example, if the library A(end
- user) depends library B and library C, we only need tell the build system
- that A needs goog module system, then B, C will be built using goog module
- system too.
-
-There are quite lots of enhancements to the build system, we strongly recommend
-users to re-read the documentation ([old
-docs](http://bucklescript.github.io/bucklescript/Manual.html#_build_system_support)).
-
-2. [FFI add a new
- feature](/docs/manual/latest/bind-to-js-function#fixed-arguments)
-3. [FFI can handle `bs.obj` and `bs.string`
- combination](https://github.com/bucklescript/bucklescript/issues/1072)
diff --git a/_blogposts/archive/2017-10-03-bucklescript-release-1-4-3.mdx b/_blogposts/archive/2017-10-03-bucklescript-release-1-4-3.mdx
deleted file mode 100644
index 461b766bd..000000000
--- a/_blogposts/archive/2017-10-03-bucklescript-release-1-4-3.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
----
-author: hongbo
-date: "2017-10-03"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.4.3
-description: |
----
-
-## New Changes
-
-Besides a number of minor bug fixes, most notable changes
-
-### ES6 module support, "es6", "es6-global", "amdjs-global"
-
-"es6" package-spec will generate es6 modules for each ocaml module,
-"es6-global" will also generate es6 modules but the path does not rely on node
-module resolution "amdjs-globa" is similar to "es6-global"
-
-The es6 module is in perfect combination with rollup as a bundler, see this
-link about how good the dead code elimination is
-https://twitter.com/bobzhang1988/status/827562467148623875
diff --git a/_blogposts/archive/2017-10-04-bucklescript-release-1-5-0.mdx b/_blogposts/archive/2017-10-04-bucklescript-release-1-5-0.mdx
deleted file mode 100644
index a90813ef8..000000000
--- a/_blogposts/archive/2017-10-04-bucklescript-release-1-5-0.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
----
-author: hongbo
-date: "2017-10-04"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.5.0
-description: |
----
-
-## New Changes
-
-Besides a number of minor bug fixes and perf improvement, most notable changes
-
-- Bundled Reason together thanks to Reason team, so that Reason syntax support
- is also first class, this also makes Reason for the first time available to
- Windows users.
-- FFI added
- [`bs.uncurry`](/docs/manual/latest/function#curry--uncurry)
- which will automatically uncurry the callback so the user land API is clearer
-- Improve [object label
- translation](https://bucklescript.github.io/bucklescript/Manual.html#_object_label_translation_convention)
- to cause less surprise, this might case minor backward compatibility
diff --git a/_blogposts/archive/2017-10-05-bucklescript-release-1-5-1.mdx b/_blogposts/archive/2017-10-05-bucklescript-release-1-5-1.mdx
deleted file mode 100644
index 87752c131..000000000
--- a/_blogposts/archive/2017-10-05-bucklescript-release-1-5-1.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
----
-author: hongbo
-date: "2017-10-05"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.5.1
-description: |
----
-
-## Features
-
-1. [FFI: Unicode literal
- support](http://bucklescript.github.io/bucklescript/Manual.html#_unicode_support_since_1_5_1)
-2. [FFI: return value
- checking](http://bucklescript.github.io/bucklescript/Manual.html#_unicode_support_since_1_5_1)
-3. [FFI: Detect global variable
- existence](http://bucklescript.github.io/bucklescript/Manual.html#_detect_global_varialbe_existence_code_bs_external_code_since_1_5_1)
-
-## Minor breaking changes
-
-1. changes NodeJS special variables from `module_` to `_module` to make it more consistent
-2. [%node ] return [_ option] type instead of `undefined`
diff --git a/_blogposts/archive/2017-10-06-bucklescript-release-1-5-2.mdx b/_blogposts/archive/2017-10-06-bucklescript-release-1-5-2.mdx
deleted file mode 100644
index d35aceed1..000000000
--- a/_blogposts/archive/2017-10-06-bucklescript-release-1-5-2.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
----
-author: hongbo
-date: "2017-10-06"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.5.2
-description: |
----
-
-## Features
-
-1. [FFI: Unicode literal support](
- http://bucklescript.github.io/bucklescript/Manual.html#_unicode_support_since_1_5_1)
-2. [FFI: Return value
- checking](http://bucklescript.github.io/bucklescript/Manual.html#_return_value_checking_since_1_5_1)
-3. [FFI: Detect global variable
- existence](http://bucklescript.github.io/bucklescript/Manual.html#_detect_global_varialbe_existence_code_bs_external_code_since_1_5_1)
-
-## Minor breaking changes
-
-1. changes NodeJS special variables from `module_` to `_module` to make it more consistent
-2. [%node ] return [_ option] type instead of `undefined`
diff --git a/_blogposts/archive/2017-10-07-bucklescript-release-1-7-0.mdx b/_blogposts/archive/2017-10-07-bucklescript-release-1-7-0.mdx
deleted file mode 100644
index b5eced4cb..000000000
--- a/_blogposts/archive/2017-10-07-bucklescript-release-1-7-0.mdx
+++ /dev/null
@@ -1,121 +0,0 @@
----
-author: hongbo
-date: "2017-10-07"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.7.0
-description: |
----
-
-## New Release
-
-We are excited to announce `bs-platform@1.7.0`, which highlights following new features and changes:
-
-### First class uncurried calling convention
-
-As a functional language, the vanilla OCaml only provides curried calling
-convention, BuckleScript employs fairly [advanced
-optimizations](http://bucklescript.github.io/bucklescript-playground/#Curry_Optimization)
-for curried calling convention, however, the most efficient code is efficient
- code not relying on optimizations.
-
-Since this release, we provide first class uncurried calling convention, _all
-toolchains provided by BuckleScript_ can understand uncurried calling
-convention
-
-#### Curried calling convention
-
-Let's show the feature with an example file called `test.ml`:
-
-```ocaml
-let f g x = g x [@bs]
-```
-
-or in Reason
-
-```reason
-let f = (g, x) => g(. x);
-```
-
-`f` is curried function, `g` is an uncurried function due to `[@bs]` annotation.
-In Reason, the dot in `g(. x)` is equivalent to `[@bs]`.
-
-When we evaluate the program with the `bsc` command...
-
-```sh
-bsc.exe -i test.ml # infer the type
-```
-
-...we will get following inferred interface:
-
-```ocaml
-val f : ('a -> 'b [@bs]) -> 'a -> 'b // <1>
-```
-
-or in Reason
-
-```
-let f: ((. 'a) => 'b, 'a) => 'b
-```
-
-As you can see in the examples above, `g` is inferred as an uncurried
-function (`(. 'a) => 'b`) while `f` is still a curried function.
-
-The compiler will also yield following JS output:
-
-```js
-function f (g,x){
- return g (x)
-}
-```
-
-Again, the code shows that...
-
-- `f` is optimized and flattened
-- `g` works like uncurried function
-
-### API documentation
-
-Now `ocamldoc` can understand `[@bs]` natively(instead of printing a desugared
-output), we provide an [API
-documentation](http://bucklescript.github.io/bucklescript/api/) for the library
-shipped with BuckleScript, we plan to ship the documentation generator in next
-release.
-
-### More Interop including `Js.Promise.t`
-
-### Unicode string and interpolation support
-
-See [String
-interpolation](/docs/manual/latest/interop-cheatsheet#string-unicode--interpolation)
-
-### Catch exceptions raised on JS side
-
-See [Catch exception](/docs/manual/latest/exception)
-
-### Mixed data source
-
-See
-[`bs.open`](http://bucklescript.github.io/bucklescript/Manual.html#__code_bs_open_code_type_safe_external_data_source_handling_since_1_7_0)
-
-
-### ES6 support in Safari
-
-See [fix es6 support in
-browser](https://github.com/bucklescript/bucklescript/issues/1465)
-
-### `bs-dev-dependencies` support in the build system
-
-See [build
-schema](http://bucklescript.github.io/bucklescript/docson/#build-schema.json)
-
-### `bs.as` accept json literal support
-
-This feature is mentioned in the [Functions / Fixed Arguments](/docs/manual/latest/bind-to-js-function#fixed-arguments) section.
-
-### Bug fixes, performance improvement, and stress tests
-
-[#1549](Notable bug fixes
-https://github.com/bucklescript/bucklescript/issues/1549),
-[#1539](https://github.com/bucklescript/bucklescript/issues/1539),
-[#1520](https://github.com/bucklescript/bucklescript/issues/1520)
diff --git a/_blogposts/archive/2017-10-08-bucklescript-release-1-7-4.mdx b/_blogposts/archive/2017-10-08-bucklescript-release-1-7-4.mdx
deleted file mode 100644
index 08d07bdcd..000000000
--- a/_blogposts/archive/2017-10-08-bucklescript-release-1-7-4.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
----
-author: hongbo
-date: "2017-10-08"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.7.4
-description: |
----
-
-## New Release
-
-We are excited to announce `bs-platform@1.7.3` with following new highlighted features:
-
-### New CLI template generator
-
-You can now create and build a new BuckleScript project in a single command
-(works on all platforms with zero dependencies including Windows)
-
-```sh
-npm install -g bs-platform && bsb -init hello && cd hello && npm run build
-```
-
-You can find more details in the
-[manual](http://bucklescript.github.io/bucklescript/Manual.html#_using_existing_templates_since_1_7_4).
-
-
-### Adding several modules to Js namespace, including Option, Result, List and Vector.
-
-Note it is still work in progress, but these libraries are optimized for both
-performance and size, they can provide an even smaller code size than current
-case
-
-
-You can also find a full list of changes in our
-[Changelog](https://github.com/bucklescript/bucklescript/blob/master/Changes.md#bucklescript-174may-24-2017)
-file.
diff --git a/_blogposts/archive/2017-10-09-bucklescript-release-1-7-5.mdx b/_blogposts/archive/2017-10-09-bucklescript-release-1-7-5.mdx
deleted file mode 100644
index 048bc7aa9..000000000
--- a/_blogposts/archive/2017-10-09-bucklescript-release-1-7-5.mdx
+++ /dev/null
@@ -1,43 +0,0 @@
----
-author: hongbo
-date: "2017-10-09"
-previewImg:
-badge: release
-title: Announcing BuckleScript 1.7.5
-description: |
----
-
-## New Changes
-
-Since BuckleScript has grown and developed its own community, it is moving to
-its own GitHub organization. This will allow the community to continue to grow
-and to set the future direction of the project.
-
-At the same time, we are truly thankful for the support of Bloomberg who
-allowed this amazing project to happen!
-
-A detailed list of changes are listed as below:
-
-
-### Fixes:
-
-- #1676, `bsb -w` will always build regardless of filetype when fs.watch doesn't send a filename
-- #1655, fix #1653 Js.Promise.all[n] interfaces
-- #1658, fix typeof = "null" issue
-- #1656, bs.get/set/get_index/set_index respects bs.ignore
-- #1654, `bsb -init` fails if package or current dir has space (parent dir can have spaces)
-- #1678, `bs.get{null;undefined}` in object type
-- #1692, fix invalid js syntax output
-- #1701, fix tailcall handling interaction with exception handler
-- #1666, fix misue of GADT api
-
-### Features:
-
-- #1648, exposed `bsc` in the npm environment
-- #1647, speical handling `bsb -init .` to reuse current directory
-- #1667, fix an optimizaiton bug
-- #1698, fix exit code incorrectly aggregated issue
-- #1666, add Js.Json.classify and Js.Types.classify
-- #1705, add dom storage api
-- #1672, sync up with new reason
-- #1696, provide reason-react template
diff --git a/_blogposts/archive/2018-03-13-a-small-step-for-bucklescript.mdx b/_blogposts/archive/2018-03-13-a-small-step-for-bucklescript.mdx
deleted file mode 100644
index a46579f06..000000000
--- a/_blogposts/archive/2018-03-13-a-small-step-for-bucklescript.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
----
-author: hongbo
-date: "2018-03-13"
-previewImg:
-title: A Small Step for BuckleScript...
-description: ...and a big one for the community!
----
-
-
-## Reason, Belt and the Community
-
-BuckleScript is a compiler, a set of type system enhancements, a build system
-and a great deal of JavaScript interoperability features rolled into one. From
-day one, its goal has been to provide a rock solid, lightweight and performant
-stack for the community. So far, we'd like to think that we've done a great
-job.
-
-Alas, such a centralized effort can only scale so much. We'll continue to
-polish the foundation, tweak features and respond to demands, but
-BuckleScript's ready to tackle bigger challenges alongside our sister project,
-Reason. This is where **you**, the community, comes in.
-
-This week, we're opening up a new suite of additions to the standard library,
-named **Belt**. Belt has been in closed beta for a while now; some of you might
-have heard of it or even used it. Now, the time's ripe to open it up to the
-broader public.
-
-In the following weeks, we'll gradually outline the motivations, the design
-decisions and the future plans for Belt on this blog. However, new additions to
-the standard library aren't a small feat, and we can't possibly tackle all of
-them by ourselves. Your feedback as a community member will be very
-appreciated, and we **will** do our best to stay open to feedback, more so that
-we have ever done for the core compiler and build system. Belt's development
-will have more of an open process; we'll be monitoring the issue list closely
-for changes/features requests and tagging the them with Good First Task
- (contribution welcome). At the same time, we hope to clean up the
- repository's workflow a bit too, to ease future contributions.
-
-Thank you for your continued support, and here's to a brighter future for
-BuckleScript and Reason! Stay tuned for the first of several posts on Belt. See
-you soon!
diff --git a/_blogposts/archive/2018-04-16-bucklescript-release-3-0-0.mdx b/_blogposts/archive/2018-04-16-bucklescript-release-3-0-0.mdx
deleted file mode 100644
index 61fc05ca0..000000000
--- a/_blogposts/archive/2018-04-16-bucklescript-release-3-0-0.mdx
+++ /dev/null
@@ -1,57 +0,0 @@
----
-author: hongbo
-date: "2018-04-16"
-previewImg:
-badge: release
-title: Announcing BuckleScript 3.0
-description: |
----
-
-## New Changes
-
-`bs-platform` 3.0.0 is released! Go get it. This is a great release.
-
-**Highlighted features:**
-
-- **OCaml/Reason boolean are finally compiled as JS boolean**! Due to
- historical limitations, OCaml `true`/`false` was compiled to `1`/`0` in JS.
- This caused quite a bit of confusion for newcomers. It now compiles to JS
- `true`/`false`. Special thanks to [Cristiano](https://twitter.com/ccrisccris)
- for all the hard work.
-- New `[bs.deriving abstract`] feature. This is
- an experimental and potentially much better way to bind to JS objects that
- potentially obsoletes the need for a few other APIs. Please see the linked
- docs and help us test it!
-- `raw` now accepts a function declaration with an unsafe string body: `let f =
- [%raw (a, b) => "return a + b"]` (OCaml syntax: `let f = [%raw fun a b ->
- "return a + b"]`). This makes embedding escape-hatch raw JS code even easier
- for the compiler to optimize for speed and readability, as you've indicated
- that the raw code block is a function, with specific numbers of arguments.
-
-The usual changelog is
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#300).
-
-We've been working on the BuckleScript compiler for almost four years now;
-meanwhile, the OCaml type checker itself has already been engineered for almost
-three decades. After all this of work, we believe that BuckleScript has reached
-a stable and reliable stage.
-
-Below is a list of to-dos that we will work on in the future. Suggestions
-welcome!
-
-- Upgrade the OCaml version. OCaml is quite a stable language; there are not
- too many changes between BuckleScript's OCaml version and latest stable one.
- Nonetheless, it's good to keep up with the OCaml ecosystem.
-- A uniform representation for local modules/global modules. Currently local
- modules are compiled to array, while global modules are compiled to
- ES6/CommonJS/AMD modules (the cost of local modules is low though, thanks to
- aggressive inlining).
-- Continue improving
- [Belt](https://bucklescript.github.io/bucklescript/api/Belt.html). Some
- initial nice numbers [here](https://github.com/bobzhang/belt-simple-bench).
-- Enhance FFI to allow creation of idiomatic, type safe JS classes.
-- Introduce a debug mode to enhance the printing of OCaml data structures.
-- Performance. The compiler performance and generation of more performant and
- readable code is always our top concern.
-
-Thank you for all the support so far!
diff --git a/_blogposts/archive/2018-05-21-bucklescript-release-3-1-0.mdx b/_blogposts/archive/2018-05-21-bucklescript-release-3-1-0.mdx
deleted file mode 100644
index 440be9b14..000000000
--- a/_blogposts/archive/2018-05-21-bucklescript-release-3-1-0.mdx
+++ /dev/null
@@ -1,55 +0,0 @@
----
-author: hongbo
-date: "2018-05-21"
-previewImg:
-badge: release
-title: Announcing BuckleScript 3.1
-description: |
----
-
-## Newest Changes
-
-List of changes
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#310)!
-Highlights:
-
-### Print Record Keys and Variant Tags
-
-A picture's worth a thousand words:
-
-**Before:**
-
-
-
-**After:**
-
-
-
-Please see [Better Data Structures Printing (Debug
-Mode)](/docs/reason-compiler/latest/better-data-structures-printing-debug-mode) for usage.
-
-## Even Better `bs.deriving abstract`
-
-We've further polished our new way of binding to JS objects. The record fields
-of a `bs.deriving abstract` can now accept functions.
-
-## Pipe First Improvement
-
-[Pipe First](/docs/manual/latest/pipe) now supports piping into variant tags!
-
-```reason
-let result = name |. preprocess |. Some
-```
-
-We turn this into:
-
-```reason
-let result = Some(preprocess(name))
-```
-
-### Js.Boolean Is Gone
-
-Since BuckleScript 3.0, OCaml `bool` now compile to JS `boolean`. It was
-deprecated (all the boolean conversion functions became no-ops, with warnings
-during build), and now completely removed. No more need for the converter
-functions!
diff --git a/_blogposts/archive/2018-05-23-bucklescript-release-3-1-4.mdx b/_blogposts/archive/2018-05-23-bucklescript-release-3-1-4.mdx
deleted file mode 100644
index d3cf03167..000000000
--- a/_blogposts/archive/2018-05-23-bucklescript-release-3-1-4.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
----
-author: hongbo
-date: "2018-05-23"
-previewImg:
-badge: release
-title: Announcing BuckleScript 3.1.4
-description: |
----
-
-## New Release
-
-Hey again! The release two days ago removed the deprecated Js Boolean APIs (no
-longer needed since we compile OCaml booleans to JS boolean since `3.0.0`). But
-folks have voiced that the removal was too hasty, as some of their dependencies
-still haven't upgraded to `3.0.0` and thus still needed the deprecated APIs.
-
-We try to be diligent with our releases; hopefully this didn't churn too many
-people. To remediate the situation, **we're putting those calls back for this
-version**. Finger crossed that you don't have to wait on too many dependencies!
-
-Sorry for the small churn, and thanks for all your feedback!
diff --git a/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt1.mdx b/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt1.mdx
deleted file mode 100644
index 3c3e637df..000000000
--- a/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt1.mdx
+++ /dev/null
@@ -1,106 +0,0 @@
----
-author: hongbo
-date: "2018-07-17"
-previewImg:
-badge: release
-title: Announcing BuckleScript 4.0 (Part One)
-description: |
----
-
-## Newest Changes
-
-`bs-platform` 4.0.0 is released! It has some nice features that we want to
-share with you, a more detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#400)
-
-In this post, I will talk about a new development workflow, all toolchains are
-self-contained in `bs-platform`, [Cristiano](https://twitter.com/ccrisccris)
-will talk about the new runtime encoding for optional.
-
-### A simple approach to accelerate feedback loop in a reliable way
-
-For mordern day-to-day development, developers expect that whenever files are
-changed, the build process is re-triggered automatically and browser reloaded
-instantly, this feedback loop should be quick enough to make developers not get
-distracted.
-
-What we have before this release is as below:
-
-- Source file changes detected by bsb watch mode, rebuild
-- Webpack noticed JS files modified, rebundle and update the browser state
-
-Both `bsb` and `webpack` has a watch mode, but they are architectured in
-fundamentally different ways that they achive different levels of reliability.
-
-In `bsb` watch mode, there is no long running memory-hungry process, so
-whenever a file changed, a fresh process is started very fast and dies quickly,
-our experiment shows that in practice, a long running bsb process can work for
-a week without going into bad state, and such feedback loop is still instant.
-
-`Webpack` holds lots of objects in memory and running for a longtime, it
-results in less reliability and OOM from time to time.
-
-Another complexity introduced by a JS bundler is that it explodes users
-directory structure, for beginners trying to get started with bucklescript,
-installing such huge amount of directories is intimidating. In a slow network,
-this used to result in installation failure.
-
-We understand that existing JS bundler has a huge ecosystem and it is
-invaluable in production mode, but we are exploring whether we can provide
-similar or even more reliable development experience without introducing such
-complexity.
-
-Below is a new workflow we are exploring in this release:
-
-### NodeJS module loader in browser
-
-Instead of bundling the modules like normal bundlers, we provide a NodeJS
-module loader so that it simply reloads the module without bundling.
-
-Note ideally this can be achieved using ES6 module spec, however, it is not
-practical due to following reasons:
-
-- Most dependencies are not strictly ES6 compilant, this is true even for libraries authored in ES6 style
-
-```js
-import {createElement} form "react" ; // not es6 compliant
-import {createElement} from "node_modules/react/index" // not es6 compilant
-import {createElement} from "./node_modules/react/index.js" // correct es6 module
-```
-- ES6 modules does not allow an indirection, by introducing our own NodeJS module loader, we have an indirection and more meta-data about each module, so that we can do more reflection work in the future.
-
-Loading in clean state without packing seems to introduce some redundant work,
-but on the contratry, it is very fast, it used to load 200 modules under 150ms,
-even better, since there is no cached state in a long running process, it is
-much more reliable.
-
-### WebSocket integration with bsb
-
-We need a mechanism to communciate between browser and the build system so that
-whenever a rebuild finished, the browser get notified.
-
-Instead of introducing more dependencies, we implemented a minimal websocket
-interface so that whenever a rebuild finishes, the weboscket clients which
-subscribe the port will get notified.
-
-## To conclude and try it out
-
-So the proposed new work flow is as below: whenever a source file is changed,
-the bsb rebuild, if it build successfully, it will notify the browser to reload
-the NodeJS modules directly.
-
-All the devtools are provided by bs-platform, the good thing is that there is
-no long running memory-hungry process, so that we expect it will deliver a more
-reliable and consistent experience.
-
-You can try it out in `bs-platform@4.0.0`
-
-```sh
-bsb -init test -theme react-lite
-cd test
-npm install
-npm start
-http-server # start a http server
-```
-
-Open `localhost:port/index.html`, changes the reason source code and expect the browser show the changes.
diff --git a/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt2.mdx b/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt2.mdx
deleted file mode 100644
index 943db6237..000000000
--- a/_blogposts/archive/2018-07-17-bucklescript-release-4-0-0-pt2.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-author: hongbo
-date: "2018-07-17"
-previewImg:
-badge: release
-title: Announcing BuckleScript 4.0 (Part Two)
-description: |
----
-
-## New Changes
-
-`bs-platform` 4.0.0 introduces a new runtime representation for optionals.
-
-While beforehand `None` was represented at runtime as `0` and `Some("hello")`
-as an array `["hello"]`, the new representation tries to unbox optionals as
-much as possible.
-
-Now `None` is represented as `undefined` and `Some("hello")` simply as
-`"hello"`.
-
-Generally speaking, `Some(v)` is represented as `v`, i.e. unboxed. The only
-exception is when `v` itself is `None` or `Some(...(Some(None))`, in which case
-a special boxed representation is used.
-
-The construction of new values `Some(-)`, and pattern matching `| Some(-) =>
-...`, perform some case analysis to decide when to box or unbox values. In the
-absence of nested optionals, the result of both operations will *always* be the
-indentity.
-
-Because of that, it's possible to use type-based optimization to avoid
-performing case analysis in the first place. So while the generic function
-```(x) => Some(x)``` will generate code to check wheter `x` should be boxed,
-the more type-specific function ```(x:int) => Some(x)``` is just compiled as
-the identity function, as it's clear from the type that no boxing is required.
-
-For a high-level formalization of the boxing and unboxing operations, as well
-as the polymorphic comparison functions, see this
-[gist](https://gist.github.com/cristianoc/791aac26f94dbded0fc137d61f4bd2a8).
-
-One design choice was whether to represent `None` as `null` or as `undefined`.
-The choice of `undefined` was made because this allows a direct mapping for
-[optional labeled
-arguments](https://reasonml.github.io/docs/en/function#optional-labeled-arguments).
-As a consequence `null` is never boxed, so e.g. `Some(null)` is represented as
-`null`.
diff --git a/_blogposts/archive/2018-11-13-arity-zero.mdx b/_blogposts/archive/2018-11-13-arity-zero.mdx
deleted file mode 100644
index 20f10a62f..000000000
--- a/_blogposts/archive/2018-11-13-arity-zero.mdx
+++ /dev/null
@@ -1,94 +0,0 @@
----
-author: hongbo
-date: "2018-11-13"
-previewImg:
-title: A Change of Undefined Behavior in BuckleScript 4.0.7
-description: |
----
-
-## What is this about?
-
-In the latest BuckleScript release, we introduced a minor change in the codegen
-which broken some user libraries. Note this change only broke the code in the
-FFI boundary(the interop between JS).
-
-In the early days of BuckleScript, there is no built-in uncurried calling
-convention support, since OCaml is a curried language, which means every
-function has arity one, so there is no way to express that a function has arity
-zero, this makes some interop challenging. In the mocha unit test library, it
-expects its callback to be function of arity zero.
-
-To work around this issue, before this release, we did a small codegen
-optimization, for a function of type `unit -> unit`, if its argument is not
-used, we remove its argument in the output.
-
-```reason
-let f: unit => int = () => 3;
-let f_used: unit => unit = x => Js.log(x);
-```
-
-Output JS prior to v4.0.7:
-
-```js
-function f (){
- return 3
-}
-function f_used (x){
- console.log(x)
-}
-```
-
-To make this hack work, in the application side, for a curried function
-application, we treat the function of arity 0 and arity 1 in the same way, this
-still works since curried function application could only happen on the ocaml
-function.
-
-This trick is unintuitive, it makes code generated less predictable and it is
-not relevant any more, since we added native uncurried calling convention
-support later.
-
-Therefore, we generate JS code in a more consistent style in this release:
-
-```reason
-let f: unit => int = () => 3;
-```
-
-```js
-function f (param){
- return 3
-}
-```
-
-So in your FFI code, if you have a callback which is expected to be of arity
-zero, use `unit -> unit [@bs]` or `unit -> unit [@bs.uncurry]`, it is 100%
-correct. Note our previous trick will only make `unit -> unit` work most time,
-but it can not provide any guarantee.
-
-Since we removed the trick, the curried runtime does not treat function of
-arity 0 and arity 1 in the same way, so if you have code like this
-
-```reason
-let f: unit => int = [%bs.raw {|function () {
- return 3
-}|}];
-```
-
-It is not correct any more, the fix would be:
-
-```reason
-let f: unit => int = [%bs.raw {|function(param) {
- return 3
-}|}];
-```
-
-Or
-
-```reason
-let f: (. unit) => int = [%bs.raw {|function() {
- return 3
-}|}];
-```
-
-FFI is a double edge sword, it is a must have to ship your product, yet it is
-tricky, and there may be some undefined behavior you rely on but don't
-recognize, it is encouarged to always test your FFI in the boundary.
diff --git a/_blogposts/archive/2018-11-19-bucklescript-roadmap-q3-4-2018.mdx b/_blogposts/archive/2018-11-19-bucklescript-roadmap-q3-4-2018.mdx
deleted file mode 100644
index fe24b349d..000000000
--- a/_blogposts/archive/2018-11-19-bucklescript-roadmap-q3-4-2018.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-author: hongbo
-date: "2018-11-19"
-previewImg:
-badge: roadmap
-title: BuckleScript Plans for the Second Half of 2018
-description: |
----
-
-## Introduction
-
-In this article we will explain what we are doing now and what we plan to
-improve in next half (Dec-May), we would also like to hear your feedback so
-that we can adjust accordingly.
-
-Keep in mind that the development team is a very small team, so we have to
-prioritize things instead of working on every feature.
-
-## What we are doing
-
-In the last couple of month we are busy upgrading the OCaml compiler from
-4.02.3 to 4.06.1, the good news is that the upgrade is almost done.
-
-We plan to ship it soon by the end of this year, at the same time, we will
-still maintain the current version of the compiler until we feel the new
-compiler is as good as the old one.
-
-Note the upgrade is not easy work since the internals of OCaml compiler changed
-significantly in the last few years. Our upgrade strategy is also quite
-conservative, it works by conditional compilation so that the bsc compiler
-actually work with both versions, the benefit is that in this case, we are not
-in a messy state, the bug fix of bsc compiler can still benefit two branches.
-
-But the reward is also huge, there are a bunch of optimizations and nice
-features coming alone in the recent releases of the OCaml language, to name a
-few: `inline records`, `local exception` and `hex notation for floats` etc.
-More importantly, this is a great move to engage better with OCaml ecosystem:
-the previous old version compiler imposed some maintenance overhead for OCaml
-toolchain, we can make better use of OCaml toolchain after such upgrade.
-
-## What's next
-
-### Making better use of the new compiler internals
-
-The upgrade is divided into two stage, the first stage is focused on `no
-regression` so that we can ship it.
-
-Afterwards, we have plans to make better use of the more info rich IR in the
-new release. Thanks to the flambda introduced after OCaml 4.03, more
-information is passed down to the lambda IR where BuckleScript take from. For
-example, user can annotate functions inline or not with inline attribute, we
-can make better use of such information.
-
-In newer versions of OCaml compiler, the block and array is more distinguished
-we will investigate whether we can make use of it to provide better data
-representation for OCaml datatype.
-
-Another interesting direction is to see if we can encode module in a consistent
-style: as an JS dictionary for both global modules and local modules.
-
-### Improving the usability of BuckleScript toolchain
-
-BuckleScript is focused on making better use of JS ecosystem and provide
-values to ship JS code in production (produced by BuckleScript).
-
-
-
-#### Making Bucklescript toolchain more lightweight
-
-Currently it is still too heavy for users to provide JS libraries from
-BuckleScript, since clients need to install bs-platform which requires a lot of
-disk-space and native compilation in some platform. We will investigate if we
-can distribute the native compiler without using npm.
-
-Separate the compiler from stdlib may also help draw the contribution to the
-stdlib/belt library.
-
-#### Improving the usability of bsb
-
-Currently the bsb is restricted by the npm directory layout, the generated JS
-artifacts is also restricted by it, we will see if we can relocate the JS
-artifacts or provide more flexibility for users.
-
-
diff --git a/_blogposts/archive/2018-12-05-bucklescript-release-4-0-8.mdx b/_blogposts/archive/2018-12-05-bucklescript-release-4-0-8.mdx
deleted file mode 100644
index faaf13c0a..000000000
--- a/_blogposts/archive/2018-12-05-bucklescript-release-4-0-8.mdx
+++ /dev/null
@@ -1,95 +0,0 @@
----
-author: hongbo
-date: "2018-12-05"
-previewImg:
-badge: release
-title: BuckleScript 4.0.8 (Part One)
-description: |
----
-
-## New Release
-
-Today we released version 4.0.8 of `bs-platform`.
-A detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#408).
-
-Most user-facing changes are bug fixes and small enhancements, while quite a
-lot of work has been done behind the scenes towards the more fundamental
-improvements coming down the line. This blog post refers to the BuckleScript
-runtime and some of the work we are doing to improve it.
-
-The design goal of BuckleScript is to make the runtime as small as possible.
-This runtime is divided into two parts: the C shims, and the fundamental
-language feature support.
-
-The C shims are not a strict runtime requirement: in the native backend, the
-functions are implemented in C, but in BuckleScript this isn't necessary. We
-can either implement the C shims in a polyfill style or we can just implement
-them in OCaml and compile via BuckleScript. Recently, we have been shifting
-more and more work from the runtime to the normal OCaml stdlib by patching it
-with conditional compilation. The benefit is obvious – they are just normal
-functions which do not need special compiler support – but the downside is that
-we might need to make more patches to the libraries which use C functions, but
-considering the more challenging part of maintaining the patches to the
-compiler, we think such overhead is worthwhile.
-
-If we ignore the C shims, the BuckleScript runtime is very small, and it is
-pretty easy for experienced BuckleScript programmers to write runtime-free code
-which generates standalone JS code. Such code could include supporting curried
-calling conventions, encoding of OCaml ADT, etc.
-
-The BuckleScript runtime is written in BuckleScript itself. The benefit of this
-is that it is much more maintainable than implementing in JS itself, and it is
-easier to keep some invariants when crossing the boundary between the runtime
-and the stdlib. For example, we don't need to worry about the consistency of
-the runtime encoding of `type tuple` in BuckleScript, since the runtime is also
-implemented in BuckleScript itself, and we get three output modules for free
-thanks to this "dogfooding".
-
-However, this makes the build system pretty complicated and fragile, and the
-dependencies between each module are mostly hard coded. Even worse, this
-introduces a hard dependency between the normal libraries and the runtime
-binary artifacts.
-
-In particular, one
-[issue](https://github.com/BuckleScript/bucklescript/issues/2772) we want to
-address is to make the BuckleScript toolchain lightweight. We will continue to
-implement the BuckleScript runtime by using BuckleScript itself, but we want to
-get rid of dependencies like [the support for
-exceptions](https://github.com/BuckleScript/bucklescript/issues/3164). In the
-end, installation will no longer involve building the runtime: BuckleScript
-will simply be a bunch of generated JS files, so the complexity of the build
-system will not impact users at all. This is quite important given that we are
-committed to supporting Windows.
-
-In the future, we will therefore be able to distribute the runtime as a normal
-JS library, and the BuckleScript user will only need the binary compiler and a
-small set of JS files. They will be able to use stdlib, Belt or anything else.
-
-To get rid of such dependencies between stdlib and the runtime, we are going to
-introduce a breaking change in the future. In hindsight, our support for
-catching JS exceptions exposed the concrete representation of the exception
-encoding, in particular:
-
-```ocaml
-match ... with
-| OCamlException exn -> ..
-| Js.Exn.Error e -> ...
-```
-
-In this release, we introduced a function to avoid exposing such exception constructors:
-
-```ocaml
-match ... with
-| OCamlException exn -> ...
-| e ->
- match Js.asJsExn e with
- | Some jserror -> ..
- | None -> ...
-```
-
-We encourage you to make such changes yourself to future-proof your codebases.
-
-Oh and by the way, one side effect of this refactoring of the BuckleScript
-runtime is that the compilation does not require reading of the generated
-`.cm*` files, which means faster compilation :)
diff --git a/_blogposts/archive/2019-01-07-bucklescript-release-4-0-17.mdx b/_blogposts/archive/2019-01-07-bucklescript-release-4-0-17.mdx
deleted file mode 100644
index 694af4b66..000000000
--- a/_blogposts/archive/2019-01-07-bucklescript-release-4-0-17.mdx
+++ /dev/null
@@ -1,30 +0,0 @@
----
-author: hongbo
-date: "2019-01-07"
-previewImg:
-badge: release
-title: Announcing BuckleScript 4.0.17
-description: |
----
-
-## Newest Changes
-
-`bs-platform` 4.0.17 is a major release.
-
-It improved incremental compilation time significantly.
-
-A picture is worth a thousand words, below is a large monorepo which contains
-4096 modules, changing the root node which has more than 3000 dependents, it
-finished building within 400ms.
-
-
-
-We will write a dedicated article explaining how we achieve this incredible
-build performance.
-
-A detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#4017)
-
-Another quite important but not client facing change is that we renovated the
-internal build system, it will be much easier for contribution later on. We
-will update the contribution guide once it gets stable.
diff --git a/_blogposts/archive/2019-01-11-scalable.mdx b/_blogposts/archive/2019-01-11-scalable.mdx
deleted file mode 100644
index 5950c2128..000000000
--- a/_blogposts/archive/2019-01-11-scalable.mdx
+++ /dev/null
@@ -1,277 +0,0 @@
----
-author: hongbo
-date: "2019-01-11"
-previewImg:
-title: In search of lightning feedback loop in a large codebase
-description: |
----
-
-## Feedback loops
-
-As software developers, when we touch a codebase, we want the edit-compile
-cycle, to be as short as possible. Studies show that feedback loop less than
-1s, or 100ms will prevent devleopers getting distracted.
-
-This seems to be possible in a small project, but as project grows to 10k
-files, or even more, 100k files in a large company like Google, Facebook, this
-seems to be extremely challenging.
-
-In this article, we are talking about how BuckleScript - it supports both OCaml
-and ReasonML syntax - is trying to solve this issue.
-
-The edit-build cycle in BuckleScript consists of two components: the compiler
-which does type checking and code generation and the scheduler which figures
-out what to rebuild and how to do it concurrently.
-
-## The importance of compiler's cold performance
-
-In order to reduce the edit-build latency, some languages adopt an approach of
-in memory compiler + watch mode. We think this is not a scalable or reliable
-approach.
-
-A compiler is a complex piece of software, the chance that a compiler has
-memory leak is not low. It is not observed in real world since compiler is used
-mostly in a short-lived setting, it starts up fast and dies off quickly.
-
-However, this is decimated when compiler is put in server mode. When we have
-10k or 100k files held in memory, it is very easy to observe OOM (out of memory
-issues).
-
-We figured that to deliver a scalable and reliable system, it is better to
-decouple the compiler's complexity from the scheduler. When the compiler cold
-starts and dies off quickly, the operating system process mechanism serves as
-an obviously correct garbage collector, which increases the reliability of the
-whole system.
-
-To reduce such latency in a single compiler's workload, we spent lots of time
-tweaking the performance of the compiler itself, for example, rewriting the hot
-path in C code, most BuckleScript compiler source code is written in an
-imperative C-style to avoid allocation.
-
-To have a general idea of how fast BuckleScript's compiler runs:
-
-```
-test>cat fib.ml
-let rec fib = function
- | 0 | 1 -> 1
- | n -> fib (n - 1) + fib (n - 2)
-```
-
-```
-test>time /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-cmi -bs-cmj -c fib.ml
-
-real 0m0.008s
-user 0m0.004s
-sys 0m0.003s
-```
-
-Having a compiler run fast with a cold start lays the groundwork so that it
-won't be the bottleneck in the whole process. This is because when the
-architecture decouple the compiler from the scheduler, the compiler will be
-invoked by the scheduler hunderds of thousands of times in a build cycle, the
-latency of the compiler in a single compilation unit will add up.
-
-## The art of being incremental
-
-Having a compiler running fast in cold mode does not solve the scalability
-issue alone. Take a code base which contains 100K source files for example,
-100ms per file would result in 10,000s latency which is not acceptable. To
-solve such issue, we need reduce the workload as much as possible during each
-edit-build cycle.
-
-In a statically typed language, suppose we have two compilation units A , B,
-and B depends on A. Whenever A changes, B gets recompiled, to make it worse,
-the recompilation propogates, all dependencies of B get recompiled, which will
-result in a snowball effect. In this model, whenever we touch the non-leaf
-compilation unit, the latency would be large.
-
-The key observation here for BuckleScript is that B does not really depend on
-the last modified time of A, it depends on the intermediate output of A (e.g,
-`.cmj` and `.cmi` file) which may not change even if we modify A. What we work
-on here is to reduce the probability of changing A's intermediate output due to
-changing A. With the integration of a scheduler, it can help stop the
-propagation as early as possible.
-
-In BuckleScript, each compilation unit is composed of two files, the
-implementation file and interface file which are compiled to intermediate
-output .cmj and .cmi separately.
-
-The interface builds are completely separate from implemetation, it does not
-depend on .cmj (implementation intermediate output) at all.
-
-Suppose the interface is not changed, whenever we touch the implementation
-file, BuckleScript designs the data structure of `.cmj` in a way that the
-content of `.cmj` is seldom changed. (Let's say its probability is 0.05 which
-is rare in cases when the arity of a function changed)
-
-If neither `.cmj` nor `.cmi` gets changed, the scheduler would stop
-propagation.
-
-Suppose the `.cmj` file is still changed (P = 0.05), A's dependency B would get
-recompiled. Note `B.cmi` only depends on `A.cmi`, so it will not get compiled,
-only `B.cmj` will get recompiled, its chances that `B.cmj` gets changed will be
-even lower. In practice, the probabiity of the length of propagation chain is
-more than two is less than
-
-```
-0.05 * 0.05 = 0.0025
-```
-
-This means when we are in an edit-build cycle, whenever A gets changed, it may
-have many direct dependencies, but the longest rebuild sequence will get
-settled in at most two compilation units. Suppose the scheduler schedule the
-tasks in parallel, the longest sequence is bound by two, which means the
-rebuild cycle is very close to compiling two compilation units.
-
-In implementation, we also generalized the idea of stopping propogation of .cmi
-changes, so whenever we are adding some comments in the interface file, it will
-get settled quickly.
-
-The worst case is that the root of an interface changed. In such case, it does
-not mean all its dependencies will get recompiled, it depends on how many
-dependencies' interface depend on the root's interface. The cool thing is that
-since interface's dependency chain is completely decoupled from
-implementation's dependency, actually it used to be a subset of
-implementation's dependency chain, so only a subset of its dependencies will
-get compiled. We will see a concrete an example later.
-
-
-## A fast scheduler
-
-As we said, the time spent in an edit-build cycle is mostly composed of two
-parts: compiling invoking the compiler, scheduling.
-
-We are reusing the very fast scheduler provided by
-[Ninja](https://ninja-build.org/manual.html)
-
-> Where other build systems are high-level languages, Ninja aims to be an
-> assembler.
-
-BuckleScript outputs assembler style instructions consumed by Ninja which does
-scheduling very fast and provides good parallelism. By integrating with Ninja's
-`restat` attribute, we are able to implement the idea of a specialized content
-based build system.
-
-It is fast enough for 99% of use cases. For a project less than 1k files, the
-time spent in an edit-build cycle is dominated by the compiler, but as project
-grows to 10K files or even more, the time spent in compiler is stable and
-bounded due to our incremental design, however, the time will start be
-dominated by the scheduler.
-
-For a nop build around 10k files, it takes around 700ms for Ninja to figure out
-nothing needs to be rebuilt.
-
-The current Ninja model is simple, every time it is invoked, it will re-read
-build.ninja instructions, check stats of artifacts and do the scheduling.
-
-Instead of making a long-lived compiler, we propose to have a long-lived
-scheduler. The complexity of a scheduler is significantly lower than a
-compiler. Having an in-memory scheduler will help reducing redundant work such
-as parsing build.ninja instructions which is around of size 2M for 10k files.
-With the integration of watch mode, it does not need stat all artifacts each
-time, this should help increase the scalability of scheduler to 100K files or
-even more.
-
-## Tests on a synthetic benchmark
-
-Our synthetic bench is borrowed from
-[OMake](http://blog.camlcity.org/blog/omake1.html) and public available
-[here](https://github.com/bucklescript/bsb-bench).
-
->The benchmark has these characteristics: The task is to build n^2 libraries
->with n^2 modules each (for a given small number n), and the dependencies
->between the modules are created in a way so that we can stress both the
->dependency analyzer of the build utility and the ability to run commands in
->parallel.
-
-We modified the benchmark to add interface file for each implementation file.
-
-The benchmark is running on MacBook Pro 18 with CPU 2.6 GHz Intel Core i7,
-Memory 32 GB 2400 MHz DDR4
-
-The test is running against `n = 3,5,7,9`, where the source code size would be
-`2*3^4=162`, `2*5^4=1250`, `2*7^4=4802`, `2*9**4=13122`.
-
-Below is what we get for a cold build from scratch:
-
-| Source size | Clean build (ms) |
-|-------------|------------------|
-| 0162 | 684 |
-| 1250 | 5,100 |
-| 4802 | 24,112 |
-| 13122 | 125,248 |
-
-| Source size | Nop build (ms) | Touching root module (m_1_1_1_1.ml) | Touching (m_1_1_1.mli)|
-|-------------|------------------|-------------------------------------|-----------------------|
-| 0162 | 16 | 59 | 54 |
-| 1250 | 79 | 120 | 133 |
-| 4802 | 266 | 369 | 367 |
-| 13122 | 728 | 963 | 962 |
-
-We can see from the table as size grows, the time spent in edit-build cycle shifts from compilation to the scheduler, this is due to the fact that Ninja scheduler does not save the work for each test.
-
-
-| Source size | Adding value to root module (m_1_1_1_1.ml) | Changing root interface|
-|-------------|--------------------------------------------|------------------------|
-| 0162 | 56 | 70 |
-| 1250 | 131 | 155 |
-| 4802 | 370 | 428 |
-| 13122 | 969 | 991 |
-
-The verbose build log for adding values on source of size `13122` is as below:
-
-```sh
-test9>ninja -C lib/bs -v
-ninja: Entering directory `lib/bs'
-[1/2] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -w -30-40+6+7+27+32..39+44+45+101 -nostdlib -I '/Users/hongbozhang/git/bsb-bench/test9/node_modules/bs-platform/lib/ocaml' -color always -c -o src/dir_1_1/m_1_1_1_1.mlast -bs-syntax-only -bs-binary-ast /Users/hongbozhang/git/bsb-bench/test9/src/dir_1_1/m_1_1_1_1.ml
-[2/2] /usr/local/lib/node_modules/bs-platform/lib/bsb_helper.exe -g 0 -MD src/dir_1_1/m_1_1_1_1.mlast
-[1/5905] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I src/dir_4_6 -I src/dir_4_1 -I src/dir_4_8 -I src/dir_6_5 -I src/dir_6_2 -I src/dir_8_3 -I src/dir_8_4 -I src/dir_2_3 -I src/dir_2_4 -I src/dir_6_3 -I src/dir_4_9 -I src/dir_6_4 -I src/dir_4_7 -I src/dir_2_5 -I src/dir_2_2 -I src/dir_8_5 -I src/dir_8_2 -I src/dir_9_9 -I src/dir_3_7 -I src/dir_1_3 -I src/dir_9_7 -I src/dir_3_9 -I src/dir_1_4 -I src/dir_7_6 -I src/dir_7_1 -I src/dir_5_5 -I src/dir_7_8 -I src/dir_5_2 -I src/dir_3_8 -I src/dir_9_6 -I src/dir_1_5 -I src/dir_9_1 -I src/dir_1_2 -I src/dir_3_6 -I src/dir_9_8 -I src/dir_3_1 -I src/dir_5_3 -I src/dir_5_4 -I src/dir_7_9 -I src/dir_7_7 -I src/dir_8_7 -I src/dir_2_9 -I src/dir_8_9 -I src/dir_2_7 -I src/dir_4_2 -I src/dir_6_8 -I src/dir_4_5 -I src/dir_6_1 -I src/dir_6_6 -I src/dir_2_1 -I src/dir_2_6 -I src/dir_8_8 -I src/dir_8_1 -I src/dir_2_8 -I src/dir_8_6 -I src/dir_6_7 -I src/dir_6_9 -I src/dir_4_4 -I src/dir_4_3 -I src/dir_7_2 -I src/dir_7_5 -I src/dir_5_8 -I src/dir_5_1 -I src/dir_5_6 -I src/dir_1_9 -I src/dir_3_4 -I src/dir_3_3 -I src/dir_9_4 -I src/dir_1_7 -I src/dir_9_3 -I src/dir_5_7 -I src/dir_7_4 -I src/dir_5_9 -I src/dir_7_3 -I src/dir_9_2 -I src/dir_1_1 -I src/dir_9_5 -I src/dir_1_6 -I src/dir_3_2 -I src/dir_1_8 -I src/dir_3_5 -w -30-40+6+7+27+32..39+44+45+101 -nostdlib -I '/Users/hongbozhang/git/bsb-bench/test9/node_modules/bs-platform/lib/ocaml' -color always -o src/dir_1_1/m_1_1_1_1.cmj -c src/dir_1_1/m_1_1_1_1.mlast
-File "/Users/hongbozhang/git/bsb-bench/test9/src/dir_1_1/m_1_1_1_1.ml", line 4, characters 4-5:
-Warning 32: unused value a.
-```
-
-Ignoring the preprocess stage, We can see there are 5906 jobs scheduled but
-only one job is processed. This is because adding a single value does not
-change `m_1_1_1_1.cmj` so that the change of propogation is stopped
-immediately.
-
-The result is surprisingly good even if change the interface of root files, by
-looking at the verbose build log:
-
-```sh
-test9>ninja -C lib/bs -v
-ninja: Entering directory `lib/bs'
-[1/2] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -w -30-40+6+7+27+32..39+44+45+101 -nostdlib -I '/Users/hongbozhang/git/bsb-bench/test9/node_modules/bs-platform/lib/ocaml' -color always -c -o src/dir_1_1/m_1_1_1_1.mliast -bs-syntax-only -bs-binary-ast /Users/hongbozhang/git/bsb-bench/test9/src/dir_1_1/m_1_1_1_1.mli
-[2/2] /usr/local/lib/node_modules/bs-platform/lib/bsb_helper.exe -g 0 -MD src/dir_1_1/m_1_1_1_1.mliast
-[1/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-no-builtin-ppx-mli -bs-no-implicit-include -I src/dir_4_6 -I src/dir_4_1 -I src/dir_4_8 -I src/dir_6_5 -I src/dir_6_2 -I src/dir_8_3 -I src/dir_8_4 -I src/dir_2_3 -I src/dir_2_4 -I src/dir_6_3 -I src/dir_4_9 -I src/dir_6_4 -I src/dir_4_7 -I src/dir_2_5 -I src/dir_2_2 -I src/dir_8_5 -I src/dir_8_2 -I src/dir_9_9 -I src/dir_3_7 -I src/dir_1_3 -I src/dir_9_7 -I src/dir_3_9 -I src/dir_1_4 -I src/dir_7_6 -I src/dir_7_1 -I src/dir_5_5 -I src/dir_7_8 -I src/dir_5_2 -I src/dir_3_8 -I src/dir_9_6 -I src/dir_1_5 -I src/dir_9_1 -I src/dir_1_2 -I src/dir_3_6 -I src/dir_9_8 -I src/dir_3_1 -I src/dir_5_3 -I src/dir_5_4 -I src/dir_7_9 -I src/dir_7_7 -I src/dir_8_7 -I src/dir_2_9 -I src/dir_8_9 -I src/dir_2_7 -I src/dir_4_2 -I src/dir_6_8 -I src/dir_4_5 -I src/dir_6_1 -I src/dir_6_6 -I src/dir_2_1 -I src/dir_2_6 -I src/dir_8_8 -I src/dir_8_1 -I src/dir_2_8 -I src/dir_8_6 -I src/dir_6_7 -I src/dir_6_9 -I src/dir_4_4 -I src/dir_4_3 -I src/dir_7_2 -I src/dir_7_5 -I src/dir_5_8 -I src/dir_5_1 -I src/dir_5_6 -I src/dir_1_9 -I src/dir_3_4 -I src/dir_3_3 -I src/dir_9_4 -I src/dir_1_7 -I src/dir_9_3 -I src/dir_5_7 -I src/dir_7_4 -I src/dir_5_9 -I src/dir_7_3 -I src/dir_9_2 -I src/dir_1_1 -I src/dir_9_5 -I src/dir_1_6 -I src/dir_3_2 -I src/dir_1_8 -I src/dir_3_5 -w -30-40+6+7+27+32..39+44+45+101 -nostdlib -I '/Users/hongbozhang/git/bsb-bench/test9/node_modules/bs-platform/lib/ocaml' -color always -o src/dir_1_1/m_1_1_1_1.cmi -c src/dir_1_1/m_1_1_1_1.mliast
-[2/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_1_1.cmj -c src/dir_1_1/m_1_1_1_1.mlast
-[3/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -w -30-40+6+7+27+32..39+44+45+101 -nostdlib -I '/Users/hongbozhang/git/bsb-bench/test9/node_modules/bs-platform/lib/ocaml' -color always -o src/dir_1_1/m_1_1_2_2.cmj -c src/dir_1_1/m_1_1_2_2.mlast
-[4/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_1.cmj -c src/dir_1_1/m_1_1_2_1.mlast
-[5/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_3.cmj -c src/dir_1_1/m_1_1_2_3.mlast
-[6/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_9.cmj -c src/dir_1_1/m_1_1_2_9.mlast
-[7/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_4.cmj -c src/dir_1_1/m_1_1_2_4.mlast
-[8/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_5.cmj -c src/dir_1_1/m_1_1_2_5.mlast
-[9/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_6.cmj -c src/dir_1_1/m_1_1_2_6.mlast
-[10/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_7.cmj -c src/dir_1_1/m_1_1_2_7.mlast
-[11/5906] /usr/local/lib/node_modules/bs-platform/lib/bsc.exe -bs-package-name test -bs-package-output commonjs:lib/js/src/dir_1_1 -bs-assume-has-mli -bs-no-builtin-ppx-ml -bs-no-implicit-include -I ... -color always -o src/dir_1_1/m_1_1_2_8.cmj -c src/dir_1_1/m_1_1_2_8.mlast
-```
-
-The log means that there are 5906 jobs to be scheduled but only 11 jobs
-processed. This is because there only 9 direct dependencies, the cmj/cmi
-changes' propogation stops in the first level of dependency, indirect
-dependencies are not propagated any more since the intermediate representation
-stays stable after that. There are 9 more jobs to do compared with changing
-implementation but the latency only increased by 30ms, which means the
-scheduler does a good job in parallelism.
-
-The real world scenario may be a bit worse than our synthetic benchmark, since
-our syntethic benchmark only impose dependencies across implementation files,
-the dependencies across interface files are flat.
-
-To conclude, currently BuckleScript scales very well to projects with around
-10k files, and with some work in improving the scheduler, we believe it is not
-too difficult to scale it to 100K files or even more. To reach such enormous
-scalability in a reliable way, we propose to have a long-lived scheduler and
-fast cold compiler. The language interface design and the design of the data
-structure for the implementation will make the longest rebuild propogation
-chain bounded by two in most cases.
diff --git a/_blogposts/archive/2019-03-01-feature-preview-variadic.mdx b/_blogposts/archive/2019-03-01-feature-preview-variadic.mdx
deleted file mode 100644
index 1d983763a..000000000
--- a/_blogposts/archive/2019-03-01-feature-preview-variadic.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-author: hongbo
-date: "2019-03-01"
-previewImg:
-badge: preview
-title: First-class bs.variadic Support in the Next Release
-description: |
----
-
-## An improved `bs.variadic` decorator
-
-In previous releases, when a `bs.variadic` external (previously called
-`bs.splice` prior to version `4.08`) is present, its tail arguments needed to
-be applied statically. In other words, the `external` marked with
-`bs.variadic`, when used, requires a _literal_ array:
-
-```reason
-[@bs.module "path"][@bs.variadic]
-external join: array(string) => string = "join"
-
-let _ = join([|"a", "b"|]) /* this is ok */
-let f = b => join(b) /* compiler error when you try to abstract `join` */
-```
-
-More importantly, such compilation error was leaky in cases such as this one:
-
-```reason
-let f = join
-```
-
-In the next release, we are going to lift such restriction. You'll be able to
-call an external marked with `bs.variadic` with an array reference, not just a
-literal array.
-
-Caveat: it's unclear how to support such first class `bs.variadic` call in
-conjunction with `bs.new`, so an external declaration that contains both will
-trigger a compilation error. We'll try to figure out this particular case in
-the future too.
diff --git a/_blogposts/archive/2019-03-21-bucklescript-release-5-0.mdx b/_blogposts/archive/2019-03-21-bucklescript-release-5-0.mdx
deleted file mode 100644
index 29b7e4e77..000000000
--- a/_blogposts/archive/2019-03-21-bucklescript-release-5-0.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
----
-author: hongbo
-date: "2019-03-21"
-previewImg:
-badge: release
-title: Announcing BuckleScript 5.0
-description: |
----
-
-## New Changes
-
-`bs-platform@5.0.0` is released! There are quite a few bug fixes in this
-release and refmt is synced up, a detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#500).
-
-
-Several new features are introduced in this release:
-
-- first class `bs.variadic` support, documented
- [here](/blog/feature-preview-variadic)
-
-- we prebuilt binaries for Windows, MacOS and Linux, this will help reduce your
- CI build time significantly. For exotic OSes, it will fall back to build from
- source
-
-- bs.deriving light config. For people who prefer short names, we make it
- configurable
-
-```
-[@bs.deriving { abstract: light }]
-type t = {x: int};
-
-let f = (obj: t) => obj->x;
-```
-
-This is the last major release which is targeting OCaml 4.02.3, in the future
-we will make major releases targeting OCaml 4.06.
-
-Happy Hacking!
diff --git a/_blogposts/archive/2019-03-31-bucklescript-release-6-0.mdx b/_blogposts/archive/2019-03-31-bucklescript-release-6-0.mdx
deleted file mode 100644
index 1f1aa7785..000000000
--- a/_blogposts/archive/2019-03-31-bucklescript-release-6-0.mdx
+++ /dev/null
@@ -1,24 +0,0 @@
----
-author: hongbo
-date: "2019-03-31"
-previewImg:
-badge: testing
-title: Announcing BuckleScript 6.0.0-dev.1
-description: |
----
-
-## New Test Release
-
-`bs-platform@6.0.0-dev.1` is released, you can try it with `npm i -g
-bs-platform@next`! (if you have permission issues, try `sudo npm i
---unsafe-perm -g bs-platform@next`)
-
-This is the first release that bucklescript compiler using OCaml 4.06.1
-typechecker.
-
-It also means that most language features from OCaml will trickle down
-automatically.
-
-It is not yet ready for production but we recommend you to try it (esp, new
-OCaml features between 4.02.3 and 4.06.1), note we expect users to have some
-issues in experiment, feedback is welcome!
diff --git a/_blogposts/archive/2019-04-09-bucklescript-release-5-0-1.mdx b/_blogposts/archive/2019-04-09-bucklescript-release-5-0-1.mdx
deleted file mode 100644
index 15ede0d1f..000000000
--- a/_blogposts/archive/2019-04-09-bucklescript-release-5-0-1.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-author: hongbo
-date: "2019-04-09"
-previewImg:
-badge: testing
-title: Announcing BuckleScript 5.0.1
-description: |
----
-
-## Newest Changes
-
-`bs-platform@5.0.1` preview is available, try `npm i -g bs-platform@beta-4.02`!
-A detailed a list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#501)
-
-Some notable new features in this release:
-
-### React JSX v3
-
-The new v3 JSX ppx is now available which means zero-cost for react-bindings
-(@rickyvetter will talk about it in a separate post).
-
-### New [@bs.inline] decorator for library authors
-
-Our compilers have a pretty good inlining heuristics by default, in this
-release, we allow some user input for some fine-tuned inlining behavior. Read
-this (https://github.com/BuckleScript/bucklescript/issues/3472) for more use
-cases.
-
-A typical usage is as below
-
-```reason
-module Platform = {
- [@bs.inline] let ios = "ios";
-};
-```
-
-If user wants to write an interface, it has to carry the payload though:
-
-```reason
-module Platform: {
- [@bs.inline "ios"]
- let ios: string;
-} = {
- [@bs.inline]
- let ios = "ios";
-};
-```
-
-It is a bit verbose for library authors, but this should be transparent to
-library users.
-
-
-
-We are also actively working on a new offical release targeted to OCaml 4.06
-for the forthcoming [reason-conf](https://www.reason-conf.com/), below is
- proposed release schedule:
-
-We are going to support OCaml 4.06 and 4.02 at the same time for a while.
-
-The corresponding versions for `bs-platform` would be 5.(targeting 4.02 OCaml)
-and 6. (targeting 4.06).
-
-`5.*` is recommended for production usage, bug fix is prioritized (tagged as
-`beta-4.02` for pre-rleases)
-
-`6.*` is expected to have some issues but encouraged to experiment until we
-make an official announcement it is great for production. (tagged as
-`beta-4.06` for pre-releases)
diff --git a/_blogposts/archive/2019-04-22-bucklescript-release-5-0-4.mdx b/_blogposts/archive/2019-04-22-bucklescript-release-5-0-4.mdx
deleted file mode 100644
index 610e2e038..000000000
--- a/_blogposts/archive/2019-04-22-bucklescript-release-5-0-4.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-author: hongbo
-date: "2019-04-22"
-previewImg:
-title: Architectural Changes in BuckleScript 5.0.4 and 6.0.1
-badge: release
-description: |
----
-
-## Upcoming Changes
-
-We are going to make releases of bs-platform@5.0.4 and bs-platform@6.0.1, this
-release mostly contains bug fixes.
-
-At the same time, we are introducing an internal change which should be fine
-for average users.
-
-If you are tooling authors, here are some details: previously we ship react_jsx
-ppx as a stand-alone binary, for example, reactjs_jsx_ppx_v2.exe,
-reactjs_jsx_ppx_v2.exe. Recently we start more close integration with
-[reason](https://reasonml.github.io), so it is absorbed into bsc.exe itself, we
-introduced a flag to have react-jsx on/off (note these are internal flags, not
-expected to be exposed to average users):
-
-```
-bsc.exe -bs-jsx 2 # turn on reactjs_jsx_ppx_v2
-bsc.exe -bs-jsx 3 # turn on reactjs_jsx_ppx_v3
-```
-
-Like before, we also ship a stand alone bsppx.exe, it now absorbs
-reactjs_jsx_ppx as well.
-
-
-```
-bsppx.exe -bs-jsx 2 # turn on reactjs_jsx_ppx_v2
-bsppx.exe -bs-jsx 3 # turn on reactjs_jsx_ppx_v3
-```
-
-The benefit of this change is that it help reduced the prebuilt binary size
-significantly and it also help shave 5~10ms per file compilation.
-
-Another minor change we added, is that we introduced an env variable
-`BS_VSCODE` to help error messages more adapted to VsCode, see
-[here](https://bucklescript.github.io/docs/en/build-configuration#bs-vscode-error-output-adapted-for-vscode)
-for more details.
diff --git a/_blogposts/archive/2019-05-21-ffi-overview.mdx b/_blogposts/archive/2019-05-21-ffi-overview.mdx
deleted file mode 100644
index 6f6e6e377..000000000
--- a/_blogposts/archive/2019-05-21-ffi-overview.mdx
+++ /dev/null
@@ -1,192 +0,0 @@
----
-author: hongbo
-date: "2019-05-21"
-previewImg:
-title: A High Level Overview of BuckleScript Interop with JS
-description: |
----
-
-## JS Interop in BuckleScript
-
-When users start to use BuckleScript to develop applications targeting JS, they
-have to interop with various APIs provided by the JS platform.
-
-In theory, like [Elm](https://elm-lang.org/), BuckleScript could ship a
-comprehensive library which contains what most people would like to use daily.
-This, however, is particularly challenging, given that JS is running on so many
-platforms for example, [Electron](https://electronjs.org/),
-[Node](https://nodejs.org/) and the Browser, yet each platform is still
-evolving quickly. So we have to provide a mechanism to allow users to bind to
-the native JS API quickly in userland.
-
-There are lots of trade-off when designing such a FFI bridge between OCaml and
-the JavaScript API. Below, we list a few key items which we think have an
-important impact on our design.
-
-## Interop design constraints
-
-### BuckleScript is still OCaml / Reason
-
-We are not inventing a new language. In particular, we can not change the
-concrete syntax of OCaml. Luckily, OCaml introduced
-[attributes](https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec260) and
-[extension nodes](https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec262)
-since 4.02, which allows us to customize the language to a minor extent. To be
-a good citizen in the OCaml community, all attributes introduced by
-BuckleScript are prefixed with `bs`.
-
-### Bare metal efficiency should always be possible for experts in pure OCaml
-
-Efficiency is at the heart of BuckleScript's design philosophy, in terms of
-both compilation speed and runtime performance. While there were other strongly
-typed functional languages running on the JS platform before we made
-BuckleScript, one thing in particular that confused us was that in those
-languages, people have to write `native JS` to gain performance. Our goal is
-that when performance really matters, it is still possible for experts to write
-pure OCaml without digging into `native JS`, so users don't have to make a
-choice between performance and type safety.
-
-## Easy interop using raw JS
-
-BuckleScript allows users to insert raw JS using extension nodes directly.
-Please refer to the
-[documentation](https://bucklescript.github.io/docs/en/embed-raw-javascript)
-for details. Here we only talk about one of the most used styles: inserting raw
- JS code as a function.
-
-```reason
-let getSafe: (array(int), int) => int = [%raw
- (a, b) => {|
- if (b>=0 && b < a.length) {
- return a [b]
- }
- throw new Error("out of range")
- |}
-];
-
-let v = [|1, 2, 3|]->getSafe(-1);
-```
-
-Here the raw extension node asks the user to list the parameters and function
-statement in raw JS syntax. The generated JS code is as follows:
-
-```js
-function getSafe (a,b){
- if (b>=0 && b < a.length) {
- return a [b]
- }
- throw new Error("out of range")
- };
-
-var v = getSafe(/* array */[
- 1,
- 2,
- 3
- ], -1);
-```
-
-Inserting raw JS code as a function has several advantages:
-
-- It is relatively safe; there is no variable name polluting.
-- It is quite expressive since the user can express everything inside the function body.
-- The compiler still has some knowledge about the function, for example, its arity.
-
-Some advice about using this style:
-- Always annotate the raw function with explicit type annotation.
-- When annotating raw JS, you can use polymorphic types, but don’t create them when you don’t really need them. In general, non polymoprhic type is safer and more efficient.
-- Write a unit test for the function.
-
-Note that a nice thing about this mechanism is that no separate JS file is
-needed, so no change to the build system is necessary in most cases. By using
-this mechanism, BuckleScript users can already deal with most bindings.
-
-## Interop via attributes
-
-If you are a developer busy shipping, the mechanism above should cover almost
-everything you need. A minor disadvange of that mechanism is that it comes with
-a cost: a raw function can not be inlined since it is JavaScript, so the
-BuckleScript compiler does not have a deep knowledge about the function.
-
-To demonstrate interop via attributes, we are going to show a small example of
-binding to JS `date`. There are lots of advanced topics in the
-[documentation](https://bucklescript.github.io/docs/en/interop-overview); here
-we are only talking about one of the most-used methods for interop.
-
-The key idea is to bind your JS object as [an abstract data
-type](https://en.wikipedia.org/wiki/Abstract_data_type) where a data type is
-defined by its behavior from the point of view of a user of the data, instead
-of the data type’s concrete representations.
-
-```reason
-type date;
-
-[@bs.new]
-external fromFloat : float => date = "Date" ;
-[@bs.send]
-external getDate : date => float = "getDate" ;
-[@bs.send]
-external setDate : date => float => unit = "setDate";
-
-let date = fromFloat (10000.0);
-date->setDate (3.0);
-let d = date -> getDate;
-```
-
-The preceding code generates the following JS. As you can see, the binding
-itself is zero cost and serves as formal documentation.
-
-```js
-var date = new Date(10000);
-date.setDate(3);
-var d = date.getDate();
-```
-
-A typical workflow is that we create an abstract data type, create bindings for
-a “maker” using `bs.new`, and bind methods using `bs.send`.
-
-Thanks to native support of abstract data types in OCaml, the interop is easy
-to reason about.
-
-Some advice when using this style:
-- Again, you can use polymorphic types in your annotations, but don't create
- polymorphic types when you don't need them.
-- Write a unit test for each external.
-
-As a comparison, we can create the same binding using `raw`:
-
-```reason
-type date;
-let fromFloat: float => date = [%raw d => {|return new Date(d)|}];
-let getDate: date => float = [%raw d => {|return d.getDate()|}];
-let setDate: (date, float) => unit = [%raw
- (d, v) => {|
- d.setDate(v);
- return 0; // ocaml representation of unit
-|}
-];
-
-let date = fromFloat(10000.);
-date->setDate( 3.);
-let d = date->getDate;
-```
-
-The generated JS is as follows, and you can see the cost:
-
-```js
-function fromFloat (d){return new Date(d)};
-
-function getDate (d){return d.getDate()};
-
-function setDate (d,v){
- d.setDate(v);
- return 0; // ocaml representation of unit
-};
-
-var date = fromFloat(10000);
-
-setDate(date, 3);
-
-var d = getDate(date);
-```
-
-
diff --git a/_blogposts/archive/2019-06-26-bucklescript-release-5-0-5.mdx b/_blogposts/archive/2019-06-26-bucklescript-release-5-0-5.mdx
deleted file mode 100644
index 8bb0d8b0c..000000000
--- a/_blogposts/archive/2019-06-26-bucklescript-release-5-0-5.mdx
+++ /dev/null
@@ -1,85 +0,0 @@
----
-author: hongbo
-date: "2019-06-26"
-previewImg:
-badge: release
-title: Announcing BuckleScript 5.0.5 and 6.0.2
-description: |
----
-
-`bs-platform` 5.0.5 (for OCaml 4.02.3) and 6.0.2 (for OCaml 4.06.1) is
-released.
-
-A detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#505)
-
-It has some critical bug fixes that we suggest users to upgrade.
-
-Some feature enhancement is described as below:
-
-## User land C stubs polyfill
-
-Previously, for existing OCaml libraries which rely on some C primitives, it
-has to be patched in source level. In this release, user can provide such
-support independently without patching the source code.
-
-Suppose you have a Reason module which relies on an C primitive as below:
-
-```reason
-external ff : (int,int) => int = "caml_fancy_add" ;
-```
-
-`caml_fancy_add` is a C function for native code, now we can provide this
-support in a js files, what user needs to do is adding `caml_fancy_add` to a
-global variable like this
-
-```js
-/**
- * @param {int} x
- * @param {int} y
- * @returns {int}
- *
- */
-require('bs-platform/lib/js/caml_external_polyfill.js').register('caml_fancy_add',function(x,y){
- return + ((""+x ) + (""+y))
-})
-```
-
-Note this is an experimental feature that we don't suggest users to use it
-extensively, it is provided as an escape hatch. We are also expecting feedback
-to see how we could improve it, so there might be some backward incompatible
-changes.
-
-## A new warning number 105
-
-Previously, there are some scenarios that the Js function name is inferred
-during the interop.
-
-For example
-```ocaml
-external f : int -> int = "" [@@bs.val]
-```
-```reason
-[@bs.val] external f : int => int = ""
-```
-Here the JS function name is inferred as `f` which is the same as OCaml
-function name.
-
-Such ffi declaration is fragile to refactoring when changing names of f, it
-will also change the name of js function name which is probably not what user
-expected.
-
-105 warning number is to help warn against this case (turned on by default).
-
-## Simplified debugger mode
-
-Previously, user has to add `-bs-g` flag to `bsc-flags` in `bsconfig.json` and
-add one line code to the main module. Such code change is no longer needed,
-only the flag is needed.
-
-## Build performance improvement
-
-We improved the build performance and simplified the design of the build
-significantly in this release, we will have a separate post about it.
-
-Happy hacking!
diff --git a/_blogposts/archive/2019-08-12-bucklescript-release-5-1-0.mdx b/_blogposts/archive/2019-08-12-bucklescript-release-5-1-0.mdx
deleted file mode 100644
index 432d093b5..000000000
--- a/_blogposts/archive/2019-08-12-bucklescript-release-5-1-0.mdx
+++ /dev/null
@@ -1,139 +0,0 @@
----
-author: hongbo
-date: "2019-08-12"
-previewImg:
-badge: release
-title: Announcing BuckleScript 5.1.0
-description: |
----
-
-## New Release
-
-`bs-platform` 5.1.0 (for OCaml 4.02.3) and 6.1.0 (for OCaml 4.06.1) is ready
-for testing.
-
-You can install it via `npm i -g bs-platform@5.1.0` (or `npm i -g
-bs-platform@6.1.0-dev.6`).
-
-A detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#510)
-
-
-Some feature enhancements are described as follows:
-
-## Introducing `bsc` to public
-
-`bsc` is the underlying compiler which is invoked by `bsb`. In this release we
-simplified it a bit so that it can be used directly by customers for simple
-tasks. It is available after you have `bs-platform` installed.
-
-Suppose you have a file called `test.re`:
-
-```reason
-let rec fib = n =>
- switch (n) {
- | 0
- | 1 => 1
- | n => fib(n - 1) + fib(n - 2)
- };
-Js.log(fib(0));
-```
-
-You can compile it directly via `bsc test.re`, producing the following output:
-
-```js
-bucklescript.github.io>bsc test.re
-// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
-'use strict';
-function fib(n) {
- if (n === 0 || n === 1) {
- return 1;
- } else {
- return fib(n - 1 | 0) + fib(n - 2 | 0) | 0;
- }
-}
-console.log(fib(0));
-exports.fib = fib;
-/* Not a pure module */
-```
-
-You can also get the inferred signature directly via `bsc -i test.re`
-
-```reason
-let fib: int => int;
-```
-
-Or even better, you can do a one liner in bsc, via `-e` option.
-
-```
-bucklescript>bsc -i -e 'let id = x => x'
-let id: 'a => 'a;
-```
-
-> **Note:** `bsc` supports vanilla OCaml syntax as well, this is only recommended for
-> toying around, for serious development, `bsb` is recommended.
-
-## `bstracing` to visualize build profile
-
-After you finish the build process, you can run `bstracing` directly. This
-generates a data file called `tracing_${hour}_${minute}_${second}.json ` which
-can be loaded into chrome via `chrome://tracing`.
-
-Below is a profile image that shows the tracing graph for a large project:
-
-
-
-And you can zoom-in to see more details:
-
-
-
-
-## Support of ppx with arguments
-
-We extended the schema to support ppx with arguments:
-
-```json
-{
- "ppx-specs": {
- "type": "array",
- "items": {
- "oneOf" : [
- {
- "type": "string" // single command
- },
- {
- "type" : "array", // command with args
- "items": {
- "type" : "string"
- }
- }
- ]
- }
- }
-}
-```
-
-## Respect `NODE_PATH` when resolving dependent modules
-
-Previously, `bsb` was tied to npm package structures by searching
-`node_modules`. In this release, `bsb` also tries to search paths listed in
-`NODE_PATH` so that `bsb` is no longer tied to the npm or yarn package manager.
-
-## Build performance improvement
-
-Yes, performance is increased with each release!
-
-Quite a lot of work was spent in house-keeping this release. We changed the
-internal data representation to a more compact format. Here is the result of
-using `bstracing` to show a comparison of clean building a large project around
-(2 * 5 * 5 * 5 * 5 = 1250 files):
-
-Version 5.0.6 (around 4.8s)
-
-
-
-Version 5.1.0 (around 4.2s)
-
-
-
-Happy hacking!
diff --git a/_blogposts/archive/2019-09-23-bucklescript-release-5-2-0.mdx b/_blogposts/archive/2019-09-23-bucklescript-release-5-2-0.mdx
deleted file mode 100644
index 8c2355fd6..000000000
--- a/_blogposts/archive/2019-09-23-bucklescript-release-5-2-0.mdx
+++ /dev/null
@@ -1,91 +0,0 @@
----
-author: hongbo
-date: "2019-09-23"
-previewImg:
-badge: release
-title: Announcing BuckleScript 5.2.0 / 6.2.0
-description: |
----
-
-## New Release
-
-`bs-platform` 5.2.0/6.2.0 is released, it contains several major enhancement
-that we would like to share with you.
-
-You can install it via `npm i -g bs-platform@5.2.0`
-
-## Local module compiled into object
-
-OCaml has an [advanced module
-system](https://people.mpi-sws.org/~dreyer/thesis/old/thesis050405.pdf) for
-people to structure large scale applications, it supports first class module
-and higher-order module system which is unique compared to other ML-like
-languages such as F# and Haskell.
-
-In previous versions, BuckleScript compiled local modules into a JS array
-whereby global modules (module produced by a file)were transformed into JS
-objects.
-
-When a local module is compiled into a JS array, the field name is stripped
-away, which makes debugging and JS interop difficult. To make the debugging
-experience better, we instrumented the array with field names in debug mode,
-this mitigated the debugging issue, but still present challenges for JS
-interop.
-
-In this release, the compiler generates uniform representation for global
-module and local module -- idiomatic JS object, this makes OCaml's module
-system more valuable to JS target.
-
-Below is an image showing the diff in this release
-
-
-
-As you can see, the `id` module changed from an array into an JS object.
-
-## Pattern match code generation with annotations
-
-BuckleScript aims to generate readable code.
-
-OCaml has a sophiscated pattern match compiler, it generates well optimized
-code, however, for complex pattern matching, the constructor name is lost on
-native backend, this is also one of the very few case where we generate magic
-number in JS backend, this makes debugging particularly challenging for large
-complex pattern match.
-
-In this release, we made such information available to JS backend so that we
-annotate the generated JS code with its names.
-
-Below is an image showing the diff in this release
-
-
-
-In the future, we will explore if we can produce such annotation in the runtime without losing efficiency.
-
-## Code generation improvement in various places
-
-We care about the generated code quality, and will always keep improving it
-regardless how good it is.
-
-In this release, we improved the code generation in quite a lot of places
-including lazy evaluation, if branches and pattern match.
-
-In particular, we added a data-flow pass to eliminate non-necessary staticfail
-case.
-
-
-
-## Important bug fixes
-
-This release also comes with a couple of important bug fixes, in particular,
-#3805 the stale build issue and #3823 the interaction with reason langauge
-service.
-
-## Upcoming breaking changes
-
-In next release, we plan to [remove deprecated
-getters](https://reasonml.chat/t/ann-remove-deprecated-getters-in-deriving-abstract-after-5-2-0/1908).
-
-A detailed list of changes is available
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#520)
-
-Happy hacking!
diff --git a/_blogposts/archive/2019-10-16-another-encoding.mdx b/_blogposts/archive/2019-10-16-another-encoding.mdx
deleted file mode 100644
index 900069c13..000000000
--- a/_blogposts/archive/2019-10-16-another-encoding.mdx
+++ /dev/null
@@ -1,194 +0,0 @@
----
-author: hongbo
-date: "2019-10-16"
-previewImg:
-title: Another way of encoding type identity for BuckleScript libraries without using big functor
-description: |
----
-
-Note this article is for library authors, it has something in depth which is
-not necessary for people who use BuckleScript at daily work.
-
-When we build some generic data structure, abstract over function is not
-enough. For example, a type safe generic balanced AVL tree not only relies on
-the types of a comparison function, but also the identity of such function. Two
-balanced AVL trees which are initialized over same type of comparison function
-still can not be mixed.
-
-```reason
-module Eq1 = {
- let eq = (x, y) => x == y;
-};
-
-module Eq2 = {
- let eq = (x, y) => x == y;
-};
-```
-
-Take the two modules above for example, they have the same type, but we need a
-way to mark their identity so that data structures instantiated using them can
-not be mixed.
-
-A traditional way is using functor:
-
-```reason
-module Make = (
- Cmp: {
- type t;
- let eq: (t, t) => bool;
- }) : {
- type key = Cmp.t;
- type coll;
- let empty: coll;
- let add: (coll, key) => coll;
-} => {
- open Cmp;
- type key = t;
- type coll = list(key);
- let empty = [];
- let add = (y: coll, e: key) =>
- if (List.exists(x => eq(x, e), y)) {
- y;
- } else {
- [e, ...y];
- };
-};
-
-module Ins1 = Make({
- type t = int;
- let eq = (x, y) => x == y;
-});
-
-module Ins2 = Make({
- type t = int;
- let eq = (x, y) => x * x == y * y;
-});
-```
-
-By marking `coll` as abstract type, when such functor is
-initialized,`Ins1.coll` and `Ins2.coll` are no longer the same.
-
-```reason
-let v = [Ins1.empty, Ins2.empty];
-```
-
-When mixing them together, we get a type error
-
-```
-File ..., line 31, characters 21-31:
-Error: This expression has type Ins2.coll
- but an expression was expected of type Ins1.coll
-```
-
-There are some issues with such encoding:
-
-- From runtime point of view, `Ins1` is initialized during runtime, its
- implementation is a *big closure*, which means even if you only use on
- function in `Ins1` module, all functions will be linked in.
-
-- From user point of view, people has to call `Ins1.add` and `Ins2.add` instead
- of calling `Ins.add`, this makes code less polymorphic.
-
-Now we introduce another encoding, note it is quite sophiscated that is
-recommended only for library authors
-
-```reason
-module Cmp: {
- type cmp('a, 'id);
- let eq: (cmp('a, 'id), 'a, 'a) => bool;
- module Make: (
- M: {
- type t;
- let eq: (t, t) => bool;
- }
- ) => {
- type identity;
- let eq: cmp(M.t, identity);
- };
-} = {
- type cmp('a, 'id) = ('a, 'a) => bool;
- module Make = (
- M: {
- type t;
- let eq: (t, t) => bool;
- }
- ) => {
- type identity;
- include M;
- };
- let eq = (cmp, x, y) => cmp(x, y); /* This could be inlined by using externals */
-};
-
-open Cmp;
-
-module Coll: {
- type coll('k, 'id);
- let empty: cmp('k, 'id) => coll('k, 'id);
- let add: (coll('k, 'id), 'k) => coll('k, 'id);
-} = {
- type coll('k, 'id) = {
- eq: cmp('k, 'id),
- data: list('k),
- };
-
- let empty = (type t, type identity, eq: cmp(t, identity)) => {
- data: [],
- eq,
- };
- let add = (x: coll('k, 'id), y: 'k) =>
- if (List.exists(a => Cmp.eq(x.eq, a, y), x.data)) {
- x;
- } else {
- {
- data: [y, ...x.data],
- eq: x.eq,
- };
- };
-};
-```
-
-The key is the construction of Cmp modules, we create an abstract type `cmp`
-which is signed by a phantom type as its identity, it is unique whenever user
-create it by calling `Make` functor. Here we are still using functor, but it is
-small functor.
-
-The usage is as below:
-
-```reason
-module S0 = Make({
- type t = int;
- let eq = (x, y) => x == y;
-});
-
-module S1 = Make({
- type t = int;
- let eq = (x, y) => x * x == y * y;
-});
-
-let v0 = Coll.empty(S0.eq);
-let v1 = Coll.empty(S1.eq);
-
-let a0 = Coll.add(v0, 1);
-let a1 = Coll.add(v1, 1);
-```
-
-In practice, we can make use of first class modules to get rid of functors from
-end users, which is saved for readers.
-
-When we mix `a0` and `a1`, we will get a type error
-
-```
-File ..., line 71, characters 13-15:
-Error: This expression has type (int, S1.identity) Coll.coll
- but an expression was expected of type (int, S0.identity) Coll.coll
- Type S1.identity is not compatible with type S0.identity
-```
-
-As you read here, by using such encoding, the data structure is more
-generalized from user point of view. The generated JS code is not in a big
-closure so that it can be dead code eliminated better.
-
-This style is extensively used in Belt encoding, we encourage you to have a
-look at its implementation for better ideas.
-
-
diff --git a/_blogposts/archive/2019-11-18-whats-new-in-7-pt1.mdx b/_blogposts/archive/2019-11-18-whats-new-in-7-pt1.mdx
deleted file mode 100644
index b13ad7b60..000000000
--- a/_blogposts/archive/2019-11-18-whats-new-in-7-pt1.mdx
+++ /dev/null
@@ -1,67 +0,0 @@
----
-author: hongbo
-date: "2019-11-18"
-previewImg:
-badge: testing
-title: What's new in BuckleScript v7 (Part 1)
-description: |
----
-
-## New major dev release available
-
-The new major version of BuckleScript is coming
--[7.0.0-dev.1](https://github.com/BuckleScript/bucklescript/pull/3968) is now
-released for testing!
-
-We are maintaining `5.*` and `6.*` for OCaml `4.02` and `4.06` for a while,
-since this release we are moving forward and focusing on release 7.* (for OCaml
-4.06).
-
-This is a major release comes with lots of nice features listed
-[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md).
-
-We talk about some highlights here
-
-- refmt upgraded to latest, it comes with better error message
-
-- OCaml Records compiled into JS objects
-
-This is one of the most desired features, it is finally landed.
-
-See the generated code below for excitement!
-
-```reason
-type t = {
- x: int,
- y: int,
- z: int,
-};
-
-let obj = {x: 3, y: 2, z: 2};
-
-let obj2 = {...obj, y: 4};
-```
-
-```js
-var obj2 = {
- x: 3,
- y: 4,
- z: 2
-};
-
-var obj = {
- x: 3,
- y: 2,
- z: 2
-};
-```
-
-This new change makes record much more useful and its interaction with
-`private` type; unboxed option type will make interop with JS much nicer!
-
-As always, we continue improving our optimizer in various
-[commits](https://github.com/BuckleScript/bucklescript/pull/3966/files?file-filters%5B%5D=.js),
-we belive that not only a better language but also an implementation of high
-quality is key to push typed functional programming into industry.
-
-Happy hacking!
diff --git a/_blogposts/archive/2019-11-28-whats-new-in-7-pt2.mdx b/_blogposts/archive/2019-11-28-whats-new-in-7-pt2.mdx
deleted file mode 100644
index b4e8dae10..000000000
--- a/_blogposts/archive/2019-11-28-whats-new-in-7-pt2.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
----
-author: hongbo
-date: "2019-11-28"
-previewImg:
-badge: testing
-title: What's new in BuckleScript v7 (Part 2)
-description: |
----
-
-## New `dev` Release
-
-The second dev release
-[7.0.0-dev.2](https://github.com/BuckleScript/bucklescript/pull/3995) is
-released for testing!
-
-As we mentioned in the [previous
-post](https://bucklescript.github.io/blog/2019/11/18/whats-new-in-7), we
-compile records into js objects in this release. This makes the generated code
-more idiomatic, however, this is not enough to write idiomatic bindings to
-manipulate arbitrary js objects, since the key of js objects can be arbitrary
-which is not expressible in ReasonML syntax, so we support user level
-customization now, which makes idiomatic bindings really easy.
-
-```reason
-type entry = {
- [@bs.as "EXACT_MAPPING_TO_JS_LABEL"]
- x: int,
- [@bs.as "EXACT_2"]
- y: int,
- z: obj,
-}
-and obj = {
- [@bs.as "hello"]
- hi: int,
-};
-
-let f4 = ({x, y, z: {hi}}) => (x + y + hi) * 2;
-```
-
-```js
-function f4(param) {
- return (((param.EXACT_MAPPING_TO_JS_LABEL + param.EXACT_2 | 0) + param.z.hello | 0) << 1);
-}
-```
-
-As you can see, you can manipulate js objects using Reason pattern match syntax, the generated
-code is highly efficient, more importantly, bindings to JS will be significantly simplifie.
-
-Happy Hacking.
diff --git a/_blogposts/archive/2019-12-20-bucklescript-release-7-0-2.mdx b/_blogposts/archive/2019-12-20-bucklescript-release-7-0-2.mdx
deleted file mode 100644
index a5e280e15..000000000
--- a/_blogposts/archive/2019-12-20-bucklescript-release-7-0-2.mdx
+++ /dev/null
@@ -1,176 +0,0 @@
----
-author: hongbo
-date: "2019-12-20"
-previewImg:
-badge: release
-title: Announcing BuckleScript 7.0.2-dev.1
-description: |
----
-
-## Happy Holiday Release!
-
-[bs-platform@7.0.2-dev.1](https://github.com/BuckleScript/bucklescript/pull/4062)
-is released for testing!
-
-Try it via
-
-```
-npm i -g bs-platform@7.0.2-dev.1
-```
-
-This release contains several bug fixes for
-[refmt](https://github.com/facebook/reason)(updated from 3.5.1 to 3.5.4). We
-also spent quite some time improving the compiler performance. For example, we
-optimized our specialized hash based data structures, which means that we can
-expect a 5% better build time performance. We would like to collect more
-benchmark data, so we are happy for any feedback / benchmarks from our
-community!
-
-A highlighting feature is that we added Generalized Unboxed Support (so called
-[@unboxed] annotations). Here's a short definition from the official OCaml
-Manual:
-
-
-> unboxed can be used on a type definition if the type is a single-field record
-> or a concrete type with a single constructor that has a single argument. It
-> tells the compiler to optimize the representation of the type by removing the
-> block that represents the record or the constructor (i.e. a value of this type
-> is physically equal to its argument). In the case of GADTs, an additional
-> restriction applies: the argument must not be an existential variable,
-> represented by an existential type variable, or an abstract type constructor
-> applied to an existential type variable.
-
-
-**Note**: The beforementioned restriction about GADTs only applies to OCaml's
-native compiler, not to BuckleScript's JavaScript compilation. So we will get
-the maximum value with less confusing error messages!
-
-The exciting thing about this feature is that we will now have more ways of
-expressing our programs in our typical type safe records and variants without
-sacrificing on runtime performance ("zero cost interop").
-
-The best way to understand this feature is by looking at the following
-examples:
-
-**Unboxed variants:**
-
-```reason
-[@unboxed]
-type t = A(int);
-let x = A(3);
-```
-
-will translate to following JS:
-
-```js
-var x = 3;
-```
-
-As you can see, we are "unboxing" the `int` value from the internal variant
-representation, so the variant will get completely invisible to the runtime.
-Great for e.g. mapping to stringly typed JavaScript enums!
-
-**Unboxed Records (1 field only)**
-
-```reason
-[@unboxed]
-type t2 = {f: string};
-let x = {f: "foo"};
-```
-
-will translate to following JS:
-
-```js
-var x = "foo";
-```
-
-The same principle as with variants. Now a lot of people will probably ask:
-"Why would I ever want a 1 field record?". There are multiple reasons, one of
-them would be a `ref` type, which is just a syntax sugar for a `{ contents:
-'a}` record.
-
-Another use case is for expressing high rank polymorphism without cost:
-
-```reason
-[@unboxed]
-type r = {f: 'a. 'a => 'a};
-let map_pair = (r, (p1, p2)) => (r.f(p1), r.f(p2));
-```
-
-**Note:** `'a. 'a => 'a` describes a polymorphic function interface, where `'a`
-can be called with many different types (e.g. `f(1)` and `f("hi")`). The
-compiler will not try to lock `'a` for the first type it sees (e.g. the `int`)
-on the first call site. The parameter `'a` is therefore polymorphic!
-
-By `unboxing` those records with one polymorphic function, we will get rid of
-[value restriction for our existing encoding of uncurried
-function](https://github.com/BuckleScript/bucklescript/issues/4058), this will
-be a major feature!
-
-**Unboxed GADTs:**
-
-Since GADTs are lesser known in Reason syntax, we also added some OCaml snippet
-to get a better idea of how the example data structure is defined.
-
-```reason
-[@unboxed]
-type t =
- | Any ('a) : t;
-
-let array = [|Any(3), Any("a")|];
-```
-```ocaml
-(* OCaml *)
-type t =
- | Any : 'a -> t
-[@@unboxed]
-
-let array = [|Any 3; Any "a"|]
-```
-
-The examples above will translate to following JS:
-
-```js
-var array = [ 3, "a"];
-```
-
-As you can already tell, this feature will give us way better possibilities to
-do interop with polymorphic array representations in JavaScript (without losing
- any type safetiness!).
-
-As a more concrete use-case, this will give users the possibility to define
-types such as `int_or_string`.
-
-**Note:** Even if this GADT `t` contains an ADT `Any`, it doesn't mean that
-it's the same as `any` in TypeScript. An `Any` value is constrained to a
-certain contract (`'a -> t`), the array `[|Any(3), Any("a")|]` is inferred as a
-`array(t)`. When users try to use `Any` values, they need to unpack them,
-process the value inside, and repack them again. Pretty neat, right?
-
-### Conclusion
-
-This release will introduce the `[@unbox]` annotation to give us better ways to
-do zero cost interop with variants, records, higher kinded polymorphic
-functions, and GADTs. Under the hood improvements will give us better
-performance as well!
-
-We are really excited about these changes, and we hope so are you. Please check
-out our newest `bs-platform@7.0.2-dev.1` release and let us know if you find
-any issues!
-
-A detailed list of changes is available here:
-https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#702
-
-Happy hacking!
-
-### Appendix
-
-**A sophiscated explanation on why `unboxed` lifts some OCaml's type system
-limitations**
-
-> structural types (objects, classes, polymorphic variants, functions, etc) in
-> OCaml are regular types, ocaml always do the expansion when dealing with such
-> types, there is some limitations for such structural types, for example, non
-> regular definitions are not allowed. Non structural types (variants, records)
-> does not have such limitations, with `unboxed`, we can use non structural
-> types as an indirection without changing its runtime representations.
diff --git a/_blogposts/archive/2020-02-04-bucklescript-release-7-1-0.mdx b/_blogposts/archive/2020-02-04-bucklescript-release-7-1-0.mdx
deleted file mode 100644
index eb34a129c..000000000
--- a/_blogposts/archive/2020-02-04-bucklescript-release-7-1-0.mdx
+++ /dev/null
@@ -1,116 +0,0 @@
----
-author: hongbo
-date: "2020-02-04"
-previewImg:
-tags:
- - Release
-title: Announcing BuckleScript 7.1.0
-description: |
----
-
-## About this Release
-
-`bs-platform@7.1.0` is a major release. You can try it with `npm i -g
-bs-platform`! (If you have permission issues, try `sudo npm i --unsafe-perm -g
-bs-platform`)
-
-It was called 7.0.2 but bumped into 7.1.0 due to a soundness fix (a breaking
-change) as follows:
-
-Previously, the empty array `[||]` was polymorphic. This happens to be true,
-since in native an array is not resizable, so users cannot do anything with it.
-But in JS, we introduced a binding for `push` which can change the size of an
-array dynamically. In this case, an empty array cannot be polymorphic any more.
-
-Removing `push` is possible, but it makes arrays in JS context less useful. To
-fix this issue while keeping `push`, we make `[||]` weakly typed so that its
-type inference is deferred until the first time it is used. If it is never used
-across the module, it has to be annotated with a concrete type; otherwise, the
-type checker will complain.
-
-Several highlighted features are listed as follows:
-
-## Raw JavaScript Parsing/Checking
-
-BuckleScript allows users to embed raw JavaScript code as an escape hatch; it
-used to treat such piece of code as a black box.
-
-In this release we vendor a JavaScript parser (thanks to
-[flowtype](https://github.com/facebook/flow)) for syntax checking and simple
-semantics analysis over `raw`. This is on-going work, but it is already useful
-now.
-
-First, we now report syntax errors properly for `raw`.
-
-Second, for simple semantics analysis, we can tell whether the code inside raw
-is a function or not and the arity of raw function:
-
-```ocaml
-let f = [%raw "function(x){return x}"]
-```
-```reason
-let f = [%raw "function(x){return x}"];
-```
-
-Now we know `f` is a function declaration with no side effect; it can be
-removed by the dead code analyzer if not used. We also know its arity so that
-when it's called we know whether it's fully applied or not.
-
-Because this sort of information can be derived from `raw` directly, the
-special `raw` form we introduced as follows is no longer needed:
-
-```ocaml
-let f = fun%raw x -> {|x|}
-```
-
-```reason
-let f = [%raw x => {|x|}];
-```
-
-To reduce interop API surface, this feature will now be discouraged.
-
-We're also exploring using such knowledge on JS literals and regexes checking.
-
-## Unboxed Types
-
-One major feature introduced in this release is **unboxed types** which is
-blogged [here](https://bucklescript.github.io/blog/2019/12/20/release-7-02).
-
-## Uniform Warning System
-
-Previously warnings are reported in two ways:
-- The OCaml compiler style: `-w +10`
-- Ad-hoc warnings introduced by flags `-bs-warn-unimplemented-external`
-
-
-In this release, we make such integration so that BuckleScript warnings are
-handled in the same way as OCaml's own warnings, for example, the warning
-attribute below can also turn off BuckleScript warnings now.
-
-```reason
-[@warning "-101"]; // file-level config
-```
-
-Based on this effort, we have changed all BuckleScript warnings into OCaml
-style warnings to reduce user-level complexity.
-
-The newly introduced warnings are listed via `bsc -warn-help`:
-
-```
-101 BuckleScript warning: Unused bs attributes
-102 BuckleScript warning: polymorphic comparison introduced (maybe unsafe)
-103 BuckleScript warning: about fragile FFI definitions
-104 BuckleScript warning: bs.deriving warning with customized message
-105 BuckleScript warning: the external name is inferred from val name is unsafe from refactoring when changing value name
-106 BuckleScript warning: Unimplemented primitive used:
-107 BuckleScript warning: Integer literal exceeds the range of representable integers of type int
-108 BuckleScript warning: Uninterpreted delimiters (for unicode)
-```
-
-We also recommend users to turn on `warnerror` and only disable warnings for
-some specific files.
-
-We've also upgraded the Reason parser `refmt` to 3.6.0.
-
-A full list of changes is available here:
-https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#702
diff --git a/_blogposts/archive/2020-02-07-union-types-in-bucklescript.mdx b/_blogposts/archive/2020-02-07-union-types-in-bucklescript.mdx
deleted file mode 100644
index defdf25df..000000000
--- a/_blogposts/archive/2020-02-07-union-types-in-bucklescript.mdx
+++ /dev/null
@@ -1,188 +0,0 @@
----
-author: hongbo
-date: "2020-02-07"
-previewImg:
-title: Union types in BuckleScript
-description: |
- In our our 7.1.0 release we introduced the new [@unboxed] feature for better
- zero-cost interop with GADTs, Variants and single field records. Let's find
- out how this will help us expressing Union types with seamless interop!
----
-
-## Introduction to Union Types
-
-[Union
-types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#union-types)
-describe a value that can be one of several types. In JS, it is common to use
-the vertical bar (|) to separate each type, so `number | string | boolean` is
-the type of a value that can be a number, a string, or a boolean.
-
-
-Following [the last
-post](https://bucklescript.github.io/blog/2019/12/20/release-7-02) since the
-introduction of unboxed attributes in `7.1.0`, we can create such types as
-follows:
-
-```ocaml
-type t =
- | Any : 'a -> t
-[@@unboxed]
-let a (v : a) = Any v
-let b (v : b) = Any v
-let c (v : c) = Any v
-```
-```reason
-[@unboxed]
-type t =
- | Any('a): t;
-let a = (v: a) => Any(v);
-let b = (v: b) => Any(v);
-let c = (v: c) => Any(v);
-```
-> **Note:** due to the `unboxed` attribute, `Any a` shares the same runtime
-> representation as `a`; however, we need to make sure that user can only
-> construct values of type `a`, `b` , or `c` into type `t`. By making use of the
-> module system, we can achieve this:
-
-```ocaml
-module A_b_c : sig
- type t
- val a : a -> t
- val b : b -> t
- val c : c -> t
-end= struct
-type t =
- | Any : 'a -> t
-[@@unboxed]
-let a (v : a) = Any v
-let b (v : b) = Any v
-let c (v : c) = Any v
-end
-```
-
-```reason
-module A_b_c: {
- type t;
- let a: a => t;
- let b: b => t;
- let c: c => t;
-} = {
- [@unboxed]
- type t =
- | Any('a): t;
- let a = (v: a) => Any(v);
- let b = (v: b) => Any(v);
- let c = (v: c) => Any(v);
-};
-```
-
-What happens when we need to know specifically whether we have a value of type `a`? This is a case by case issue; it depends on whether there are some intersections in the runtime encoding of `a`, `b` or `c`. For some primitive types, it is easy enough to use `Js.typeof` to tell the difference between, e.g, `number` and `string`.
-
-Like [type guards in typescript](https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types), we have to trust the user knowledge to differentiate between union types. However, such user level knowledge is isolated in a single module so that we can reason about its correctness locally.
-
-Let's have a simple example, `number_or_string` first:
-
-```ocaml
-module Number_or_string : sig
- type t
- type case =
- | Number of float
- | String of string
- val number : float -> t
- val string : string -> t
- val classify : t -> case
-end = struct
- type t =
- | Any : 'a -> t
- [@@unboxed]
- type case =
- | Number of float
- | String of string
- let number (v : float) = Any v
- let string (v : string) = Any v
- let classify (Any v : t) : case =
- if Js.typeof v = "number" then Number (Obj.magic v : float)
- else String (Obj.magic v : string)
-end
-```
-```reason
-module Number_or_string: {
- type t;
- type case =
- | Number(float)
- | String(string);
- let number: float => t;
- let string: string => t;
- let classify: t => case;
-} = {
- [@unboxed]
- type t =
- | Any('a): t;
- type case =
- | Number(float)
- | String(string);
- let number = (v: float) => Any(v);
- let string = (v: string) => Any(v);
- let classify = (Any(v): t): case =>
- if (Js.typeof(v) == "number") {
- Number(Obj.magic(v): float);
- } else {
- String(Obj.magic(v): string);
- };
-};
-```
-Note that here we use `Obj.magic` to do an unsafe type cast which relies on `Js.typeof`. In practice, people may use `instanceof`; the following is an imaginary example:
-
-```ocaml
-module A_or_b : sig
- type t
- val a : a -> t
- val b : b -> t
- type case =
- | A of a
- | B of b
- val classify : t -> case
-end = struct
- type t =
- | Any : 'a -> t
- [@@unboxed]
- type case =
- | A of a
- | B of b
- let a (v : a) = Any v
- let b = (v : b) = Any v
- let classify ( Any v : t) =
- if [%raw{|function (a) { return a instanceof globalThis.A}|}] v then A (Obj.magic v : a)
- else B (Obj.magic b)
-end
-```
-```reason
-module A_or_b: {
- type t;
- let a: a => t;
- let b: b => t;
- type case =
- | A(a)
- | B(b);
- let classify: t => case;
-} = {
- [@unboxed]
- type t =
- | Any('a): t;
- type case =
- | A(a)
- | B(b);
- let a = (v: a) => Any(v);
- let b = (v: b) => Any(v);
- let classify = (Any (v): t) =>
- if ([%raw {|function (a) { return a instanceof globalThis.A}|}](v)) {
- A(Obj.magic(v): a);
- } else {
- B(Obj.magic(b));
- };
-};
-```
-Here we suppose `a` is of JS class type `A`, and we use `instanceof` to test it. Note we use some `unsafe` code locally, but as long as such code is carefully reviewed, it has a safe boundary at the module level.
-
-
-To conclude: thanks to `unboxed` attributes and the module language, we introduce a systematic way to convert values from `union types` (untagged union types) to `algebraic data types` (tagged union types). This sort of conversion relies on user level knowledge and has to be reviewed carefully. For some cases where `classify` is not needed, it can be done in a completely type safe way.
diff --git a/_blogposts/archive/2020-02-20-loading-stdlib-in-memory.mdx b/_blogposts/archive/2020-02-20-loading-stdlib-in-memory.mdx
deleted file mode 100644
index 458380c02..000000000
--- a/_blogposts/archive/2020-02-20-loading-stdlib-in-memory.mdx
+++ /dev/null
@@ -1,130 +0,0 @@
----
-author: hongbo
-date: "2020-02-20"
-previewImg:
-title: Improving the Stdlib Loading mechanism
-description: |
- We want to give you some insights on how we will improve the way BuckleScript
- compiles and handles its stdlib modules.
----
-
-## Loading stdlib from memory
-
-
-
-In the next release, we are going to load stdlib from memory instead of from
-external files, which will make the BuckleScript toolchain more accessible and
-performant.
-
-You can try it via `npm i bs-platform@7.2.0-dev.4`
-
-## How does it work
-
-When the compiler compiles a module `test.ml`, the module `Test` will import
-some modules from stdlib. This is inevitable since even basic operators in
-BuckleScript, for example `(+)`, are defined in the Pervasives module, which is
-part of the stdlib.
-
-Traditionally, the compiler will consult `Pervasives.cmi`, which is a binary
-artifact describing the interface of the Pervasives module and
-`Pervasives.cmj`, which is a binary artifact describing the implementation of
-the Pervasives module. `Pervasives.cm[ij]` and other modules in stdlib are
-shipped together with the compiler.
-
-
-**This traditional mode has some consequences:**
-
-- The compiler is not stand-alone and relocatable. Even if we have the compiler
-prebuilt for different platforms, we still have to compile stdlib
-post-installation. `postinstall` is supported by npm, but it has
-[various](https://github.com/BuckleScript/bucklescript/issues/3213)
-[issues](https://github.com/BuckleScript/bucklescript/issues/2799)
-[against](https://github.com/BuckleScript/bucklescript/issues/3254) yarn.
-
-- It's hard to split the compiler from the generated stdlib JS artifacts. When
-a BuckleScript user deploys apps depending on BuckleScript, in theory, the app
-only needs to deploy those generated JS artifacts; the native binary is not
-needed in production. However, the artifacts are still loaded since they are
-bundled together. Allowing easy delivery of compiled code is one of the
-community’s most desired [feature
-requests](https://github.com/BuckleScript/bucklescript/issues/2772).
-
-
-In this release, we solve the problem by embedding the binary artifacts into
-the compiler directly and loading it on demand.
-
-To make this possible, we try to make the binary data platform agnostic and as
-compact as possible to avoid size bloating. The entrance of loading cmi/cmj has
-to be adapted to this new way.
-
-So whenever the compiler tries to load a module from stdlib, it will consult a
-lazy data structure in the compiler itself instead of consulting an external
-file system.
-
-## What are the benefits?
-
-
-
-### More accessiblity.
-
-Package installation now becomes downloading for prebuilt platforms. In the
-future, we can make it installable from a system package manager as well. The
-subtle interaction with [yarn
-reinstall](https://github.com/BuckleScript/bucklescript/issues/2799) is also
-solved once and for all.
-
-
-
-### Easy separation between compiler and JS artifacts
-
-The compiler is just one relocatable file. This makes the separation between
-the compiler and generated JS artifacts easier. The remaining work is mostly to
-design a convention between compiler and stdlib version schemes.
-
-### Better compilation performance
-
-A large set of files is not loaded from the file system but rather from memory
-now!
-
-### Fast installation and reinstallation.
-
-Depending on your network speed, the installation is reduced from 15
-seconds to 3 seconds. Reinstallation is almost a no-op now.
-
-
-
-
-
-### JS playground is easier to build
-
-We translate the compiler into JS so that
-developers can play with it in the browser. To make this happen, we used to
-fake the IO system; this not needed any more since no IO happens when compiling
-a single file to a string.
-
-## Some internal changes
-
-To make this happen, the layout of binaries has been changed to the following
-structure. It is **not recommended** that users depend on the layout, but [it
-happens](https://github.com/BuckleScript/bucklescript/pull/4170#issuecomment-586959464).
-Here is the new layout:
-
-```
-|-- bsb // node wrapper of bsb.exe
-|-- bsc // node wrapper of bsc.exe
-|
-|-- win32
-| |-- bsb.exe
-| |-- bsc.exe
-|
-|---darwin
-| |-- bsb.exe
-| |-- bsc.exe
-|
-|---linux
-| |-- bsb.exe
-| |-- bsc.exe
-
-```
-
-
diff --git a/_blogposts/archive/2020-03-12-bucklescript-release-7-2.mdx b/_blogposts/archive/2020-03-12-bucklescript-release-7-2.mdx
deleted file mode 100644
index c5a3c4f4f..000000000
--- a/_blogposts/archive/2020-03-12-bucklescript-release-7-2.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
----
-author: hongbo
-date: "2020-03-12"
-previewImg:
-tags:
- - Release
-title: Announcing BuckleScript 7.2
-description: |
- This release will give us some small quality of life improvements for tool
- builders, better performance, and a new let %private modifier for hiding
- module functionality.
----
-
-## About the Release
-
-Today we are proud to release `bs-platform 7.2`!
-
-For those unfamiliar with bs-platform, it is the platform for compiling
-[ReasonML](https://reasonml.github.io/) and [OCaml](https://ocaml.org/) to fast
-and readable JavaScript.
-
-You can try it with `npm i bs-platform`!
-
-## Features
-
-### In memory loading stdlib
-
-Since this release, the binary artifacts generated by the stdlib are loaded
-from memory instead of an external file systems, which means much faster
-compilation and installation.
-
-Previously we recommended installing `bs-platform` globally to save on
-installation time.
-
-However, with this release the installation is so fast that we recommend
-installing it locally instead - per project - instead, as there's no additional
-cost, and it provides better isolation.
-
-You can use it with a nice tool called
-[npx](https://www.npmjs.com/package/npx), for example, `npx bsb`.
-
-The installation is also compatible with `--ignore-scripts` for major platforms
-(see [Richard Feldman's talk](https://youtu.be/okrB3aJtUaw?t=921) on the
-security implications), and is more stable with
-[yarn](https://github.com/yarnpkg/yarn)
-
-More technical details can be found in this
-[post](https://bucklescript.github.io/blog/2020/02/20/loading-stdlib-in-memory).
-
-### let %private
-
-In OCaml's module system, everything is public by default, the only way to hide some values is by providing a separate signature to list public fields and their types:
-
-```reason
-module A : { let b : int} = {
- let a = 3 ;
- let b = 4 ;
-}
-
-```
-`let` `%private` gives you an option to mark private fields directly
-
-```reason
-module A = {
- let%private a = 3;
- let b = 4;
-}
-```
-
-`let%private` also applies to file level modules, so in some cases, user does not need to provide a separate interface file just to hide some particular values.
-
-Note interface files are still recommended as a general best practice since they give you better separate compilation units and also they're better for documentation. Still, `let%private` is useful in the following scenarios:
-
-- Code generators. Some code generators want to hide some values but it is sometimes very hard or time consuming for code generators to synthesize the types for public fields.
-
-- Quick prototyping. During prototyping, we still want to hide some values, but the interface file is not stable yet, `let%private` provide you such convenience.
-
-
-### Int64 performance optimization
-
-We received feedback from some users that various Int64 operations became bottlenecks in their code performance, in particular `Int64.to_string`.
-
-We responded to this, and after some hard work - but _without_ changing the underlying representation - our `Int64.to_string` is even faster than `bigint` for common inputs.
-
-A micro-benchmark for comparison:
-```
-running on 7.1
-Int64.to_string: 367.788ms # super positive number
-Int64.to_string: 140.451ms # median number
-Int64.to_string: 375.471ms # super negative number
-
-bigint
-Int64.to_string: 25.151ms
-Int64.to_string: 12.278ms
-Int64.to_string: 21.011ms
-
-latest
-Int64.to_string: 43.228ms
-Int64.to_string: 5.764ms
-Int64.to_string: 43.270ms
-```
-
-We also apply such optimizations to other Int64 operations.
-
-Note that Int64 is implemented in OCaml itself without any raw JavaScript. This is case compelling hints that our optimizing compiler not only provides expressivity and type-safe guarantees, but also empowers users to write maintainable, *efficient* code.
-
-## File level compilation flags
-
-In this release, we also provide a handy flag to allow users to override some configurations at the file level.
-
-```reason
-[@bs.config {flags: [|"-w", "a", "-bs-no-bin-annot"|]}]; // toplevel attributes
-```
-
-A full list of changes is available here: https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#72
diff --git a/_blogposts/archive/2020-03-26-generalize-uncurry.mdx b/_blogposts/archive/2020-03-26-generalize-uncurry.mdx
deleted file mode 100644
index ff35f0321..000000000
--- a/_blogposts/archive/2020-03-26-generalize-uncurry.mdx
+++ /dev/null
@@ -1,139 +0,0 @@
----
-author: hongbo
-date: "2020-03-26"
-previewImg:
-title: Generalized Uncurry Support in 7.3
-description: |
----
-
-## Introduction
-
-[ReasonML](https://github.com/facebook/reason) is a
-[curried](https://en.wikipedia.org/wiki/Currying) language, while Js is an
-uncurried language. When compiling ReasonML into Js, there's lots of headache
-due to the semantics mismatch.
-
-After several years of research and development, we will finally reach a new
-milestone in our next release: adding a lightweight uncurried calling
-convention to ReasonML.
-
-## Why we need native uncurried calling convention
-
-**The curried call is inherently slower than the uncurried call.**
-
-A native implementation of curried call like [purescript](https://www.purescript.org/) does will generate very slow code:
-
-```js
-let curriedFunction = x => y => z => x + y +z ;
-let curriedApply = curriedFunction(1)(2)(3); // memory allocation triggered
-```
-
-BuckleScript does tons of optimizations and very aggressive arity inference so that the curried function is compiled into a multiple-arity function, and when the application is supplied with the exact arguments -- which is true in most cases, it is applied like normal functions.
-
-However, such optimization does not apply to high order functions:
-
-```reason
-let highOrder = (f,a,b)=> f (a, b)
-// can not infer the arity of `f` since we know
-// nothing about the arity of `f`, unless
-// we do the whole program optimization
-```
-
-In cases where arity inference does not help, the arity guessing has to be delayed into the runtime.
-
-**Bindings to JS world:**
-
-When we create bindings for high order functions in the JS world, we would like to have native uncurried functions which behave the same as JS world -- no semantics mismatch.
-
-
-## Generalized uncurried calling convention in this release
-
-Before release 7.3, we had introduced uncurried calling convention, however, it has serious limitations -- uncurried functions can not be polymorphic, it does not support labels, the error
-message leaks the underlying encoding -- now all those limitations are gone!
-
-**Previously:**
-
-
-
-
-
-
-
-The error messages above are cryptic and hard to understand. And the limitation of not supporting recursive functions make uncurried support pretty weak.
-
-Now those limitations are all gone, you can have polymorphic uncurried recursive functions and it support labels.
-
-
-
-
-
-The error message is also enhanced significantly
-
-### When the uncurried function is used in curried
-
-```reason
-let add = (. x, y ) => x + y;
-
-let u = add (1, 2)
-```
-
-The old error message:
-
-```
-Error: This expression has type (. int, int) => int
- This is not a function; it cannot be applied.
-```
-
-The new error message
-
-```
-Error: This function has uncurried type, it needs to be applied in ucurried style
-```
-
-### When the curried function is used in the uncurried context
-
-```reason
-let add = ( x, y ) => x + y;
-
-let u = add (.1, 2)
-```
-
-The old error message:
-
-```
-Error: This expression has type (int, int) => int
- but an expression was expected of type (. 'a, 'b) => 'c
-```
-
-The new error message:
-
-```
-Error: This function is a curried function where an uncurried function is expected
-```
-
-### When arity mismatch
-
-```reason
-let add = (. x, y ) => x + y;
-
-let u = add (.1, 2,3)
-```
-
-The old message:
-
-```
-Error: This expression has type (. int, int) => int
- but an expression was expected of type (. 'a, 'b, 'c) => 'd
- These two variant types have no intersection
-```
-
-The new message:
-```
-Error: This function has arity2 but was expected arity3
-```
-
-Note the generalized uncurry support also applies to objects, so that you can use `obj##meth (~label1=a,~label2=b)`.
-
-The only thing where the uncurried call is not supported is optional arguments, if users are mostly targeting JS runtime, we suggest you can try uncurry by default and would like to hear your feedback!
-
-You can already test it today by `npm install bs-platform@7.3.0-dev.1` (Windows support will be coming soon).
diff --git a/_blogposts/archive/2020-04-13-bucklescript-release-7-3.mdx b/_blogposts/archive/2020-04-13-bucklescript-release-7-3.mdx
deleted file mode 100644
index 7be10a2aa..000000000
--- a/_blogposts/archive/2020-04-13-bucklescript-release-7-3.mdx
+++ /dev/null
@@ -1,226 +0,0 @@
----
-author: hongbo
-date: "2020-04-13"
-badge: release
-title: Announcing BuckleScript 7.3
-description: |
- Featuring major improvements like Generalized Uncurry Convention Support and
- unit value to undefined compilation.
----
-
-## Overview
-
-We are happy to announce that `bs-platform@7.3` is available for testing, you
-can try it with `npm install bs-platform@7.3.1`.
-
-For those unfamiliar with bs-platform, it is the platform for compiling
-[ReasonML](https://reasonml.github.io/) and [OCaml](https://ocaml.org/) to fast
-and readable JavaScript.
-
-
-This is a major release with some highlighted features as below:
-
-## Generalized uncurry calling convention support
-
-You can use an uncurried function as conveniently as a curried one now, this is
-an exciting change that we wrote a [separate
-post](https://bucklescript.github.io/blog/2020/03/26/generalize-uncurry) for
-details.
-
-
-For uncurried support, we also fixed a long standing
-[issue](https://github.com/BuckleScript/bucklescript/issues/4274) so that type
-inference follows naturally using the new encoding.
-
-```reason
-bar
- -> Belt.Array.mapU((.b)=>b.foo /*no type annotation needed */)
-```
-
-## The `unit` value now compiles to `undefined`
-
-In ReasonML, when a function does not return any meaningful value, it returns a
-value that is `()` of type `unit`. In native backend, the dummy value `()` is
-compiled into a const zero. We used to inherit this in JS backend as well.
-However, this is a semantics mismatch since in JS, if the function does not
-return anything, it defaults to `undefined`. In this release, we make it more
-consistent with JS: compiling `()` into `undefined`. Since in JS, `return
-undefined` can be ignored in tail position, this leads to some other nice
-enhancement.
-
-
-```reason
-let log = x => Js.log(x)
-```
-
-The generated code used to be
-
-```js
-function log(x){
- console.log(x);
- return /* () */ 0;
-}
-```
-
-It's now
-
-```js
-function log(x){
- console.log(x)
-}
-```
-
-## Various improvements in code generation
-
-We have increased the readability of the generated code in several common
-places, we believe that we reached *an important milestone* that if you write
-code using features that have counterparts in JS, the generated code is
-readable. This is not a small achievement given that quite a lot of the
-compiler code base is shared between native backend and JS backend.
-
-There are some features that are not available in JS, for example, complex
-pattern matches, the readability of those pieces of generated code will
-continue being improved.
-
-Take several enhancement below as examples:
-
-### Meaningful pattern match variable names
-
-```reason
-let popUndefined = s =>
- switch (s.root) {
- | None => Js.undefined
- | Some(x) =>
- s.root = x.tail;
- Js.Undefined.return(x.head);
- };
-```
-
-```diff
-function popUndefined(s) {
-- var match = s.root;
-- if (match !== null) {
-- s.root = match.tail;
-- return match.head;
-+ var x = s.root;
-+ if (x !== undefined) {
-+ s.root = x.tail;
-+ return x.head;
- }
-
- }
-```
-
-When pattern match against a compounded expression, the compiler used to use a
-temporary name `match`, now we employ better heuristics to generate meaningful
-names for such temporary variables.
-
-### Eliminate intermediate variable names when inlining
-
-```diff
- function everyU(arr, b) {
- var len = arr.length;
-- var arr$1 = arr;
- var _i = 0;
-- var b$1 = b;
-- var len$1 = len;
- while(true) {
- var i = _i;
-- if (i === len$1) {
-+ if (i === len) {
- return true;
-- } else if (b$1(arr$1[i])) {
-- _i = i + 1 | 0;
-- continue ;
-- } else {
-+ }
-+ if (!b(arr[i])) {
- return false;
- }
-+ _i = i + 1 | 0;
-+ continue ;
- };
- }
-```
-
-The above diff is the generated code for `Belt.Array.everyU`, the intermediate
-variables were introduced when inlining an auxiliary function, such duplication
-were removed in this release.
-
-### Flatten if/else branch making use of JS's `early return` idiom
-
-Take the same diff from above, you will notice that the second `else` following
-`if(..) continue` is removed.
-
-Below are similar diffs benefiting from such enhancement:
-
-```diff
- function has(h, key) {
-@@ -133,21 +123,18 @@ function has(h, key) {
- var nid = Caml_hash_primitive.caml_hash_final_mix(Caml_hash_primitive.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0);
- var bucket = h_buckets[nid];
- if (bucket !== undefined) {
-- var key$1 = key;
- var _cell = bucket;
- while(true) {
- var cell = _cell;
-- if (cell.key === key$1) {
-+ if (cell.key === key) {
- return true;
-- } else {
-- var match = cell.next;
-- if (match !== undefined) {
-- _cell = match;
-- continue ;
-- } else {
-- return false;
-- }
- }
-+ var nextCell = cell.next;
-+ if (nextCell === undefined) {
-+ return false;
-+ }
-+ _cell = nextCell;
-+ continue ;
- };
- } else {
- return false;
-@@ -155,17 +142,17 @@ function has(h, key) {
- }
-```
-
-```diff
---- a/lib/js/belt_List.js
-+++ b/lib/js/belt_List.js
-@@ -15,9 +15,8 @@ function head(x) {
- function headExn(x) {
- if (x) {
- return x[0];
-- } else {
-- throw new Error("headExn");
- }
-+ throw new Error("headExn");
- }
-```
-
-### For loop minor-enhancement
-
-```diff
- function shuffleInPlace(xs) {
- var len = xs.length;
-- for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){
-+ for(var i = 0; i < len; ++i){
- swapUnsafe(xs, i, Js_math.random_int(i, len));
- }
-- return /* () */0;
-+
- }
-```
-
-Reason's `for .. in` only provide closed interval iterating, so it is quite
-common to write `for (i in 0 to Array.length(x) - 1) { .. }`, we did the
-tweaking above to make the generated code more readable.
-
-A full list of changes is available in our [Changelog
-file](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#73).
-
diff --git a/_blogposts/archive/2020-05-06-a-story-of-exception-encoding.mdx b/_blogposts/archive/2020-05-06-a-story-of-exception-encoding.mdx
deleted file mode 100644
index 065681d34..000000000
--- a/_blogposts/archive/2020-05-06-a-story-of-exception-encoding.mdx
+++ /dev/null
@@ -1,150 +0,0 @@
----
-author: hongbo
-date: "2020-05-06"
-previewImg:
-title: New Exception Encoding in BuckleScript
-description: |
- Highlights of our newest changes to the internal representation of exceptions
- and how it will provide better stacktraces to our users.
----
-
-## Upcoming Changes
-
-We just recently made some significant improvements with our new exception encoding and we find it so exciting that we want to highlight the changes and explain a little bit how exceptions work when compiling to JS.
-
-The new encoding allows us to provide proper, clear stacktrace information whenever a Reason/OCaml exception is thrown. This is particularly important when you have some code running in production that needs to collect those stacktrace for diagnostics.
-
-What's the difference?
-
-```reason
-exception My_exception { x : int};
-
-let loop = () => {
- for (i in 0 to 100) {
- if (i == 10) {
- raise (My_exception { x : i})
- };
- };
-};
-loop ();
-```
-
-When we compile and run this piece of code with the old exception encoding, this is what we'd get:
-
-```
-exn_demo$node src/exn_demo.bs.js
-
-/Users/hongbozhang/git/exn_demo/src/exn_demo.bs.js:11
- throw [
- ^
-[ [ 'Exn_demo.My_exception', 1, tag: 248 ], 10 ]
-```
-
-With our new improvements, we now get way better results:
-
-```
-bucklescript$node jscomp/test/exn_demo.js
-
-/Users/hongbozhang/git/bucklescript/jscomp/test/exn_demo.js:10
- throw {
- ^
-{
- RE_EXN_ID: 'Exn_demo.My_exception/1',
- x: 10,
- Error: Error
- at loop (/Users/hongbozhang/git/bucklescript/jscomp/test/exn_demo.js:13:20)
- at Object. (/Users/hongbozhang/git/bucklescript/jscomp/test/exn_demo.js:21:1)
- at ...
-}
-```
-
-That's basically it! Furthermore in this post, we want to give you some insights on how the data representation of exceptions looks like, and how it has been changed to expose useful stacktraces.
-
-## Why it is tricky to preserve stack-traces in ReasonML exceptions?
-
-Whenever you are using a Reason / OCaml exception (a so called "native exception"), you are actually using a data structure which is not the same as a JS runtime exception. That means that each exception representation invokes a different stacktrace handling mechanism:
-
-In JS, the stacktrace is collected immediately when an Error object is created / thrown, while in native Reason / OCaml, such data is not attached to the exception object at all (you can't just access `e.stack` to retrieve the stacktrace). This is because collecting the stacktrace in a native environment highly depends on the runtime support (e.g. if a flag was provided to attach the stacktrace data).
-
-Our goal was to provide a way to get the same stacktrace for native exceptions as you would with JS exceptions. This is all part of our on-going work to plan and implement the optimal encoding for all the different ReasonML data types for the JS runtime (just like with our previous changes to the `bool`, `unit` and `records` representation as well).
-
-## What's the classical ReasonML exception encoding?
-
-In ReasonML, an exception is basically structured data. Let's have a look at the two exception definitions below:
-
-```reason
-exception A of { x : int , y : string}
-exception B
-```
-
-`exception A` is encoded as an array of 3 slots. The first slot is a block by itself (called an *identity block*), while the second slot is for field x and the third slot for field y.
-
-`exception B` is just the identity block.
-
-The identity block is an array of 2 slots. The first slot is a string like "B", while the second slot is a unique integer.
-In more detail, the native array will also have a magic tag 248 attached which is not relevant for our purposes though.
-
-## What's the new exception encoding?
-
-We had to simplify and unify the encoding for the different exception cases to make it possible to compile exceptions into an object instead of an array. Let's take a look at the two exception values below for example:
-
-```reason
-A ({ x : 1, y : "x"})
-B
-```
-
-The two values will be compiled into
-
-```js
-{RE_EXN_ID : "A/uuid", x : 1, y : "x" }
-{RE_EXN_ID : "B/uuid"}
-```
-As you can see, all exceptions (no matter with or without payload) share the same encoding.
-
-What will happen when you raise an exception?
-
-```reason
-raise (A {x : 1 , y : "x"})
-````
-
-It generates following JS:
-
-```js
-throw {RE_EXN_ID: "A/uuid", x : 1 , y : "x", Error : new Error ()}
-```
-
-The output above shows that we are now able to attach the stacktrace as an `Error` attribute very easily, since every exception is now an object instead of an array. Really cool!
-
-It's important to note that a stacktrace will only be attached *when you raise an exception*. In other words, the stacktrace will not be attached just by creating an exception (which is different to JS'es `new Error()` behavior).
-
-## What does that mean for JS interop?
-
-Note that in the JS world, users can pretty much throw any value they want. It is even totally valid to `throw undefined`. In ReasonML, when you try to catch an exception, the compiler will convert any arbitrary value to a ReasonML exception behind the scene:
-
-- If it is already a ReasonML exception, then the conversion will be a no-op (no runtime cost)
-- Otherwise it will be wrapped as a `Js.Exn.Error obj`
-
-Here is an example on how you'd access the exception value within a Reason `try` expression:
-
-```reason
-try (someJSFunctionThrowing()) {
-| Not_found => .. // catch reasonml exception 1
-| Invalid_argument => // catch reasonml exception 2
-| Js.Exn.Error (obj) => ... // catch js exception
-}
-```
-
-The `obj` value in the `Js.Exn.Error` branch is an opaque type to maintain type soundness, so if you need to interact with this value, you need to classify it into a concrete type first.
-
-## Caveat
-
-- Please note that it's not allowed to rely on the key name `RE_EXN_ID`. It's an implementation detail which will probably be changed into a symbol in the future.
-
-- Don't over-use exceptions, remember exceptions should only be used in exceptional cases like division by zero. Whenever you try to express erroneous results, use the `result` or `option` type instead.
-
-## Bonus
-
-Now with our new exception encoding in place, a hidden feature called [extensible variant](https://caml.inria.fr/pub/docs/manual-ocaml/extensiblevariants.html) suddenly got way more interesting as well. Practically speaking, native exceptions are actually a special form of an extensible variant, so both are benefiting from the same representation changes!
-
-
-Happy hacking and we would like your feedback!
diff --git a/_blogposts/archive/2020-05-06-state-of-reasonml-org-2020-q2-pt1.mdx b/_blogposts/archive/2020-05-06-state-of-reasonml-org-2020-q2-pt1.mdx
deleted file mode 100644
index 1e37bdedc..000000000
--- a/_blogposts/archive/2020-05-06-state-of-reasonml-org-2020-q2-pt1.mdx
+++ /dev/null
@@ -1,129 +0,0 @@
----
-author: ryyppy
-date: "2020-05-06"
-previewImg: /static/blog/archive/state-of-reasonml-org-q2-2020.jpg
-articleImg: /static/blog/archive/state-of-reasonml-pt1-hero.jpg
-title: State of reasonml.org 2020-Q2 / Pt. 1
-description: |
- A report on recent achievements in the reasonml.org project and what
- to expect in the future. The first part is an introduction to our project.
----
-
-import Image from "src/components/Image";
-
-## Hello World!
-
-We are happy to finally show off our brand new blog system for `reasonml.org`. It unifies all the previous articles from the different Reason, BuckleScript, and ReasonReact websites and also acts as a communication channel for community and documentation updates as well.
-
-We also wanted to take the chance to give you a thorough update on what is going on in the `reasonml.org` project. A lot has happened in the past few months and we'd love to talk about it!
-
-So in the next few days and weeks we will release a series of blog posts to highlight different parts of the documentation platform and to give the community some vision on where we are heading (feel free to subscribe to our [RSS feed](https://reasonml.org/blog/feed.xml) or [Twitter](https://twitter.com/ReasonAssoc) for future updates).
-
-In Part 1, we'll start from the very beginning, for those who don't know about this project yet or haven't seen `reasonml.org` before.
-
-## Why Does This Project Exist?
-
-The `reasonml.org` project was kicked off in October 2019 as part of the
-["Better Learning Materials and
-Tools"](https://www.reason-association.org/projects/better-learning-materials-and-tools)
-program, around one week before [ReasonConf US 2019](https://reason-conf.us) happened in
-Chicago.
-
-It was initiated by the [Reason Association](https://www.reason-association.org) and funded by [Ahrefs](https://ahrefs.com) / the [Tezos Foundation](https://tezos.foundation/) to finally tackle the most challenging issue that many companies, community members, and newcomers have faced from the beginning of the Reason project: The lack of guidance and the confusing documentation architecture of the Reason ecosystem.
-
-This project is really exciting for us, since it allows us to create a documentation website that is tailored to the language's needs.
-
-We can make documentation changes across the whole platform in one atomic PR, cross-link or refactor resources without a fear of outdated links, and most importantly: We don't force any visitors to switch between websites when looking for specific Reason resources.
-
-This entirely eliminates the need for content duplication in each sub project website, like the syntax, compiler, reason-react bindings, blog posts etc. and centralises the maintenance efforts to a single repository.
-
-It gives users a big-picture overview of the core Reason ecosystem as well as a better understanding on what the platform is about.
-
-Last but not least, `reasonml.org` is built on Reason & BuckleScript as well, leading by example and dog-fooding along the way - spotting issues in newer compiler and syntax releases before they hit our users.
-
-We also give the community more power to chime in and take ownership over the documentation, and offer enough human capacity to collaborate on PRs (give guidance, help refine written texts, give early feedback), which is at the heart of great Open Source!
-
-## What We've Accomplished
-
-Building a documentation platform for a whole language ecosystem involves a lot of different disciplines. For this article we will cover three major topics: Structure & Design, the API Docs and the Reason Ecosystem Docs.
-
-### The Structure and Design
-The initial work was mostly about understanding the information architecture, relevant documentation dependencies, and finding all the relevant resources across different websites and blog posts. We have also spent a great amount of time finding a proper design language to visually codify different areas of the platform into a distinctive color scheme.
-
-
-
-Surprisingly for us, the navigation and sitemap turned out to be the hardest part to figure out. We had to craft long-lived URLs that would work across multiple versions of the Reason compiler and standard library, had to do research about future localization possibilities, understand the guts and limits of different documentation tools such as docusaurus, find a way to enable component based theming, and then put everything in a layout that actually worked across all sorts of devices without being too cluttered or confusing.
-
-Our core value is great UX, and so we naturally brought on an UI / UX / Brand designer to our team who has done an amazing job of putting our ideas into a practical and simple design (the design mockup is openly accessible [here](https://xd.adobe.com/spec/1cd19c3a-a0bb-4f93-4e11-725589888696-6ae0/grid)) and we are quite pleased with the current results. Additionally we regularly sync up with individuals from the Reason / BuckleScript teams to gather feedback.
-
-We also focused a lot on early feedback from the community, so we regularly [posted mockup images on Twitter](https://twitter.com/ReasonAssoc/status/1227135707602399232) and Discord to get an idea on what people liked / disliked. Turned out there was a lot to fix (colors, layouts, navigation items,..). We fine tuned the designs and went on with the technical details.
-
-### Improving the API Docs (Belt / JS)
-
-The current [official BuckleScript's API docs](https://bucklescript.github.io/bucklescript/api/index_modules.html) aren't visually stunning, but they *are* important for getting things done as a user. The docs are maintained within the BuckleScript repository, and there was no process to make sure the documentation site remained up to date with each BuckleScript release. It also presented a huge bottleneck for anyone hoping to contribute from the outside. So [Nik Graf](https://twitter.com/nikgraf) bit the bullet, did the massive amount of grunt work to extract all the available modules and function headers into hand curated markdown files, and organize them into easily-maintained documents from a technical writer's perspective.
-
-So we now have most of BuckleScript v7's [JS / Belt module](/docs/manual/latest/api/belt) documented.
-
-We are now working on further automating the process for generating BuckleScript documentation by adding JSON export functionality to `odoc`. As soon as this is done, we will upstream our latest hand curated changes to the BuckleScript inline documentation and also give better guidance on contributing to the JS / Belt documentation in the source code as well.
-
-### All Docs in One Place
-
-Our goal is to have a properly curated, well structured and streamlined overview for all core resources of the Reason platform. So we relocated all the information from the ReasonML, BuckleScript, ReasonReact and GenType website to the reasonml.org codebase.
-
-
-
-It didn't take long until we realized that we can't just keep the upstream version in its original form, so we started to make adaptations where it made sense. We also accepted new additions from the community, such as explanations about [function signatures on optional arguments](/docs/manual/latest/function#signatures-and-type-annotations) in the Reason manual, or a new decorator overview in the BuckleScript section.
-
-
-That said, we do keep track of new changes on the upstream sources and cherry-pick changes if necessary. To make this process more transparent, we introduced a version table on our [startpage](/) to make it easier to see the latest cherry-pick commit for each resource (ReasonML, BuckleScript, etc.).
-
-### So Is reasonml.org Always Up to Date?
-
-Yep. Everything you can find on this platform (plus some extra content) is already available and regularly synced with the official resources. We're also keeping an eye out for how reasonml.org could potentially even replace them in the future.
-
-In case you want to contribute new documentation, we encourage you to open a PR on the [reasonml.org repo](https://github.com/reason-association/reasonml.org). In case you open a PR on the original source, be aware that those will probably take longer to be merged, since the code owners of these codebases are pretty busy.
-
-### Should I Share reasonml.org URLs?
-
-We encourage you to share links to reasonml.org, but please note that our platform is still in a pre-release phase. The final permalink structure might change and some content might be relocated or removed, so don't rely too much on the URL structure just yet.
-
-We will try to put a banner on the website soon to prevent confusion.
-
-## What is still missing?
-
-So far following features are still missing:
-- Full Page Search
-- Reason Playground
-- Full API Docs
-
-We'll go into more detail in our future posts. Stay tuned!
-
-## Upcoming Next
-
-This article is part of the "State of reasonml.org 2020-Q2" series, which will cover following topics (please stay tuned for the upcoming posts):
-
-**Part 2) [Higher Quality Docs](/blog/state-of-reasonml-org-2020-q2-pt2)** How we automate things to improve docs quality and how we make sure that PRs get merged.
-
-**Part 3) [Future Tools for the Community](/blog/state-of-reasonml-org-2020-q2-pt3)** How we'll generate API docs with our new [doc-tools](https://github.com/reason-association/doc-tools) and how the new Playground will look like
-
-**Part 4) It's all Opinions** We'll dive into our documentation philosophy, our vision of the Reason Platform and ideas on how to tackle the "Reason Native" documentation.
-
-## Conclusion
-
-The progress on `reasonml.org` has been fantastic so far. Even though the current global health situation pushed us a bit behind our original schedule with the Reason playground, etc, we are still quite happy with the outcome and we hope you are as well!
-
-`reasonml.org` is still a work in progress and there is, of course, *much* to build before reaching the first official release. Until then, we would love for you to give it a try and let us know what you think, either by opening an issue, or even a PR.
-
-In case you have any questions or comments, make sure to let us know in the [Reason Discord](https://discord.gg/reasonml) `#docs` channel!
-
-Happy docs browsing!
-
-## Acknowledgements
-
-We want to thank everyone who helped us reporting issues, adding new or missing information, giving feedback and joining our discussions and welcome every new contributor for the future as well!
-
-Also a special thanks to everyone committing time and code into the reasonml.org codebase (in no particular order):
-
-nikgraf, jdeisenberg, johnridesabike, baransu, sync, lessp, fhammerschmidt, cknitt, tsnobip, tatchi, wontheone1, theshortcut, sgrove, a-c-sreedhar-reddy, believer, vasco3, smlmrkhlms
-
-_If we forgot to mention someone (because it slipped through our git logs) please let us know and we will add your name!_
diff --git a/_blogposts/archive/2020-05-11-state-of-reasonml-org-2020-q2-pt2.mdx b/_blogposts/archive/2020-05-11-state-of-reasonml-org-2020-q2-pt2.mdx
deleted file mode 100644
index 1916a2a37..000000000
--- a/_blogposts/archive/2020-05-11-state-of-reasonml-org-2020-q2-pt2.mdx
+++ /dev/null
@@ -1,163 +0,0 @@
----
-author: ryyppy
-date: "2020-05-11"
-previewImg: /static/blog/archive/state-of-reasonml-org-q2-2020.jpg
-articleImg: /static/blog/archive/state-of-reasonml-2020-q2-pt2-articleimg.jpg
-title: State of reasonml.org 2020-Q2 / Pt. 2
-description: |
- A report on recent achievements in the reasonml.org project. This part is all
- about quality assurance and time commitment.
----
-
-## Higher Quality Docs
-
-In our [previous blogpost](/blog/state-of-reasonml-org-2020-q2-pt1) we talked about the rationale and general concepts of the `reasonml.org` project. In this post we want to highlight how we make sure that our documentation is easy to manage and easy to refactor.
-
-## Automatic Quality Assurance
-
-When we extracted the API docs from the BuckleScript codebase into markdown files, we noticed that a substantial number of examples in the JS / Belt module did not compile when we tried to copy them in a different file (mostly due to missing context, or not fully qualified module references). One can guess how many people have been frustrated with compiler errors. For a project of the depth and scope of BuckleScript, automating away these sorts of mistakes is critical so the core team can continue focusing on delivering faster compile times and more features.
-
-To tackle this issue, we built a simple mechanism to automatically verify every API example. It extracts all the `reason example` code fences from the markdown, and then compiles them with BuckleScript.
-
-A markdown example with a code snippet might look like this:
-
-~~~
-some text with some broken `List.head` example:
-
-```reason example
-Belt.List.head([]); /* None */
-List.head([1, 2, 3]); /* This should actually be Belt.List */
-```
-~~~
-
-Running the test with the broken example would produce:
-
-```sh
-node scripts/test-examples.mjs "pages/apis/latest/belt/list.mdx"
-
-Testing example in 'pages/apis/latest/belt/list.mdx' on line 23...
-Testing example in 'pages/apis/latest/belt/list.mdx' on line 43...
-Testing example in 'pages/apis/latest/belt/list.mdx' on line 57...
-
--------Results for 'pages/apis/latest/belt/list.mdx'----------
-pages/apis/latest/belt/list.mdx:23 => ok
-pages/apis/latest/belt/list.mdx:43 => failed
-pages/apis/latest/belt/list.mdx:57 => ok
-...
-pages/apis/latest/belt/list.mdx:1054 => ok
-pages/apis/latest/belt/list.mdx:1078 => ok
-pages/apis/latest/belt/list.mdx:1110 => ok
------------
-Summary:
-Total Examples: 56
-Failed: 1
-Success: 55
-
-Tip: You can also run tests just for specific files / globs:
-`node scripts/test-examples.mjs "pages/belt_docs/array.mdx"`
-
------------
-Error Preview:
-
- We've found a bug for you!
- pages/apis/latest/belt/list.mdx: 46:1-9
-
- 1 │ Belt.List.head([]); /* None */
- 2 │
- 3 │ List.head([1, 2, 3]); /* Some(1) */
-
- The value head can't be found in List
-```
-
-As you can see, the error points you to the right error location within the `list.mdx` file by replacing the relative snippet line number with the absolute line number of the mdx file.
-
-A full run of the example test suite on current master yields following results:
-
-```sh
-Total Examples: 693
-Failed: 0
-Success: 693
-```
-
-Leveraging the machines do the hard work of tracking and verifying nearly 700 snippets means that the rest of us can invest in higher-level experiences.
-
-We also created a test to verify hyperlinks that cross-reference to other relative pages, which makes it hard to link to non-existing pages within reasonml.org.
-
-As an example, this is how a hyperlink to a non-existent page will be reported:
-
-```sh
-node scripts/test-hrefs.js
--------Results for './pages/markdown-guide.mdx'----------
-./pages/markdown-guide.mdx:14 => ok
-./pages/markdown-guide.mdx:14 => failed / Unknown href './doesnt-exist' in line 14:52
------------
-Summary:
-Total Links: 1125
-Failed: 1
-Success: 1125
-
-Tip: You can also run tests just for specific files / globs:
-`node scripts/test-hrefs.js "pages/belt_docs/*.mdx"`
-
------------
-Error Preview:
-./pages/markdown-guide.mdx: Unknown href './doesnt-exist' in line 14:52
-```
-
-Here are the statistics for all internal cross-links within the boundaries of the documentation platform:
-
-```sh
-Total Links: 1125
-Failed: 0
-Success: 1125
-```
-
-The summary reports 1125 relative links that point to different sections on reasonml.org. This includes relative hrefs such as `../javascript/my-file` or "global paths" such as `/docs/javascript/latest/my-file` etc.
-
-With example / hyperlink tests in place, contributors were able to jump in and fix outstanding errors in all our API docs, e.g. see PR [43](https://github.com/reason-association/reasonml.org/pull/43/files), [47](https://github.com/reason-association/reasonml.org/pull/47/files), [48](https://github.com/reason-association/reasonml.org/pull/48/files).
-
-This feature itself already showcases the value we provide with our new platform. Our goal is to make contributions and doc updates almost frictionless. We can even use this mechanism to test e.g. major compiler upgrades.
-
-All the tests run automatically on CI, and since we are using NextJS to build our platform, we also offer live preview deployments for each PR which makes it easier for maintainers and contributors to spot visual regressions as well.
-
-### Why are the API Docs Maintained in Markdown?
-
-You might ask yourself why we did the markdown extraction process in the first place. As for right now, the tool for generating documentation from code comments, called `odoc`, is not capable of generating simple structured data, such as JSON.
-
-Since `odoc` data is pretty complex, the only output format right now is plain **Html**. You probably have seen `odoc` generated Html already, such as the [Reason API docs](https://reasonml.github.io/api/index) on reasonml.github.io.
-
-We want to achieve better UX and integrate the documentation seamlessly in our design system and application. In our next post of the series, we will explain how we'll achieve this with the aid of our [doc-tools](https://github.com/reason-association/doc-tools) project.
-
-## Time Commitment and the Contribution Process
-
-So far we've mostly been talking about what _we_ did and what technical tools _we_ build. Actually we think it's more important to talk more about _you_, the community, taking part in all of this.
-
-Right now, the official documentation websites are maintained by the Reason / BuckleScript core team. Some websites are part of the source code repository, such as ReasonReact, some are separate. Issue trackers are flooded with requests, and the maintainers only have a limited amount of time to tackle them. We try to share the burden by slowly but steadily taking over the documentation part so the core team can focus on improving the compiler speed or shipping new features.
-
-Also knowing just one project well is not enough to build a documentation platform for the whole ecosystem. For instance, it doesn't make sense to only write about Reason syntax features when most of the interesting features are coupled to the Reason JS compiler (BuckleScript).
-
-We tried our best to raise enough funding and set our budgets in a way that allows us to allocate time and resources to work *full time* on the documentation for 2020. That means that we can build up competences with a holistic view on the whole Reason platform, and can spend enough time on reviewing PRs, giving feedback and allocating tasks. We also want to make sure to lower the bus factor by adding more core documentation maintainers in the future. Continuous and deep collaboration, proper guidance and mutual trust will be the foundation for this.
-
-To wrap things up, we think that we'll be able to establish a reliable documentation focused culture to share responsibilities within the community. That said, we'll try to be clear on our processes and goals, since we believe these are key aspects for successful collaboration.
-
-## Conclusion
-
-In this article we described how test automation across the whole Reason documentation platform can help us to proactively detect and fix errors. We also explained how we'll improve the contribution process for community curated docs.
-
-In case you have any questions or comments, make sure to let us know in the [Reason Discord](https://discord.gg/reasonml) `#docs` channel!
-
-Happy docs browsing!
-
-## Upcoming Posts
-
-This article is part of the "State of reasonml.org 2020-Q2" series (please stay tuned for the upcoming posts):
-
-**Part 3) [Future Tools for the Community](/blog/state-of-reasonml-org-2020-q2-pt3):**
-How we'll generate API docs with our new [doc-tools](https://github.com/reason-association/doc-tools) and how the new Playground will look like
-
-**Part 4) It's all Opinions:**
-We'll dive into our documentation philosophy, our vision of the Reason Platform and ideas on how to tackle the "Reason Native" documentation.
-
-## Previous Posts
-
-- **Part 1) [Introduction to reasonml.org](/blog/state-of-reasonml-org-2020-q2-pt1)**
diff --git a/_blogposts/archive/2020-05-12-state-of-reasonml-org-2020-q2-pt3.mdx b/_blogposts/archive/2020-05-12-state-of-reasonml-org-2020-q2-pt3.mdx
deleted file mode 100644
index 3bd1c4542..000000000
--- a/_blogposts/archive/2020-05-12-state-of-reasonml-org-2020-q2-pt3.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-author: ryyppy
-date: "2020-05-12"
-previewImg: /static/blog/archive/state-of-reasonml-org-q2-2020.jpg
-title: State of reasonml.org 2020-Q2 / Pt. 3
-description: |
- A report on recent achievements in the reasonml.org project. In this part we
- talk about upcoming tools and features.
----
-
-import Image from "src/components/Image";
-
-## Future Tools for the Community
-
-In [part 2](/blog/state-of-reasonml-org-2020-q2-pt2) of this blog series, we talked about the automation process for quality assurance within the documentation platform itself, and how we want to improve the collaboration process for our contributors.
-
-This article will cover some features and exciting ideas we have been working on for quite a while now. Even though these features are not fully implemented yet, we still think it's important to communicate the whole spectrum of the project.
-
-
-## Generating Full API Docs
-
-As we already mentioned in our previous posts, the API documentation is currently maintained by hand, and we only offer documentation for the `Js` and `Belt` module, since they are the most relevant for BuckleScript development.
-
-This will change as soon as our [doc-tools](https://github.com/reason-association/doc-tools) are ready to be used.
-
-The `doc-tools` project includes a CLI that enables us to easily run the odoc toolchain on the BuckleScript repository to generate JSON data, which will be our foundation for statically generated, good looking, and interactive doc pages within NextJS (see [SSG](https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-static-generation)). The project is managed and developed by [rizo](https://github.com/rizo). You can find more information about it [here](https://www.reason-association.org/projects/doc-tools).
-
-We are aware that there is more software doing similar things, such as `redoc` or `bs-doc`, the latter acting as the driver for odoc within a BuckleScript project. Since our goal is to have a battle-tested, well-integrated and easy to use tool for odoc JSON generation, we will first start testing `doc-tools` by generating the API docs for `reasonml.org` before making it available to the broader community.
-
-As soon as we figured out the details (e.g. the right JSON data model), we will have a better idea on how to build useful infrastructure around it. For instance, we thought about designing a customizable ReasonReact component library that allows consumers to build their own custom odoc data based UI for their own projects.
-
-There's a lot of potential, but one needs to think about easy to use API design first and then test it thoroughly before public release.
-
-## Search
-
-We don't have any **search functionality** yet, and this will take some more time to implement. We looked for indexing services that can cover both, the prose text and API documentation to put search results in a more refined context.
-
-There were some solutions, but still, Algolia turned out to be the best candidate with its smallest pricing tier. We don't want to rely on the Algolia OSS webscraping API, since it doesn't give us enough control on manipulating the search results, and we need more control if we want to be able to design a custom search experience.
-
-
-
-We did the ground work for our search feature and we will get into more detail as soon as we are able to generate API docs with our aforementioned `doc-tools`. Like with the API docs, we'll first need the doc-tools infrastructure so we can generate indexable data for Algolia as well.
-
-## Playground
-
-We also invested a lot of time into thinking about the future of the Reason playground from a UX perspective. Our most important goal is to make it possible to switch BuckleScript versions on demand. We also wanted the relevant Reason version to be part of the playground bundle.
-
-
-
-Users should always know what version of BuckleScript / Reason is running when writing and sharing code, and the code written on a playground should be runnable with an equivalent bs-platform setup on a local machine. Right now, `reasonml.github.io/try` uses different refmt.js / playground bundle versions, which makes it really hard to write reproducible code for the same BuckleScript version.
-
-Switchable BuckleScript versions will help tremendously with the testing process for new BuckleScript beta releases. Within BuckleScript, we already started integrating the Refmt API into the bucklescript js_of_ocaml entry-point and refactoring the bundle API to access Reason / BuckleScript version more easily. In the next step we will start implementing the Playground web-app on `reasonml.org/try`. You can find the mockups here: [Desktop](https://xd.adobe.com/spec/1cd19c3a-a0bb-4f93-4e11-725589888696-6ae0/screen/e8559ac4-5e35-430b-83f3-e4ad8c1e274c/Reason-1400-Playground) / [Mobile](https://xd.adobe.com/spec/1cd19c3a-a0bb-4f93-4e11-725589888696-6ae0/screen/adfe80dc-6bc1-40a5-9975-aa062e63cdc5/Reason-Playground).
-
-Design & UX will play an important role here. Users should be able to use the playground on a mobile device as well, making the process of sharing / editing code snippets, while on the go, way easier.
-
-## Conclusion
-
-You now know what new features to expect for `reasonml.org`, such as the new Reason Playground or the `doc-tools` project for extracting JSON data from module documentation in BuckleScript projects and we hope you are as excited as we are!
-
-In case you have any questions or comments, make sure to let us know in the [Reason Discord](https://discord.gg/reasonml) `#docs` channel!
-
-Happy documentation browsing!
-
-## Upcoming Posts
-
-**Part 4) It's all Opinions:**
-We'll dive into our documentation philosophy, our vision of the Reason Platform and ideas on how to tackle the "Reason Native" documentation.
-
-## Previous Posts
-
-- **Part 1) [Introduction to reasonml.org](/blog/state-of-reasonml-org-2020-q2-pt1)**
-- **Part 2) [Higher Quality Docs](/blog/state-of-reasonml-org-2020-q2-pt1)**
diff --git a/_blogposts/archive/2020-05-15-a-story-of-lazy-encoding.mdx b/_blogposts/archive/2020-05-15-a-story-of-lazy-encoding.mdx
deleted file mode 100644
index c5f9e0ac4..000000000
--- a/_blogposts/archive/2020-05-15-a-story-of-lazy-encoding.mdx
+++ /dev/null
@@ -1,117 +0,0 @@
----
-author: hongbo
-date: "2020-05-15"
-previewImg:
-title: New Lazy Encoding in BuckleScript
-description: |
- Highlights of our newest changes to the internal representation of lazy values
- and how it will benefit our users.
----
-
-
-## Introduction
-
-Recently we made some significant improvements with our new encoding for lazy values, and we find it so exciting that we want to highlight the changes. The new encoding generates very idiomatic JS output like hand-written code.
-
-For people who are not familiar with lazy evaluation, it is documented [here](/docs/manual/latest/lazy-values).
-
-## Comparison between the old and new lazy encoding
-
-Let's take an example, and see how the old encoding of a lazy value would look like:
-
-```reasonml
-let lazy1 = lazy {
- "Hello, lazy" -> Js.log;
- 1
-}; // create a lazy value
-
-let lazy2 = lazy 3 ; // artifical lazy values for demo purpose
-
-Js.log2 (lazy1, lazy2); // logging the lazy values
-
-let (lazy la, lazy lb) = (lazy1, lazy2); // pattern match to force evaluation
-
-Js.log2 (la, lb); // logging forced values
-```
-
-When compiled and run in `node`, the runtime representation of our lazy values will look something like:
-```bash
-lazy_demo$node src/lazy_demo.bs.js
-[ [Function], tag: 246 ] 3 # logging the output of two lazy blocks
-Hello, lazy # lazy1, laz2 evaluated forced by pattern match, hence logging
-1 3 #logging the evaluated lazy block
-```
-
-With the new encoding, the output of the same example code would look like this:
-```bash
-{ RE_LAZY_DONE: false, value: [Function: value] } { RE_LAZY_DONE: true, value: 3 } # logging block one with new encoding
-Hello, lazy
-1 3
-```
-
-As you can see, with the new encoding, no magic tags like 246 appear, and the lazy status is clearly marked via `RE_LAZY_DONE: (true | false) `.
-
-In fact, the code quality of our generated `bs.js` files has also improved. Going back to our old version, the generated JS would look like this:
-
-```js
-var lazy1 = Caml_obj.caml_lazy_make((function (param) {
- console.log("Hello, lazy");
- return 1;
- }));
-
-console.log(lazy1, 3);
-
-var la = CamlinternalLazy.force(lazy1);
-
-var lb = CamlinternalLazy.force(3);
-
-console.log(la, lb);
-
-var lazy2 = 3;
-```
-
-In our new version with all the new changes to the lazy encoding, the output is way more simplified:
-```js
-var lazy1 = {
- RE_LAZY_DONE: false,
- value: (function () { // closure now is uncurried arity-0 function
- console.log("Hello, lazy");
- return 1;
- })
-};
-
-var lazy2 = {
- RE_LAZY_DONE: true,
- value: 3
-};
-
-console.log(lazy1, lazy2);
-
-var la = CamlinternalLazy.force(lazy1);
-
-var lb = CamlinternalLazy.force(lazy2);
-
-console.log(la, lb);
-```
-
-## What changes did we make?
-
-In the native runtime environment, the encoding of lazy values is rather complicated:
-
-- It is an array, which is not friendly for debugging in JS context.
-- It has some special tags which are not meaningful, for example, magic number 246, in JS context.
-- It tries to unbox lazy values with the help of the native garbage collector (GC). However, this behavior does not make sense in a JS runtime environment since the JSVM does not expose its GC semantics. Keeping that behavior would only introduce more complexity for the JS side.
-
-So in our current master branch, we drastically simplified our lazy encoding scheme to optimize for the JS runtime as much as possible:
-
-- The encoding is uniform; it is always an object of two key value pairs. One is `RE_LAZY_DONE` to mark its status,
-the other is either a closure or an evaluated value.
-
-- The compiler optimization still kicks in at compile time: if it knows a lazy value is already evaluated or does not need to be evaluated, it will promote its status to be 'done'. However, unlike in a native environment, unboxing is not happening. This makes sense since the most interesting unboxing scenarios only happen during runtime and not during compile time (a scenario which is impossible in the JSVM).
-
-
-With the new encoding, `lazy` is now way more viable for JS usage, so we encourage our users to use it whenever it is convenient!
-
-## Caveats:
-
-Don't rely on the special name `RE_LAZY_DONE` for JS interop; we may change it to a symbol in the future.
diff --git a/_blogposts/archive/2020-05-15-state-of-reasonml-org-2020-q2-pt4.mdx b/_blogposts/archive/2020-05-15-state-of-reasonml-org-2020-q2-pt4.mdx
deleted file mode 100644
index 47b47b0bb..000000000
--- a/_blogposts/archive/2020-05-15-state-of-reasonml-org-2020-q2-pt4.mdx
+++ /dev/null
@@ -1,97 +0,0 @@
----
-author: ryyppy
-date: "2020-05-15"
-previewImg: /static/blog/archive/state-of-reasonml-org-q2-2020.jpg
-title: State of reasonml.org 2020-Q2 / Pt. 4
-description: |
- A report on recent achievements in the reasonml.org project.
- This is the final part of the series about our vision of a more accessible Reason platform.
----
-
-import Image from "src/components/Image";
-
-## It's all Opinions
-
-This is the final part of our "State of reasonml.org Q1-2020" series. In [part 3](/blog/state-of-reasonml-org-2020-q2-pt3), we gave our readers some insights on advanced features we've been working on for `reasonml.org` and showed how our tools might help the community to build better documentation experiences themselves.
-
-Apart from the general progress perspective of the `reasonml.org` project, we also want to give you some more context on how we envision the documentation landscape for the Reason language in the near future. It should give you a perspective on how we see things, and we hope it will kick off some constructive community discussions on where things should be heading.
-
-### Our Focus: Web Development
-
-Our goal is to increase the number of Reason developers by focusing on the biggest market for the language, which is the JS / React ecosystem.
-
-Thinking back to when Reason got its first massive surge in traction around 2017, the primary motivation around adoption was its JS-dev friendly nature, with good JS interop and superb React support. Many people spoke at conferences and meetups because they were really excited about having a strongly typed language, with the right level of escape hatches to allow seamless interop with existing JS.
-
-We had *massive* success with ReasonConf 2018, which was mainly targeted at complete Reason beginners, and experienced JS developers. The demand was huge, and actually still is!
-
-#### What about Native Compilation?
-
-Reason is often advertised as an alternative syntax to OCaml. The native story was always a big part of its marketing scheme, so we took the time to really think about what use-cases we can really cover with the native (OCaml) platform and explain what we believe would be a good strategy to push the Reason platform further.
-
-First of all, there are companies relying on the OCaml stack every day for crunching numbers and building reliable systems, like Ahrefs and JaneStreet, and some of them either use Reason just as an alternative syntax to OCaml, or they use Reason together with BuckleScript to build JS applications. They have the resources, company culture and the right level of OCaml knowledge to make that work.
-
-Reason / BuckleScript and Reason / OCaml are pretty different though, not only tooling wise, but they also come with different community conventions and different roadmaps which are hard to unify. The effort making it work would extremely limit our actual potential to grow the language and community.
-
-Companies and Products like [Darklang](https://darklang.com/) and [OneGraph](https://www.onegraph.com/) demonstrated with years of struggle and effort that native can eventually be used for web development, but the situation is still far from ideal. It requires a lot of resilience and dedication to make it work. [Paul Biggar](https://www.youtube.com/watch?v=EnPodoPzimE) and [Sean Grove](https://www.youtube.com/watch?v=Lv2QCq6ZBPs) talked about that topic (and all the problems along the way) in detail at ReasonConfUS 2019.
-
-So what we think is that Reason Native has very specific use-cases that compiled JavaScript could not cover. Its biggest potential today lies in building Reason / OCaml related development tools (CLIs, parsers, ppxes, etc), since they are really fast and the library support for building e.g. CLIs is actually good.
-
-In the app development space, for many companies the BuckleScript / NodeJS / ElectronJS platform is still perceived as a safer bet and easier to justify for managers and tech leads. For what we know from our discussions is that the most important question on tech stack were mostly about using TypeScript / Flow or Reason (BuckleScript) and not about choosing JS vs native.
-
-There needs to be a clearer separation between both platforms (JS and OCaml), a stronger focus on the JS use-case and clear instructions on getting into native, for those who are ready to do so and need the extra performance.
-
-
-#### Marketing and Newcomer Sustainability
-
-In the past few months, we observed more and more newcomers getting into the BuckleScript platform to build ReasonReact applications. Those Reason developers also started to talk more about Reason at JS conferences, meetups and [podcasts](https://youtu.be/0Usnsda0WDo), which caused yet another wave of newcomers joining the Discord chat to ask for guidance, which is a great virtuous cycle (fun fact: it also seems we just hit the [10k users mark](https://discordapp.com/channels/235176658175262720/235176658175262720/702838691227369502))!
-
-Fair enough, the only "real numbers and statistics" we can showcase are vague, but still interesting: Just typing in ["reasonml" on Youtube](https://www.youtube.com/results?search_query=reasonml) shows a list of videos mostly targeted to JS audiences.
-
-
-
-To put this in relation to some "high volume" [ReasonConf](https://www.youtube.com/channel/UCtFP_Hn5nIbZY4Xi47qfHhw?view_as=subscriber) viewing numbers: Our best performing videos are our ReasonConf keynotes (2018: 3.3k, 2019: 4,3k, 2019 US: 18k). These are relatively low numbers in comparison to talks like [ReasonML for skeptics by Eric Shaefer](https://www.youtube.com/watch?v=EmBzyBQU760), ticking in at 6.4k views ([React Day Berlin](https://reactday.berlin/)) and Ken Wheeler's [ReasonML is Serious Business](https://www.youtube.com/watch?v=lzEweA7RPi0) at React Rally 2018, which accumulated a pretty huge number of 15k views.
-
-The same goes for other JS focused talks, such as [GOTO2019 - ReasonML: React as a Language and what the Future looks like](https://www.youtube.com/watch?v=xGN4BMPbk7Q) by Peter Piekarczyk (5.8k views) or high volume JS related Youtube channels like Fun Fun Function [building a speed typing game with ReasonML and Comic Sans as editor font](https://www.youtube.com/watch?v=6MSksJhPcVA) (19.8k views). There's still a ton more resources about ReasonML we didn't mention, since we were just talking about the first few Youtube hits there.
-
-Apart from all that Youtube viewing numbers, many of you who spend a lot of time in our community channels already may have noticed that there seems to be more interaction happening, and we strongly believe this is related to the stronger marketing focus on the JS part, pulling in interested folks to build React applications in Reason. Even if all of this is just solely about web development, we also think that the OCaml community greatly benefited from this visibility boost as well.
-
-Hopefully for the future, with a unified documentation platform and blog as a central communication channel, it will be easier to conduct polls or capture web traffic for more concrete factual data. To move beyond our current stage where we are all largely guesstimating, we need to align our resources and put a focus on one specific goal, to be able to build a solid foundation the Reason platform can further grow on.
-
-### Separating the Documentation for JS and Native
-
-So what about the native documentation then? `reasonml.org` reserved a spot for the Native platform, but it requires a lot of dedicated work to "Reasonify" most OCaml platform resources first.
-
-**Documentation would include:**
-- Reasonified OCaml manual
-- esy & opam
-- dune
-- ppxes
-- js_of_ocaml
-- etc.
-
-We strongly believe that it's not viable to teach the Reason language while it requires you to know the in's and out's of OCaml as well. Learning one language is hard enough, so we shouldn't confront newcomers with leaky abstractions without any preparations.
-
-Our proposal (to the community) was to further promote Reason a JS-first language, but still have `Reason Native` as the ace-up-our-sleeve for doing deep level work in tooling or building more performant binaries.
-
-Please be aware that we are not the ones to make a final decision on this: In the interest of serving one community well, we've chosen to make this one experience delightful. And after several months of tinkering with documentation concepts, this is the best we have produced.
-
-That said, **we are looking for contributors** to help us with the documentation of the "Reason Native" section, since it requires a ton of work, knowledge and dedication to split the workload into a list of actionables and to coordinate the technical writing.
-
-
-## Conclusion
-
-Building documentation is not only a technical challenge, it's also about having a proper vision and putting focus on certain aspects of the language. We should not only think about technical ingenuity, but also keep an eye on bringing in more people. Our hopes is that we can break the complexity of understanding the language by focusing on a single use-case, then later branch out to more complex areas in well isolated manners, as soon as we get ready for prime time.
-
-We want Reason to be a web developer friendly language, but we also want to be able to document the Native parts in a way that can be understood without any OCaml knowledge, and for that we'll need help from experienced and ambitious native toolchain users to make this happen.
-
-This is the end of our "State of reasonml.org Q1-2020" series. We hope you have a better understanding on what's going on in `reasonml.org` and will try to keep our processes transparent with future blog posts as well.
-
-In case you have any questions or comments, make sure to let us know in the [Reason Discord](https://discord.gg/reasonml) `#docs` channel!
-
-Happy documentation browsing!
-
-## Previous Posts
-
-- **Part 1) [Introduction to reasonml.org](/blog/state-of-reasonml-org-2020-q2-pt1)**
-- **Part 2) [Higher Quality Docs](/blog/state-of-reasonml-org-2020-q2-pt1)**
-- **Part 3) [Future Tools for the Community](/blog/state-of-reasonml-org-2020-q2-pt3)**
diff --git a/_blogposts/archive/2020-06-22-overview-of-new_encoding.mdx b/_blogposts/archive/2020-06-22-overview-of-new_encoding.mdx
deleted file mode 100644
index 4f44a87c8..000000000
--- a/_blogposts/archive/2020-06-22-overview-of-new_encoding.mdx
+++ /dev/null
@@ -1,248 +0,0 @@
----
-author: hongbo
-date: "2020-06-22"
-previewImg:
-title: Make generated JavaScript Inline Caching friendly using types in BuckleScript version 8
-description: |
- Highlights of our newest changes to the internal representation
- and how they will benefit our users.
----
-
-In the next version of BuckleScript, we will make several major changes to tweak the data representation for various data types,
-making them more idiomatic and debugger friendly.
-
-Note: since V8 or other JavaScript engines are tweaked to make idiomatic JS code run fast, these changes also results in faster running code.
-
-Another property, for a compiled language like BuckleScript,
-is that we can reason about [IC](https://en.wikipedia.org/wiki/Inline_caching) friendliness by just looking at the type definitions locally;
-this is very helpful for advanced users to write performance predictable JS code.
-
-This is a nice [introduction](https://mrale.ph/blog/2012/06/03/explaining-js-vms-in-js-inline-caches.html) to inline caching if you are unfamiliar with this topic,
-or you can skip the section about IC and come back later when you get more familiar.
-
-Note: this article is quite dense, so we will skip the old encoding.
-
-## Record (stable)
-
-BuckleScript has compiled records to idiomatic JS objects since [version 7](https://bucklescript.github.io/blog/2019/11/18/whats-new-in-7). This is great for performance and debugging.
-We also support label renaming to shorten field names to save space.
-
-Take the code below for example:
-
-```reasonml
-type int64 = {
- loBits : int [@bs.as "lo"],
- hiBits : int [@bs.as "hi]
-}
-let value = {hiBits : 33 , loBits : 32 };
-let rand = ({loBits; hiBits}) => loBits + hiBits;
-```
-
-It will generate JS output as below:
-```js
-var value = {lo : 32, hi : 33}
-function rand (param){
- return param.lo + param.hi
-}
-```
-
-If users want to make it even shorter, in next version, they can choose to compile record as an array, as follows:
-
-```reasonml
-type int64 = {
- [@bs.as "0"] loBits : int,
- [@bs.as "1"] hiBits : int
-}
-let value = {hiBits : 33 , loBits : 32 };
-let rand = ({loBits, hiBits}) => loBits + hiBits;
-```
-
-This produces the following JS output:
-
-```js
-var value = [32,33]
-function rand(param){
- return param[0] + param[1]
-}
-```
-
-The label renaming techniques can be applied systematically using a syntactic macro;
-in the future we may provide an advanced mode to apply it automatically. Another nice property is that
-only the type definition needs to be adapted; other parts of code remain untouched.
-
-### IC friendliness
-
-Records are always in a perfect position for Inline Caching(IC); the compiler can ensure all generated records are of the same shape.
-
-## Variant (internal)
-This encoding for variants may be subject to change in the future, but it is so simple that it makes sense for users to have a basic understanding.
-
-Take the following type definition, for example:
-
-```reasonml
-type t =
- | Black(t, int, t)
- | Red(t, int, t)
- | Empty;
-let empty = Empty ;
-let v0 = Black (empty, 3, empty);
-let v1 = Red (empty, 3, empty);
-```
-The generated JS code would be:
-
-```js
-var empty =/*Empty*/ 0;
-var v0 = {TAG : 0/*Black*/, _0 : /*Empty*/ 0 , _1 : 3 , _2 : /*Empty */ 0};
-var v1 = {TAG : 1/*Red*/, _0 : /*Empty*/ 0 , _1 : 3 , _2 : /*Empty */ 0};
-```
-
-As you can see, variants are divided into two categories.
-Variants which do not have a payload are compiled into a number starting from 0,
-while variants which have a payload are compiled into an object which has the first slot named `TAG` and the following slots named as `_0`, `_1` ..
-
-### variant with inline records
-
-Users can give names to the payload, and the compiler respects those names. However, we don't support user-level renaming, i.e, using `bs.as`, at this time.
-
-```reasonml
-type t =
- | Black ({l:t, value: int, r: t})
- | Red({l:t, value: int, r: t})
- | Empty;
-let empty = Empty ;
-let v0 = Black ({l:empty, value: 3, r:empty});
-let v1 = Red ({l:empty, value:3, r: empty});
-```
-The generated JS code would be:
-```js
-var empty =/*Empty*/ 0;
-var v0 = {TAG : 0/*Black*/, l: /*Empty*/ 0 , value : 3 , r: : /*Empty */ 0};
-var v1 = {TAG : 1/*Red*/, l : /*Empty*/ 0 , value : 3 , r : /*Empty */ 0};
-```
-
-
-### Special case when the number of variants which has payload is only 1.
-
-Take the types below for example:
-
-```reasonml
-type list =
- | Nil
- | Cons (int , list);
-```
-
-
-Since only one variant has a payload, the compiler does not need add `TAG` when we destructure the data for pattern matching.
-Thus, the following code:
-
-```reasonml
-let u = Cons(1,Nil)
-```
-will generate the following JS output:
-
-```js
-var u = {_0: 1, _1 : /*Nil*/ 0 }; // No TAG data.
-```
-
-### Specialized for immutable list
-
-The `list` type is a built-in type; its type definition is similar to this :
-
-```reasonml
-type t ('a) =
- | []
- | (::) ('a , t ('a))
-```
-
-Without any customization, this would generate JS objects with indexes like `_0`, `_1`, etc.
-Since lists are so pervasive, we provide some special treatment so that
-
-```reasonml
-let u = [0,1,2,3]
-```
-Will generate js code as below:
-```js
-var u = {hd : 0, {tl : {hd : 1, {tl : {hd: 2, {tl : {hd :3 , tl : /*[]*/0 }}}}}}}
-```
-
-This is a minor change; we changed the name of `_0` to `hd` and `_1` to `tl`.
-
-### IC friendliness
-
-Types that have only one variant with a payload are in a perfect position for IC.
-
-The number of variants which does not carry payload will not affect IC, since the pattern match will do a split first.
-
-Types with variants that have the same number of payloads, such as the red-black-tree example above, are also in a perfect position for IC.
-
-For other cases, it will hit a polymorphic IC in the V8 jit compiler, this is not the fastest running case.
-
-Note that you can always tweak the variant layout to make it IC friendly. For example, you can always introduce one level
-of indirection to make all variants share the same number of payloads:
-
-```reasonml
-type t =
- | A0 (a0) // 1 payload
- | A1 (a1) // 1 payload
- | A2 (a2) // 1 payload
- | C0
- | C1
- | C2 // This will not affect IC
-```
-
-### Variant in debug mode
-
-Note we only generate constructor names in comments for debugging.
-When constructor names are attached to the data, it will be more useful for debugging. When debug mode is activated using `-bs-g`,
-
-The generated code will be changed from below
-```js
-var v0 = {TAG : 0/*Black*/, _0 : /*Empty*/ 0 , _1 : 3 , _2 : /*Empty */ 0};
-```
-to
-
-```js
-var v0 = {TAG : 0, _0 : /*Empty*/ 0 , _1 : 3 , _2 : /*Empty */ 0, [Symbol.for("name")]: "Black"};
-```
-
-## Polymorphic-variant (internal)
-
-Polymorphic variants allow users to use the types without declaring them first:
-
-```reasonml
-let u = 3 -> `hello
-```
-
-It will generate
-```js
-var u = {HASH : MAGIC_NUMBER, VAL: 3 }
-```
-The field of `HASH` is the hash of name `"hello"`, while the `VAL` is the payload
-
-### IC friendliness
-
-Polymorphic variants are always in a perfect position for IC, the compiler can ensure all generated objects are of the same shape.
-This is because the payload is not unpacked; it is always just one payload.
-
-
-### Polymorphic variant in debug mode
-
-In debug mode, similar to variant, we carry the name in generated code for debugging,
-
-So instead of
-```js
-var u = {HASH : MAGIC_NUMBER, VAL: 3 }
-```
-
-It will generate
-
-```js
-var u = {HASH : MAGIC_NUMBER, VAL: 3 , [Symbol.for("name")] : "hello"}
-```
-
-## Conclusion
-
-BuckleScript users will profit from better runtime performance and a better debugging experience for various data types, such as variants,
-exceptions, lazy values and more since version 8.0.
-
-Happy Hacking!
diff --git a/_blogposts/archive/2020-07-01-bucklescript-8-1-new-syntax.mdx b/_blogposts/archive/2020-07-01-bucklescript-8-1-new-syntax.mdx
deleted file mode 100644
index a5ab94f05..000000000
--- a/_blogposts/archive/2020-07-01-bucklescript-8-1-new-syntax.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-author: chenglou
-date: "2020-07-01"
-badge: release
-title: "A New Syntax for BuckleScript"
-description: |
- First announcements on our latest efforts for a better syntax parser.
----
-
-> **Update / August 13th 2020:**
-> BuckleScript is now called ReScript, more infos [here](/blog/bucklescript-is-rebranding).
-
-## What's new?
-
-The release of BuckleScript 8.1 contains a new important addition: we've rewritten the vendored Reason syntax parser and printer.
-
-The rewrite was done by a community member of ours, [Maxim](https://twitter.com/_binary_search). Maxim was a main contributor to the old Reason repo, and together we've reached the conclusion a while ago that the codebase needed a revamp. After wrestling with it for the longest time, we've settled on a low-key rewrite.
-
-Syntax discussions have always been churny, so we didn't want to prematurely announce something before it's ready for proper critiques. After testing this extensively, we now deem it solid enough for your consumption.
-
-**Here's what you need to know:**
-- The new syntax comes directly with your BuckleScript >=8.1 installation. You won't have to install anything else. It does not depend on the old `refmt`.
-- There are a few differences in syntax between the Reason syntax, documented in the [migration docs](/docs/manual/v8.0.0/migrate-from-bucklescript-reason).
-- The migration docs also guides you toward converting your codebase to the new syntax, file by file or project by project.
-- This syntax isn't available on Reason native compilation.
-- As always, check our documentation's Editor Plugins section for your editor's support of this new syntax.
-- To avoid conflict, we've employed the new file extensions `.res` and `.resi`, for implementation and interface respectively.
-- This means the syntax sits alongside the existing Reason and ml syntax. Your existing code will keep working!
-- Issues for the new syntax go [here](https://github.com/rescript-lang/syntax).
-
-**This is how it looks like:**
-
-```res
-// src/example.res
-
-if hasEaten {
- Js.log("more dessert please")
-} else {
- Js.log("dessert please")
-}
-
-let message = j`Hello ${userName->Js.String.toUpperCase}!`
-
-type student<'extraInfo> = {
- name: string,
- age: int,
- otherInfo: 'extraInfo,
-}
-
-@bs.val external window: {..} = "window"
-
-window["addEventListener"]("focus", onFocus)
-```
-
-**Here is an example of an error message:**
-
-```
- Syntax error!
- src/test.res:7:31-8:0
-
- 5 │ }
- 6 │
- 7 │ let message = j`hello ${world}!
- 8 │
-
- Did you forget to close this template expression with a backtick?
-```
-
-The short version: install bs-platform@8.1 or later, create a new `.res` file in your new/existing project, then have fun!
-
-Quality-wise, the parser now features excellent error messages, is noticeably faster on projects of all scales, and should be much more robust. The rearchitecture also allows us to release in a more professional manner. We'll go into more details on the motivation and architecture in the future when the syntax pans out well; hopefully, these will prove to be **very** interesting and illuminating for all engineers. Stay tuned!
-
-Maxim's effort is our community at its best and we hope that you'll enjoy his work as much as we did!
-
-Stay safe!
diff --git a/_blogposts/archive/2020-07-06-a-note-on-bucklescripts-future-commitments.mdx b/_blogposts/archive/2020-07-06-a-note-on-bucklescripts-future-commitments.mdx
deleted file mode 100644
index c9d15fa0c..000000000
--- a/_blogposts/archive/2020-07-06-a-note-on-bucklescripts-future-commitments.mdx
+++ /dev/null
@@ -1,81 +0,0 @@
----
-author: chenglou
-co-authors:
- - ryyppy
-date: "2020-07-06"
-title: A Note on BuckleScript's New Syntax and Its Future Support Commitments
-description: |
- This post clarifies the goals and commitments of the BuckleScript compiler toolchain
- and gives more context on what to expect in the future.
----
-
-> **Update / August 13th 2020:**
-> BuckleScript is now called ReScript. More infos [here](/blog/bucklescript-is-rebranding)
-
-## A Statement for the Future
-
-Our [new ReScript syntax announcement](/blog/bucklescript-8-1-new-syntax) generated lots of good feedback, but also raised some concerns from community members whose use-cases still align with our goal, but sometimes extend outside of it, and who are worried about further commitments to the ecosystem in the face of new unknowns.
-
-This post is dedicated to answer some common questions regarding trust, breakages, and future investment.
-
-## Q & A
-
-**What is the new syntax called?**
-
-It's called ReScript. The extension is `.res` and `.resi` (reminiscent of Reason) as to not overload various existing tools operating on `.ml` and `.re`.
-
-**Will BuckleScript break my existing code?**
-
-No. This new syntax is purely additive. It sits beside the existing OCaml and Reason syntax inside BuckleScript. We **won't** remove OCaml and Reason support from BuckleScript for a long time, whatever the surface emphasis might be.
-
-**Will I be able to continue writing OCaml/Reason and compile to JS in the future?**
-
-It follows from our previous guarantee that yes, you will still be able to. If BuckleScript _ever_ starts removing language features, it'll be on the `.res` syntax level; this means that you can just keep writing in OCaml and Reason syntax to access the complete set of OCaml features that BuckleScript supports today.
-
-BuckleScript will also continue to acquire upstream OCaml features whenever relevant, just like today.
-
-**What about the AST? Will this new syntax prompt the move to a non-OCaml AST?**
-
-No, since that'd break existing ppxes (e.g. internationalization, graphql). If we feel the need to adopt a new AST in the future, it'll again be purely additive.
-
-**Will there be a migration script to convert our code to the new syntax?**
-
-Yes, very soon, from both OCaml and Reason. We wanted to gather the community feedback before finalizing it. So far, many changes proposed by members [have](https://github.com/BuckleScript/syntax/issues/8) [been](https://github.com/BuckleScript/syntax/pull/12) [great](https://github.com/BuckleScript/syntax/issues/7)!
-
-**What's the editor tooling story?**
-
-Currently, highlighting of `.res` and `.resi` is supported on most editors. We will be adding code intelligence support (type-driven autocomplete, type hint, diagnosis panel) back, to the same level as Reason and more (thanks to the syntax's tighter integration with BuckleScript now).
-
-We will be adding these in Reason-language-server, so the editing setup won't need to change. We as first party don't work on ocaml's language server.
-
-**We now have 3 syntaxes to worry about.**
-
-The plan is to emphasize the new syntax and focus our tooling around it. It'll be confusing to temporarily have different syntaxes in the same codebase, but that's the cost of a proper migration support. We hope this is transient; it's darkest before the dawn.
-
-**How do we address the fragmentation of the community by the new syntax?**
-
-Folks who have been in the community for a while know that there have always been opposing philosophies regarding newcomer funneling, tooling emphasis, library preferences, etc. The new syntax raised these opposing voices, but did not create them; it's only been released for two days, after all.
-
-Rather, it's more accurate to say a few pieces of shared infrastructure held opposing forces together. This is true when Reason spun off from OCaml's engineering, and true when BuckleScript entered the picture.
-
-We can't realistically always release new features that are a fusion/compromise of various philosophies, but that's exactly what we've been trying our best to do for the past few years. This syntax is a departure from that (much tighter integration with BS, more JavaScript/TypeScript-friendly philosophy, many fewer compromises, etc.). We believe that its quality so far speaks for the decisions even if its stance generated worries.
-
-Since even before the open sourcing of Reason, the team has been evaluating the proper management and division of the community. If a proper separation means each subset of the community can live more harmoniously within themselves, with less noise, while still enjoying the technical infra support we've provided and have promised to continue providing above, then we're willing to explore that possibility.
-
-Worth emphasizing for the last time: your code keeps working. Your future code will also keep working.
-
-**The new changes make me worried about the (potential lack of) the team's future support I'm going to receive.**
-
-Consider that the new syntax is written by a [community member](https://github.com/iwankaramazow/) of ours, outside of the official Reason team.
-
-This means we get back _more_, not less, time and energy that we can reinvest (thank you again, [Maxim](https://twitter.com/_binary_search)!).
-
-Consider also that with the release of this new syntax, people's entire toolchain, from BuckleScript to syntax to ReasonReact to editor tooling, has now become primarily community-owned, with much less reliance on the company (while retaining the same energy devoted to said projects by the company).
-
-We hope you can see how this is a net engineering & bus factor increase, and a good justification to keep investing into the ecosystem rather than less. Again: same amount of company engineering effort and _more_ community engineering effort, in the most prominent parts.
-
-## Conclusion
-
-Hopefully this post helped assuage certain concerns regarding future support and investment. More importantly, let's not forget to enjoy all the awesome improvements in BuckleScript 8.1; let the code speak for itself! And let's continue shipping great products!
-
-Stay tuned and let us know in the [Discourse Forum](https://forum.rescript-lang.org) what you think!
diff --git a/_blogposts/archive/2020-07-17-bucklescript-release-8-1-1.mdx b/_blogposts/archive/2020-07-17-bucklescript-release-8-1-1.mdx
deleted file mode 100644
index e05a44d49..000000000
--- a/_blogposts/archive/2020-07-17-bucklescript-release-8-1-1.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
----
-author: chenglou
-date: "2020-07-17"
-badge: release
-title: "BuckleScript 8.1.1 released"
-description: New Syntax Tweaks, Formatter and Converter
----
-
-## New Release
-
-We are happy to announce BuckleScript 8.1.1, which features syntax tweaks to the [newly released syntax](https://reasonml.org/blog/bucklescript-8-1-new-syntax) and also adds new capabilities for converting and formatting your code via the `bsc` command.
-
-There are no breaking changes. You can install it with `npm install bs-platform@8.1.1`.
-
-## Newest Syntax Tweaks
-
-Based on the [feedback thread](https://reasonml.chat/t/bucklescript-8-1-new-syntax-option) from our [previous new BuckleScript syntax announcement](https://reasonml.org/blog/bucklescript-8-1-new-syntax), we've made some tweaks:
-
-- `list[1, 2, 3]` is now `list{1, 2, 3}`.
-- `` `hello 👋 ${message}` `` quoted string now supports proper unicode and type-safe interpolation.
-
-Small changes, big difference. This release also marks our syntax's **feature freeze** for existing features: updates to the syntax in the near to medium term only be additive or contain bug fixes, no breaking changes.
-
-## A New Converter and Formatter Flag for `bsc`
-
-We added a new experimental flag `-fmt`, which allows you to format any `.res`/`.resi` file, or convert any `.re`/`.rei`/`.ml`/`.mli` file to the new syntax.
-
-**Usage:** `bsc -fmt MyFile.res` will print out the pretty printed content of `MyFile.res` to stdout.
-
-To convert any Reason or OCaml file, just pipe the output to a new `res` file: `node_modules/.bin/bsc -fmt src/Button.re > src/Button.res`
-
-Please note that this CLI flag is still experimental until we settle on the final API (e.g. we want to add support for passing additional parameters to the formatter, such as accepting stdin).
-
-We are happy for feedback! Make sure to use [this forum post](https://reasonml.chat/t/the-formatter-converter-for-the-new-syntax-is-available-for-testing/2423) for general discussions, or the [new syntax](https://github.com/BuckleScript/syntax) issue trackers for bug reports.
-
-Enjoy!
diff --git a/_blogposts/archive/2020-07-28-string-literal-types-in-reason.mdx b/_blogposts/archive/2020-07-28-string-literal-types-in-reason.mdx
deleted file mode 100644
index 618344aa4..000000000
--- a/_blogposts/archive/2020-07-28-string-literal-types-in-reason.mdx
+++ /dev/null
@@ -1,226 +0,0 @@
----
-author: hongbo
-date: "2020-07-28"
-previewImg:
-title: Introducing string literal types in BuckleScript version 8.2
-description: |
- Highlights of our newest changes to the internal representation
- and how they will benefit our users.
----
-
-
-## String literal types in BuckleScript
-
-[String literal types](https://www.typescriptlang.org/docs/handbook/advanced-types.html#string-literal-types) were introduced by TypeScript to model
-JavaScript behavior, it's a relatively new concept since most type systems are runtime encoding agnostic. However, to smooth the user experience when writing
-bindings to existing JS API, we are introducing string literal types which are unique in several behaviors compared with TypeScript: they support type inference,
-pattern matching and can be attached to data.
-
-## Vanilla string literal types
-
-The notation in Reason for string literal types is like this: \``hello`, which will be compiled into "hello".
-The difference is that \``hello` is given a type so that you can not mix it with other strings.
-
-Take the following code snippet as an example:
-
-```reasonml
-let encoding = (enc) =>
- switch (enc) {
- | `utf8 => 0
- | `ascii => 1
- | `utf16 => 2
- };
-```
-
-It will be compiled into
-
-```js
-function encoding(en) {
- if (en === "ascii") {
- return 1;
- } else if (en === "utf16") {
- return 2;
- } else {
- return 0;
- }
-}
-```
-
-If you pass a random encoding, e.g, `` encoding (`ucs32) ``, you get a type error:
-
-```
-This expression has type [> `ucs32 ]
- but an expression was expected of type [< `ascii | `utf16 | `utf8 ]
- The second variant type does not allow tag(s) `ucs32
-```
-
-Another thing you can observe from the generated JS is that since the compiler can guarantee that the input could only be `` `utf8, `ascii,`utf16 ``, it will skip the comparison with "utf8" when the first two are compared.
-
-If we add a wild card to match any encoding
-
-```reasonml
-let encoding = (enc) =>
- switch (enc) {
- | `utf8 => 0
- | `ascii => 1
- | `utf16 => 2
- | _ => 3
- };
-```
-
-It will generate JS as below:
-
-```js
-function encoding(en) {
- if (en === "utf8") {
- return 0;
- } else if (en === "ascii") {
- return 1;
- } else if (en === "utf16") {
- return 2;
- } else {
- return 3;
- }
-}
-```
-
-## Declaring types for string literal types
-
-Note that all string literal types can be inferred.
-This is very convenient for you when you are doing development. When things get more stable, it would be nice to give string literal types a name as below:
-
-```reasonml
-type utf = [
- | `utf8
- | `utf19
-];
-type ascii = [
- | `ascii
-]
-
-```
-You can also embed string literal types directly inside other types without declaring it first:
-
-```reasonml
-type t = {
- encodings : list([ | `utf8 | `ascii ])
-}
-```
-
-The cool thing is that you can create union types by simply putting the types together:
-
-```reasonml
-type encoding = [
- | utf
- | ascii
-]
-```
-
-The compiler even supports sugar over named string literal types:
-
-```reasonml
-let classify = (enc) =>
- switch (enc) {
- | #utf => "utf" // string literals belong to utf type
- | #ascii => "ascii" // string literals belog to ascii type
- };
-```
-
-The compiler would generate well optimized code as below:
-
-```js
-function classify(enc) {
- if (enc === "ascii") {
- return "ascii";
- } else {
- return "utf";
- }
-}
-```
-
-## String literal types in bindings
-
-Since string literal types are just strings after type checking, you can use them to
-bind to js libraries directly without any conversion, as follows:
-
-```reasonml
-type encoding = [
- | `hex
- | `utf8
- | `ascii
- | `latin1
- | `ucs2
- | `base64
- | `binary
- | `utf16le
-];
-
-[@bs.val] [@bs.module "fs"]
-external readFileSync: (string, encoding) => string = "readFileSync";
-```
-## String literal types attached to data
-
-Since Reason is a typed language, you can not mix data of different types in a collection.
-
-For example, you will get a type error when writing code like this: `[ 3, "3" ]`.
-
-The deep reason is that if the compiler allows you to do such things after you box different types of data in a single collection, it is hard to give such collection a type and process it later.
-
-With string literal types, you can do things like this:
-
-```reasonml
-[ 3 -> `Int , "3" -> `String ]
-```
-
-Note the generated code for `` 3 -> `Int`, "3"-> `String `` would be:
-
-```js
-{ NAME: "Int", VAL : 3}
-{ NAME: "String", VAL : "3"}
-```
-
-And you can also write code to process such collections:
-
-```reasonml
-let handle = (xs) =>
- Belt.List.map(
- xs,
- (param) => switch(param){
- | `Int(n) => n
- | `String(s) => String.length(s)
- },
- );
-```
-
-The generated code would be:
-
-```js
-function handle(xs) {
- return Belt_List.map(xs, function (param) {
- if (param.NAME === "Int") {
- return param.VAL;
- } else {
- return param.VAL.length;
- }
- });
-}
-```
-
-To conclude, string literal types give users a convenient way to mix data with different types and process it via pattern matching later.
-
-## Declaring types for string literal types attached to data
-
-Type inference is great during development. Users can also write down the formal types for string literal types attached to data:
-
-```reasonml
-type number_or_string = [
- | `Int(int)
- | `String(string)
-];
-```
-
-## Further reading
-
-Here we only cover most daily usage of string literal types.
-For more advanced usage, see [here](https://caml.inria.fr/pub/docs/manual-ocaml/lablexamples.html#s%3Apolymorphic-variants).
-The type theory is almost the same, however, we adapt it to make sure it is compiled into string literals to match the JS runtime.
diff --git a/_blogposts/archive/2020-08-03-bucklescript-release-8-2.mdx b/_blogposts/archive/2020-08-03-bucklescript-release-8-2.mdx
deleted file mode 100644
index f52104246..000000000
--- a/_blogposts/archive/2020-08-03-bucklescript-release-8-2.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
----
-author: hongbo
-date: "2020-08-03"
-badge: release
-title: "BuckleScript 8.2 released"
-description: New release 8.2
----
-
-## New Release
-
-We are happy to announce BuckleScript 8.2, which comes with a great feature: string literal types.
-
-This is an exciting feature so we wrote a [dedicated blog post](https://reasonml.org/blog/string-literal-types-in-reason) about it.
-
-Besides the exciting string literal types, this release continues to deliver better compilation performance. Some internal data structures underlying the compiler were tweaked. This led to an overall compiler memory usage reduction of about 40%.
-
-Thanks to the integration of Flow parser, we are able to make the JS interop [more safe and expressive](https://github.com/BuckleScript/bucklescript/issues/4463)
-
-
-The full changes are listed [here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md)
-
-Enjoy!
-
diff --git a/data/sidebar_manual_v1100.json b/data/sidebar_manual_v1100.json
index a7672bb98..6e6c86255 100644
--- a/data/sidebar_manual_v1100.json
+++ b/data/sidebar_manual_v1100.json
@@ -73,7 +73,6 @@
"Extra": [
"newcomer-examples",
"project-structure",
- "faq",
- "llms"
+ "faq"
]
}
\ No newline at end of file
diff --git a/data/sidebar_manual_v1200.json b/data/sidebar_manual_v1200.json
deleted file mode 100644
index 5269c67c9..000000000
--- a/data/sidebar_manual_v1200.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "Overview": [
- "introduction",
- "installation",
- "editor-plugins",
- "llms"
- ],
- "Guides": [
- "converting-from-js",
- "editor-code-analysis",
- "project-structure"
- ],
- "JavaScript Interop": [
- "interop-cheatsheet",
- "embed-raw-javascript",
- "shared-data-types",
- "external",
- "bind-to-js-object",
- "bind-to-js-function",
- "import-from-export-to-js",
- "bind-to-global-js-values",
- "json",
- "inlining-constants",
- "use-illegal-identifier-names",
- "generate-converters-accessors",
- "browser-support-polyfills",
- "libraries",
- "typescript-integration"
- ],
- "Language Features": [
- "overview",
- "let-binding",
- "type",
- "primitive-types",
- "tuple",
- "record",
- "object",
- "dict",
- "variant",
- "polymorphic-variant",
- "null-undefined-option",
- "array-and-list",
- "function",
- "control-flow",
- "pipe",
- "pattern-matching-destructuring",
- "mutation",
- "jsx",
- "exception",
- "lazy-values",
- "promise",
- "async-await",
- "tagged-templates",
- "module",
- "import-export",
- "attribute",
- "reserved-keywords",
- "equality-comparison"
- ],
- "Build System": [
- "build-overview",
- "build-configuration",
- "build-configuration-schema",
- "build-external-stdlib",
- "build-pinned-dependencies",
- "interop-with-js-build-systems",
- "build-performance",
- "warning-numbers"
- ],
- "Advanced Features": [
- "extensible-variant",
- "scoped-polymorphic-types"
- ]
-}
\ No newline at end of file
diff --git a/data/sidebar_react_latest.json b/data/sidebar_react_latest.json
index a2a47d615..758517284 100644
--- a/data/sidebar_react_latest.json
+++ b/data/sidebar_react_latest.json
@@ -31,8 +31,5 @@
"beyond-jsx",
"forwarding-refs",
"extensions-of-props"
- ],
- "Extra": [
- "llms"
]
}
\ No newline at end of file
diff --git a/data/sidebar_react_v0100.json b/data/sidebar_react_v0100.json
index 43b20d93e..b6bd3b260 100644
--- a/data/sidebar_react_v0100.json
+++ b/data/sidebar_react_v0100.json
@@ -26,8 +26,5 @@
"Guides": [
"beyond-jsx",
"forwarding-refs"
- ],
- "Extra": [
- "llms"
]
}
\ No newline at end of file
diff --git a/data/sidebar_react_v0110.json b/data/sidebar_react_v0110.json
index 0876b0888..f7e96a22c 100644
--- a/data/sidebar_react_v0110.json
+++ b/data/sidebar_react_v0110.json
@@ -27,8 +27,5 @@
"beyond-jsx",
"forwarding-refs",
"extensions-of-props"
- ],
- "Extra": [
- "llms"
]
}
\ No newline at end of file
diff --git a/next.config.mjs b/next.config.mjs
index cc964f22a..1b87186c4 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -52,7 +52,7 @@ const config = {
function mainMdxLoader(plugins) {
return [
- createLoader(function(source) {
+ createLoader(function (source) {
const result = `${source}\n\nMDXContent.frontmatter = frontmatter`;
return result;
}),
@@ -88,67 +88,59 @@ const config = {
return config;
},
async redirects() {
+ // Users browse only /docs in the {version}.rescript.org website.
+ // Otherwise they are redirected to the main website.
const redirects = [
{
- source: "/community",
- destination: "/community/overview",
- permanent: true,
- },
- {
- source: "/bucklescript-rebranding",
- destination: "/blog/bucklescript-is-rebranding",
- permanent: true,
- },
- {
- source: "/docs/manual/latest/migrate-from-bucklescript-reason",
- destination: "/docs/manual/v10.0.0/migrate-from-bucklescript-reason",
+ source: "/",
+ destination: `https://rescript-lang.org`,
permanent: true,
},
{
- source: "/docs/manual/latest/unboxed",
- destination: "/docs/manual/v10.0.0/unboxed",
+ source: "/blog",
+ destination: "https://rescript-lang.org/blog",
permanent: true,
},
{
- source: "/docs/gentype/latest/introduction",
- destination: "/docs/manual/latest/typescript-integration",
+ source: "/try",
+ destination: "https://rescript-lang.org/try",
permanent: true,
},
{
- source: "/docs/gentype/latest/getting-started",
- destination: "/docs/manual/latest/typescript-integration",
+ source: "/community",
+ destination: "https://rescript-lang.org/community",
permanent: true,
},
+ ];
+ const splatRedirects = [
{
- source: "/docs/gentype/latest/usage",
- destination: "/docs/manual/latest/typescript-integration",
+ source: "/blog/:slug*",
+ destination: "https://rescript-lang.org/blog/:slug*",
permanent: true,
},
{
- source: "/docs/gentype/latest/supported-types",
- destination: "/docs/manual/latest/typescript-integration",
+ source: "/community/:slug*",
+ destination: "https://rescript-lang.org/community/:slug*",
permanent: true,
},
- ];
- const splatRedirects = [
{
source: "/docs/manual/latest/:slug*",
- destination: `/docs/manual/${process.env.VERSION_LATEST}/:slug*`,
+ destination: `https://rescript-lang.org/docs/manual/${process.env.VERSION_LATEST}/:slug*`,
permanent: false,
},
{
source: "/docs/manual/next/:slug*",
- destination: `/docs/manual/${process.env.VERSION_NEXT}/:slug*`,
+ destination: `https://rescript-lang.org/docs/manual/${process.env.VERSION_NEXT}/:slug*`,
permanent: false,
},
{
source: "/llms/manual/latest/:file*",
- destination: `/llms/manual/${process.env.VERSION_LATEST}/:file*`,
+ destination: `https://rescript-lang.org/llms/manual/${process.env.VERSION_LATEST}/:file*`,
permanent: false,
},
{
source: "/llms/manual/next/:file*",
- destination: `/llms/manual/${process.env.VERSION_NEXT}/:file*`,
+ destination: `https://rescript-lang.org/llms/manual/${process.env.VERSION_NEXT}/:file*`,
permanent: false,
},
];
diff --git a/package-lock.json b/package-lock.json
index 39df72a89..6778f2528 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -60,7 +60,8 @@
"postcss-nesting": "^12.1.1",
"reanalyze": "^2.16.0",
"simple-functional-loader": "^1.2.1",
- "tailwindcss": "^3.3.3"
+ "tailwindcss": "^3.3.3",
+ "wrangler": "^4.26.1"
},
"engines": {
"node": ">=20"
@@ -580,6 +581,157 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@cloudflare/kv-asset-handler": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz",
+ "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "dependencies": {
+ "mime": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@cloudflare/unenv-preset": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.5.0.tgz",
+ "integrity": "sha512-CZe9B2VbjIQjBTyc+KoZcN1oUcm4T6GgCXoel9O7647djHuSRAa6sM6G+NdxWArATZgeMMbsvn9C50GCcnIatA==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "peerDependencies": {
+ "unenv": "2.0.0-rc.19",
+ "workerd": "^1.20250722.0"
+ },
+ "peerDependenciesMeta": {
+ "workerd": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-64": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250726.0.tgz",
+ "integrity": "sha512-SOpQqQ2blLY0io/vErve44vJC1M5i7RHuMBdrdEPIEtxiLBTdOOVp4nqZ3KchocxZjskgTc2N4N3b5hNYuKDGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-arm64": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250726.0.tgz",
+ "integrity": "sha512-I+TOQ+YQahxL/K7eS2GJzv5CZzSVaZoyqfB15Q71MT/+wyzPCaFDTt+fg3uXdwpaIQEMUfqFNpTQSqbKHAYNgA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-64": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250726.0.tgz",
+ "integrity": "sha512-WSCv4o2uOW6b++ROVazrEW+jjZdBqCmXmmt7uVVfvjVxlzoYVwK9IvV2IXe4gsJ99HG9I0YCa7AT743cZ7TNNg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-arm64": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250726.0.tgz",
+ "integrity": "sha512-jNokAGL3EQqH+31b0dX8+tlbKdjt/0UtTLvgD1e+7bOD92lzjYMa/CixHyMIY/FVvhsN4TNqfiz4cqroABTlhg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-windows-64": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250726.0.tgz",
+ "integrity": "sha512-DiPTY63TNh6/ylvfutNQzYZi688x6NJDjQoqf5uiCp7xHweWx+GpVs42sZPeeXqCNvhm4dYjHjuigXJNh7t8Uw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@csstools/color-helpers": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
@@ -787,3078 +939,2678 @@
"tslib": "^2.4.0"
}
},
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
- "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz",
+ "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==",
"cpu": [
- "x64"
+ "ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "linux"
+ "aix"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "peer": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz",
+ "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
- "peer": true,
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz",
+ "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "peer": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz",
+ "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "peer": true,
- "dependencies": {
- "ms": "2.1.2"
- },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz",
+ "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "peer": true
- },
- "node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
- "peer": true,
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz",
+ "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz",
- "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@floating-ui/utils": "^0.2.9"
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/dom": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz",
- "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz",
+ "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@floating-ui/core": "^1.7.1",
- "@floating-ui/utils": "^0.2.9"
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/react": {
- "version": "0.26.28",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
- "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/react-dom": "^2.1.2",
- "@floating-ui/utils": "^0.2.8",
- "tabbable": "^6.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.3.tgz",
- "integrity": "sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/dom": "^1.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
- "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
- "license": "MIT"
- },
- "node_modules/@headlessui/react": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.4.tgz",
- "integrity": "sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/react": "^0.26.16",
- "@react-aria/focus": "^3.20.2",
- "@react-aria/interactions": "^3.25.0",
- "@tanstack/react-virtual": "^3.13.9",
- "use-sync-external-store": "^1.5.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "react": "^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^18 || ^19 || ^19.0.0-rc"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "peer": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "peer": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "peer": true
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "peer": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "peer": true
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz",
- "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==",
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz",
+ "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==",
"cpu": [
- "arm64"
+ "arm"
],
- "license": "Apache-2.0",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.1.0"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz",
- "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz",
+ "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==",
"cpu": [
- "x64"
+ "arm64"
],
- "license": "Apache-2.0",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.1.0"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz",
- "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz",
+ "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==",
"cpu": [
- "arm64"
+ "ia32"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz",
- "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz",
+ "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==",
"cpu": [
- "x64"
+ "loong64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz",
- "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz",
+ "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==",
"cpu": [
- "arm"
+ "mips64el"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz",
- "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz",
+ "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==",
"cpu": [
- "arm64"
+ "ppc64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz",
- "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz",
+ "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==",
"cpu": [
- "ppc64"
+ "riscv64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz",
- "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz",
+ "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==",
"cpu": [
"s390x"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz",
- "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz",
+ "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==",
"cpu": [
"x64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz",
- "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==",
"cpu": [
"arm64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "netbsd"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz",
- "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==",
"cpu": [
"x64"
],
- "license": "LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "netbsd"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz",
- "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz",
- "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==",
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==",
"cpu": [
"arm64"
],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz",
- "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "openbsd"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.1.0"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz",
- "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==",
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==",
"cpu": [
"x64"
],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz",
- "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "openbsd"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.1.0"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz",
- "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==",
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz",
+ "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==",
"cpu": [
"x64"
],
- "license": "Apache-2.0",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz",
- "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==",
- "cpu": [
- "wasm32"
+ "sunos"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.4.3"
- },
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz",
- "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==",
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz",
+ "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==",
"cpu": [
"arm64"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz",
- "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==",
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz",
+ "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==",
"cpu": [
"ia32"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node": ">=18"
}
},
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz",
- "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==",
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz",
+ "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==",
"cpu": [
"x64"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "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",
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "peer": true,
"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"
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": ">=12"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "peer": true,
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "license": "MIT",
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
"engines": {
- "node": ">=12"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/@isaacs/cliui/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",
+ "node_modules/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
+ "node_modules/@eslint/eslintrc/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "peer": true,
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/@isaacs/cliui/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,
+ "node_modules/@floating-ui/core": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz",
+ "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",
"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"
+ "@floating-ui/utils": "^0.2.9"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "node_modules/@floating-ui/dom": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz",
+ "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",
+ "license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "engines": {
- "node": ">=6.0.0"
+ "@floating-ui/core": "^1.7.1",
+ "@floating-ui/utils": "^0.2.9"
}
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "devOptional": true,
- "peer": true,
+ "node_modules/@floating-ui/react": {
+ "version": "0.26.28",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+ "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+ "license": "MIT",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
+ "@floating-ui/react-dom": "^2.1.2",
+ "@floating-ui/utils": "^0.2.8",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.3.tgz",
+ "integrity": "sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==",
+ "license": "MIT",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
},
- "node_modules/@mdx-js/loader": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.0.tgz",
- "integrity": "sha512-xU/lwKdOyfXtQGqn3VnJjlDrmKXEvMi1mgYxVmukEUtVycIz1nh7oQ40bKTd4cA7rLStqu0740pnhGYxGoqsCg==",
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
+ "license": "MIT"
+ },
+ "node_modules/@headlessui/react": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.4.tgz",
+ "integrity": "sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA==",
"license": "MIT",
"dependencies": {
- "@mdx-js/mdx": "^3.0.0",
- "source-map": "^0.7.0"
+ "@floating-ui/react": "^0.26.16",
+ "@react-aria/focus": "^3.20.2",
+ "@react-aria/interactions": "^3.25.0",
+ "@tanstack/react-virtual": "^3.13.9",
+ "use-sync-external-store": "^1.5.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "engines": {
+ "node": ">=10"
},
"peerDependencies": {
- "webpack": ">=5"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- }
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^18 || ^19 || ^19.0.0-rc"
}
},
- "node_modules/@mdx-js/mdx": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
- "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
- "license": "MIT",
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "peer": true,
"dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdx": "^2.0.0",
- "collapse-white-space": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-util-scope": "^1.0.0",
- "estree-walker": "^3.0.0",
- "hast-util-to-jsx-runtime": "^2.0.0",
- "markdown-extensions": "^2.0.0",
- "recma-build-jsx": "^1.0.0",
- "recma-jsx": "^1.0.0",
- "recma-stringify": "^1.0.0",
- "rehype-recma": "^1.0.0",
- "remark-mdx": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.0.0",
- "source-map": "^0.7.0",
- "unified": "^11.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "engines": {
+ "node": ">=10.10.0"
}
},
- "node_modules/@mdx-js/mdx/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "license": "MIT",
+ "node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"dependencies": {
- "@types/unist": "*"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@mdx-js/mdx/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
- },
- "node_modules/@mdx-js/mdx/node_modules/estree-util-is-identifier-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
- "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/@humanwhocodes/config-array/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
},
- "node_modules/@mdx-js/mdx/node_modules/unist-util-is": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
- "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "peer": true,
+ "engines": {
+ "node": ">=12.22"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
- "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "peer": true
},
- "node_modules/@mdx-js/react": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz",
- "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==",
- "dev": true,
- "dependencies": {
- "@types/mdx": "^2.0.0",
- "@types/react": ">=16"
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz",
+ "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://opencollective.com/libvips"
},
- "peerDependencies": {
- "react": ">=16"
- }
- },
- "node_modules/@next/env": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz",
- "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "13.4.12",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.12.tgz",
- "integrity": "sha512-6rhK9CdxEgj/j1qvXIyLTWEaeFv7zOK8yJMulz3Owel0uek0U9MJCGzmKgYxM3aAUBo3gKeywCZKyQnJKto60A==",
- "dependencies": {
- "glob": "7.1.7"
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.1.0"
}
},
- "node_modules/@next/eslint-plugin-next/node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz",
+ "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "*"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.1.0"
}
},
- "node_modules/@next/swc-darwin-arm64": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz",
- "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==",
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz",
+ "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
"cpu": [
"arm64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-darwin-x64": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz",
- "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==",
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz",
+ "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
"cpu": [
"x64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz",
- "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==",
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz",
+ "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
"cpu": [
- "arm64"
+ "arm"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz",
- "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==",
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz",
+ "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
"cpu": [
"arm64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz",
- "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==",
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz",
+ "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
"cpu": [
- "x64"
+ "ppc64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz",
- "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==",
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz",
+ "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz",
+ "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
"cpu": [
"x64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz",
- "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==",
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz",
+ "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
"cpu": [
"arm64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
- "win32"
+ "linux"
],
- "engines": {
- "node": ">= 10"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.3.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz",
- "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==",
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz",
+ "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
"cpu": [
"x64"
],
- "license": "MIT",
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
- "win32"
+ "linux"
],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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",
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz",
+ "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
"optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=14"
- }
- },
- "node_modules/@pkgr/utils": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
- "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "fast-glob": "^3.3.0",
- "is-glob": "^4.0.3",
- "open": "^9.1.0",
- "picocolors": "^1.0.0",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "url": "https://opencollective.com/unts"
- }
- },
- "node_modules/@react-aria/focus": {
- "version": "3.20.5",
- "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.5.tgz",
- "integrity": "sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@react-aria/interactions": "^3.25.3",
- "@react-aria/utils": "^3.29.1",
- "@react-types/shared": "^3.30.0",
- "@swc/helpers": "^0.5.0",
- "clsx": "^2.0.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
- }
- },
- "node_modules/@react-aria/interactions": {
- "version": "3.25.3",
- "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.3.tgz",
- "integrity": "sha512-J1bhlrNtjPS/fe5uJQ+0c7/jiXniwa4RQlP+Emjfc/iuqpW2RhbF9ou5vROcLzWIyaW8tVMZ468J68rAs/aZ5A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@react-aria/ssr": "^3.9.9",
- "@react-aria/utils": "^3.29.1",
- "@react-stately/flags": "^3.1.2",
- "@react-types/shared": "^3.30.0",
- "@swc/helpers": "^0.5.0"
+ "url": "https://opencollective.com/libvips"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.1.0"
}
},
- "node_modules/@react-aria/ssr": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.9.tgz",
- "integrity": "sha512-2P5thfjfPy/np18e5wD4WPt8ydNXhij1jwA8oehxZTFqlgVMGXzcWKxTb4RtJrLFsqPO7RUQTiY8QJk0M4Vy2g==",
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz",
+ "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==",
+ "cpu": [
+ "arm64"
+ ],
"license": "Apache-2.0",
- "dependencies": {
- "@swc/helpers": "^0.5.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 12"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
- }
- },
- "node_modules/@react-aria/utils": {
- "version": "3.29.1",
- "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.29.1.tgz",
- "integrity": "sha512-yXMFVJ73rbQ/yYE/49n5Uidjw7kh192WNN9PNQGV0Xoc7EJUlSOxqhnpHmYTyO0EotJ8fdM1fMH8durHjUSI8g==",
- "license": "Apache-2.0",
- "dependencies": {
- "@react-aria/ssr": "^3.9.9",
- "@react-stately/flags": "^3.1.2",
- "@react-stately/utils": "^3.10.7",
- "@react-types/shared": "^3.30.0",
- "@swc/helpers": "^0.5.0",
- "clsx": "^2.0.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
- }
- },
- "node_modules/@react-stately/flags": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz",
- "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/helpers": "^0.5.0"
- }
- },
- "node_modules/@react-stately/utils": {
- "version": "3.10.7",
- "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.7.tgz",
- "integrity": "sha512-cWvjGAocvy4abO9zbr6PW6taHgF24Mwy/LbQ4TC4Aq3tKdKDntxyD+sh7AkSRfJRT2ccMVaHVv2+FfHThd3PKQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/helpers": "^0.5.0"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
- }
- },
- "node_modules/@react-types/shared": {
- "version": "3.30.0",
- "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.30.0.tgz",
- "integrity": "sha512-COIazDAx1ncDg046cTJ8SFYsX8aS3lB/08LDnbkH/SkdYrFPWDlXMrO/sUam8j1WWM+PJ+4d1mj7tODIKNiFog==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.1.0"
}
},
- "node_modules/@rescript/darwin-arm64": {
- "version": "12.0.0-alpha.14",
- "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.0.0-alpha.14.tgz",
- "integrity": "sha512-yrScC0FvAjQ2B1EnC8EbwRZX8tTEtyiRXLNCOlqOPcmTKXBr7KHknV2MsKqsn4kgmm29/ERZ0zyP4xHh2ookAw==",
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz",
+ "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==",
"cpu": [
- "arm64"
+ "s390x"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
"engines": {
- "node": ">=20.11.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.1.0"
}
},
- "node_modules/@rescript/darwin-x64": {
- "version": "12.0.0-alpha.14",
- "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.0.0-alpha.14.tgz",
- "integrity": "sha512-O2pyYtyZFfPXq4U5PCe0hwAdQwdAjjQMY0rAoAqcoI/DIcRIpEc4y/7z6rK9Izig4qBZuQl0z33KKAYPuq6l5g==",
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz",
+ "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==",
"cpu": [
"x64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
"engines": {
- "node": ">=20.11.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.1.0"
}
},
- "node_modules/@rescript/linux-arm64": {
- "version": "12.0.0-alpha.14",
- "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.0.0-alpha.14.tgz",
- "integrity": "sha512-pd3LKwojp02wrq9x32ALiIMlfbcTYedQahiaLCIPLVhOb03YEANd1NHwEyyqm81LdpIK190yA3yiJ3Mi1afWFA==",
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz",
+ "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==",
"cpu": [
"arm64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=20.11.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.1.0"
}
},
- "node_modules/@rescript/linux-x64": {
- "version": "12.0.0-alpha.14",
- "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.0.0-alpha.14.tgz",
- "integrity": "sha512-vgXn4WiP1JJVvzGxWihxUPfiCYp8y5uvBO/DxDh+yQ2hivkZYkxTQjG6psd9oRbtoY2OPxl7J9S/7abhUznAOQ==",
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz",
+ "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==",
"cpu": [
"x64"
],
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=20.11.0"
- }
- },
- "node_modules/@rescript/react": {
- "version": "0.14.0-rc.1",
- "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.14.0-rc.1.tgz",
- "integrity": "sha512-bRmcZw90OCmi97J9hj/42hsEGzsS9laLlcQP8ntanWJc8AjTOCfRj1WstDLwvCzt1lacd0/u3ZhLyIZJchzIuQ==",
- "license": "MIT",
- "peerDependencies": {
- "react": ">=19.0.0",
- "react-dom": ">=19.0.0"
- }
- },
- "node_modules/@rescript/webapi": {
- "version": "0.1.0-experimental-03eae8b",
- "resolved": "https://registry.npmjs.org/@rescript/webapi/-/webapi-0.1.0-experimental-03eae8b.tgz",
- "integrity": "sha512-0McQ9XQlbF+/BWs70P2XJZ3wP6us7/HnNWAFnDYSnA9+Rvp6IQAuKCXfhbqJgTIge4YfiY5j+SqDt+OLfsSUTA==",
- "license": "MIT",
- "dependencies": {
- "rescript": "^12.0.0-alpha.13"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.1.0"
}
},
- "node_modules/@rescript/win32-x64": {
- "version": "12.0.0-alpha.14",
- "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.0.0-alpha.14.tgz",
- "integrity": "sha512-iEnGhXiJhb7Nf8d6QDswCMlEubeh/YO4I5e022u4lm1t9aaBw/r89flDRsewe4b49i6KkSuoWzNG1uFtxIEwdA==",
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz",
+ "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==",
"cpu": [
- "x64"
+ "wasm32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.4.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz",
+ "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==",
+ "cpu": [
+ "arm64"
],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=20.11.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz",
- "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw=="
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz",
+ "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "license": "Apache-2.0"
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.34.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz",
+ "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@swc/helpers": {
- "version": "0.5.17",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
- "license": "Apache-2.0",
+ "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": {
- "tslib": "^2.8.0"
+ "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/@tanstack/react-virtual": {
- "version": "3.13.10",
- "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.10.tgz",
- "integrity": "sha512-nvrzk4E9mWB4124YdJ7/yzwou7IfHxlSef6ugCFcBfRmsnsma3heciiiV97sBNxyc3VuwtZvmwXd0aB5BpucVw==",
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@tanstack/virtual-core": "3.13.10"
+ "engines": {
+ "node": ">=12"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/@tanstack/virtual-core": {
- "version": "3.13.10",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.10.tgz",
- "integrity": "sha512-sPEDhXREou5HyZYqSWIqdU580rsF6FGeN7vpzijmP3KTiOGjOMZASz4Y6+QKjiFQwhWrR58OP8izYaNGVxvViA==",
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
"license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "node_modules/@isaacs/cliui/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": ">=10.13.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@types/acorn": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
- "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "*"
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/@types/debug": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
- "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
+ "node_modules/@isaacs/cliui/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": {
- "@types/ms": "*"
+ "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/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "license": "MIT"
- },
- "node_modules/@types/estree-jsx": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz",
- "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dependencies": {
- "@types/estree": "*"
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
- },
- "node_modules/@types/mdx": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz",
- "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg=="
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "node_modules/@types/ms": {
- "version": "0.7.31",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
- "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "node_modules/@types/node": {
- "version": "20.12.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
- "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"devOptional": true,
"peer": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
}
},
- "node_modules/@types/prop-types": {
- "version": "15.7.5",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
- "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
- "node_modules/@types/react": {
- "version": "18.0.15",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz",
- "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==",
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
- },
- "node_modules/@types/unist": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz",
- "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g=="
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
- "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "node_modules/@mdx-js/loader": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.0.tgz",
+ "integrity": "sha512-xU/lwKdOyfXtQGqn3VnJjlDrmKXEvMi1mgYxVmukEUtVycIz1nh7oQ40bKTd4cA7rLStqu0740pnhGYxGoqsCg==",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "@mdx-js/mdx": "^3.0.0",
+ "source-map": "^0.7.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "url": "https://opencollective.com/unified"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "webpack": ">=5"
},
"peerDependenciesMeta": {
- "typescript": {
+ "webpack": {
"optional": true
}
}
},
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/@mdx-js/mdx": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
+ "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdx": "^2.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-util-scope": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "markdown-extensions": "^2.0.0",
+ "recma-build-jsx": "^1.0.0",
+ "recma-jsx": "^1.0.0",
+ "recma-stringify": "^1.0.0",
+ "rehype-recma": "^1.0.0",
+ "remark-mdx": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "source-map": "^0.7.0",
+ "unified": "^11.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/@typescript-eslint/parser/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "node_modules/@mdx-js/mdx/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "node_modules/@mdx-js/mdx/node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@mdx-js/mdx/node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/@mdx-js/mdx/node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/@mdx-js/react": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz",
+ "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==",
+ "dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "@types/mdx": "^2.0.0",
+ "@types/react": ">=16"
},
- "engines": {
- "node": ">=6.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "peerDependencies": {
+ "react": ">=16"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "node_modules/@next/env": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz",
+ "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==",
+ "license": "MIT"
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "13.4.12",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.12.tgz",
+ "integrity": "sha512-6rhK9CdxEgj/j1qvXIyLTWEaeFv7zOK8yJMulz3Owel0uek0U9MJCGzmKgYxM3aAUBo3gKeywCZKyQnJKto60A==",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/eslint-plugin-next/node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "*"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
- },
- "node_modules/@webassemblyjs/ast": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
- "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
- "devOptional": true,
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz",
+ "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==",
+ "cpu": [
+ "arm64"
+ ],
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
- "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "devOptional": true,
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz",
+ "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==",
+ "cpu": [
+ "x64"
+ ],
"license": "MIT",
- "peer": true
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
},
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
- "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "devOptional": true,
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz",
+ "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==",
+ "cpu": [
+ "arm64"
+ ],
"license": "MIT",
- "peer": true
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
},
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
- "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
- "devOptional": true,
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz",
+ "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==",
+ "cpu": [
+ "arm64"
+ ],
"license": "MIT",
- "peer": true
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
},
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
- "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
- "devOptional": true,
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz",
+ "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==",
+ "cpu": [
+ "x64"
+ ],
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.13.2",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@xtuc/long": "4.2.2"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
- "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
- "devOptional": true,
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz",
+ "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==",
+ "cpu": [
+ "x64"
+ ],
"license": "MIT",
- "peer": true
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
},
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
- "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
- "devOptional": true,
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz",
+ "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==",
+ "cpu": [
+ "arm64"
+ ],
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/wasm-gen": "1.14.1"
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
- "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
- "devOptional": true,
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "15.3.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz",
+ "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==",
+ "cpu": [
+ "x64"
+ ],
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
- "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
- "devOptional": true,
- "license": "Apache-2.0",
- "peer": true,
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dependencies": {
- "@xtuc/long": "4.2.2"
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
- "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "devOptional": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
- "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
- "devOptional": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/helper-wasm-section": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-opt": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1",
- "@webassemblyjs/wast-printer": "1.14.1"
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
- "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
- "devOptional": true,
- "license": "MIT",
- "peer": true,
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
- "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
- "devOptional": true,
+ "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",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1"
+ "optional": true,
+ "engines": {
+ "node": ">=14"
}
},
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
- "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
- "devOptional": true,
- "license": "MIT",
- "peer": true,
+ "node_modules/@pkgr/utils": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz",
+ "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
"dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
+ "cross-spawn": "^7.0.3",
+ "fast-glob": "^3.3.0",
+ "is-glob": "^4.0.3",
+ "open": "^9.1.0",
+ "picocolors": "^1.0.0",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
}
},
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
- "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
- "devOptional": true,
+ "node_modules/@poppinss/colors": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.5.tgz",
+ "integrity": "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@xtuc/long": "4.2.2"
+ "kleur": "^4.1.5"
}
},
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "devOptional": true,
- "license": "BSD-3-Clause",
- "peer": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "devOptional": true,
- "license": "Apache-2.0",
- "peer": true
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "node_modules/@poppinss/dumper": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.4.tgz",
+ "integrity": "sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
+ "@poppinss/colors": "^4.1.5",
+ "@sindresorhus/is": "^7.0.2",
+ "supports-color": "^10.0.0"
}
},
- "node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "node_modules/@poppinss/dumper/node_modules/supports-color": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz",
+ "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==",
+ "dev": true,
"license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
"engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "devOptional": true,
- "peer": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/agent-base": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
- "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "node_modules/@poppinss/exception": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.2.tgz",
+ "integrity": "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
+ "license": "MIT"
},
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "node_modules/@react-aria/focus": {
+ "version": "3.20.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.5.tgz",
+ "integrity": "sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==",
+ "license": "Apache-2.0",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "@react-aria/interactions": "^3.25.3",
+ "@react-aria/utils": "^3.29.1",
+ "@react-types/shared": "^3.30.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "devOptional": true,
- "peer": true,
"peerDependencies": {
- "ajv": "^6.9.1"
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
}
},
- "node_modules/algoliasearch": {
- "version": "5.29.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.29.0.tgz",
- "integrity": "sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==",
- "license": "MIT",
+ "node_modules/@react-aria/interactions": {
+ "version": "3.25.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.3.tgz",
+ "integrity": "sha512-J1bhlrNtjPS/fe5uJQ+0c7/jiXniwa4RQlP+Emjfc/iuqpW2RhbF9ou5vROcLzWIyaW8tVMZ468J68rAs/aZ5A==",
+ "license": "Apache-2.0",
"dependencies": {
- "@algolia/client-abtesting": "5.29.0",
- "@algolia/client-analytics": "5.29.0",
- "@algolia/client-common": "5.29.0",
- "@algolia/client-insights": "5.29.0",
- "@algolia/client-personalization": "5.29.0",
- "@algolia/client-query-suggestions": "5.29.0",
- "@algolia/client-search": "5.29.0",
- "@algolia/ingestion": "1.29.0",
- "@algolia/monitoring": "1.29.0",
- "@algolia/recommend": "5.29.0",
- "@algolia/requester-browser-xhr": "5.29.0",
- "@algolia/requester-fetch": "5.29.0",
- "@algolia/requester-node-http": "5.29.0"
+ "@react-aria/ssr": "^3.9.9",
+ "@react-aria/utils": "^3.29.1",
+ "@react-stately/flags": "^3.1.2",
+ "@react-types/shared": "^3.30.0",
+ "@swc/helpers": "^0.5.0"
},
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "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==",
- "engines": {
- "node": ">=8"
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
}
},
- "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==",
+ "node_modules/@react-aria/ssr": {
+ "version": "3.9.9",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.9.tgz",
+ "integrity": "sha512-2P5thfjfPy/np18e5wD4WPt8ydNXhij1jwA8oehxZTFqlgVMGXzcWKxTb4RtJrLFsqPO7RUQTiY8QJk0M4Vy2g==",
+ "license": "Apache-2.0",
"dependencies": {
- "color-convert": "^2.0.1"
+ "@swc/helpers": "^0.5.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 12"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
}
},
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
+ "node_modules/@react-aria/utils": {
+ "version": "3.29.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.29.1.tgz",
+ "integrity": "sha512-yXMFVJ73rbQ/yYE/49n5Uidjw7kh192WNN9PNQGV0Xoc7EJUlSOxqhnpHmYTyO0EotJ8fdM1fMH8durHjUSI8g==",
+ "license": "Apache-2.0",
"dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "@react-aria/ssr": "^3.9.9",
+ "@react-stately/flags": "^3.1.2",
+ "@react-stately/utils": "^3.10.7",
+ "@react-types/shared": "^3.30.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
},
- "engines": {
- "node": ">= 8"
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
}
},
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "peer": true
- },
- "node_modules/aria-query": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "node_modules/@react-stately/flags": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz",
+ "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==",
+ "license": "Apache-2.0",
"dependencies": {
- "dequal": "^2.0.3"
+ "@swc/helpers": "^0.5.0"
}
},
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "node_modules/@react-stately/utils": {
+ "version": "3.10.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.7.tgz",
+ "integrity": "sha512-cWvjGAocvy4abO9zbr6PW6taHgF24Mwy/LbQ4TC4Aq3tKdKDntxyD+sh7AkSRfJRT2ccMVaHVv2+FfHThd3PKQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
}
},
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ "node_modules/@react-types/shared": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.30.0.tgz",
+ "integrity": "sha512-COIazDAx1ncDg046cTJ8SFYsX8aS3lB/08LDnbkH/SkdYrFPWDlXMrO/sUam8j1WWM+PJ+4d1mj7tODIKNiFog==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
},
- "node_modules/array-includes": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
- "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
- },
+ "node_modules/@rescript/darwin-arm64": {
+ "version": "12.0.0-alpha.14",
+ "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.0.0-alpha.14.tgz",
+ "integrity": "sha512-yrScC0FvAjQ2B1EnC8EbwRZX8tTEtyiRXLNCOlqOPcmTKXBr7KHknV2MsKqsn4kgmm29/ERZ0zyP4xHh2ookAw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=20.11.0"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "node_modules/@rescript/darwin-x64": {
+ "version": "12.0.0-alpha.14",
+ "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.0.0-alpha.14.tgz",
+ "integrity": "sha512-O2pyYtyZFfPXq4U5PCe0hwAdQwdAjjQMY0rAoAqcoI/DIcRIpEc4y/7z6rK9Izig4qBZuQl0z33KKAYPuq6l5g==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=20.11.0"
}
},
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz",
- "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
- },
+ "node_modules/@rescript/linux-arm64": {
+ "version": "12.0.0-alpha.14",
+ "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.0.0-alpha.14.tgz",
+ "integrity": "sha512-pd3LKwojp02wrq9x32ALiIMlfbcTYedQahiaLCIPLVhOb03YEANd1NHwEyyqm81LdpIK190yA3yiJ3Mi1afWFA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=20.11.0"
}
},
- "node_modules/array.prototype.flat": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
+ "node_modules/@rescript/linux-x64": {
+ "version": "12.0.0-alpha.14",
+ "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.0.0-alpha.14.tgz",
+ "integrity": "sha512-vgXn4WiP1JJVvzGxWihxUPfiCYp8y5uvBO/DxDh+yQ2hivkZYkxTQjG6psd9oRbtoY2OPxl7J9S/7abhUznAOQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=20.11.0"
}
},
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "node_modules/@rescript/react": {
+ "version": "0.14.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.14.0-rc.1.tgz",
+ "integrity": "sha512-bRmcZw90OCmi97J9hj/42hsEGzsS9laLlcQP8ntanWJc8AjTOCfRj1WstDLwvCzt1lacd0/u3ZhLyIZJchzIuQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=19.0.0",
+ "react-dom": ">=19.0.0"
+ }
+ },
+ "node_modules/@rescript/webapi": {
+ "version": "0.1.0-experimental-03eae8b",
+ "resolved": "https://registry.npmjs.org/@rescript/webapi/-/webapi-0.1.0-experimental-03eae8b.tgz",
+ "integrity": "sha512-0McQ9XQlbF+/BWs70P2XJZ3wP6us7/HnNWAFnDYSnA9+Rvp6IQAuKCXfhbqJgTIge4YfiY5j+SqDt+OLfsSUTA==",
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
+ "rescript": "^12.0.0-alpha.13"
+ }
+ },
+ "node_modules/@rescript/win32-x64": {
+ "version": "12.0.0-alpha.14",
+ "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.0.0-alpha.14.tgz",
+ "integrity": "sha512-iEnGhXiJhb7Nf8d6QDswCMlEubeh/YO4I5e022u4lm1t9aaBw/r89flDRsewe4b49i6KkSuoWzNG1uFtxIEwdA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=20.11.0"
}
},
- "node_modules/array.prototype.reduce": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz",
- "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
- },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz",
+ "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw=="
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.2.tgz",
+ "integrity": "sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=18"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
- "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "node_modules/@speed-highlight/core": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.7.tgz",
+ "integrity": "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
+ "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+ "license": "Apache-2.0",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
+ "tslib": "^2.8.0"
}
},
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
- "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+ "node_modules/@tanstack/react-virtual": {
+ "version": "3.13.10",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.10.tgz",
+ "integrity": "sha512-nvrzk4E9mWB4124YdJ7/yzwou7IfHxlSef6ugCFcBfRmsnsma3heciiiV97sBNxyc3VuwtZvmwXd0aB5BpucVw==",
+ "license": "MIT",
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
+ "@tanstack/virtual-core": "3.13.10"
},
- "engines": {
- "node": ">= 0.4"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
},
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@tanstack/virtual-core": {
+ "version": "3.13.10",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.10.tgz",
+ "integrity": "sha512-sPEDhXREou5HyZYqSWIqdU580rsF6FGeN7vpzijmP3KTiOGjOMZASz4Y6+QKjiFQwhWrR58OP8izYaNGVxvViA==",
+ "license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
}
},
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dependencies": {
- "safer-buffer": "~2.1.0"
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "engines": {
- "node": ">=0.8"
+ "node_modules/@types/acorn": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+ "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "dependencies": {
+ "@types/estree": "*"
}
},
- "node_modules/ast-types-flow": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
- "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
- },
- "node_modules/astring": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
- "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
- "bin": {
- "astring": "bin/astring"
+ "node_modules/@types/debug": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
+ "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
+ "dependencies": {
+ "@types/ms": "*"
}
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "license": "MIT"
},
- "node_modules/autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- }
- ],
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz",
+ "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==",
"dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
+ "@types/estree": "*"
}
},
- "node_modules/available-typed-arrays": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "devOptional": true,
+ "peer": true
},
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "engines": {
- "node": "*"
- }
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
},
- "node_modules/aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ "node_modules/@types/mdx": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz",
+ "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg=="
},
- "node_modules/axe-core": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz",
- "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==",
- "engines": {
- "node": ">=4"
- }
+ "node_modules/@types/ms": {
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
- "node_modules/axobject-query": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
- "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "node_modules/@types/node": {
+ "version": "20.12.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
+ "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
+ "devOptional": true,
+ "peer": true,
"dependencies": {
- "dequal": "^2.0.3"
- }
- },
- "node_modules/bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "undici-types": "~5.26.4"
}
},
- "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=="
- },
- "node_modules/batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
},
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "node_modules/@types/react": {
+ "version": "18.0.15",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz",
+ "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==",
"dependencies": {
- "tweetnacl": "^0.14.3"
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
}
},
- "node_modules/big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
- "engines": {
- "node": ">=0.6"
- }
+ "node_modules/@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
},
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
+ "node_modules/@types/unist": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz",
+ "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g=="
},
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ },
"engines": {
- "node": ">=8"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/body-parser": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "node_modules/@typescript-eslint/parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.13.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
+ "node_modules/@typescript-eslint/parser/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/bplist-parser": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
- "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
"dependencies": {
- "big-integer": "^1.6.44"
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
},
"engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dependencies": {
- "fill-range": "^7.1.1"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/browserslist": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
- "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
- "devOptional": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "caniuse-lite": "^1.0.30001669",
- "electron-to-chromium": "^1.5.41",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
"engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/bundle-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
- "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
"dependencies": {
- "run-applescript": "^5.0.0"
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
},
"engines": {
- "node": ">=12"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "streamsearch": "^1.1.0"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">=10.16.0"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "engines": {
- "node": ">= 0.8"
- }
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
"dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "devOptional": true,
+ "license": "MIT",
"peer": true,
- "engines": {
- "node": ">=6"
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true
},
- "node_modules/caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dev": true,
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001686",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz",
- "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true
},
- "node_modules/ccount": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
}
},
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "@xtuc/ieee754": "^1.2.0"
}
},
- "node_modules/character-entities": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/character-entities-html4": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
- "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true
},
- "node_modules/character-entities-legacy": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
- "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-opt": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1",
+ "@webassemblyjs/wast-printer": "1.14.1"
}
},
- "node_modules/character-reference-invalid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
- "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
}
},
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+ "devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
}
},
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
}
},
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"devOptional": true,
+ "license": "MIT",
"peer": true,
- "engines": {
- "node": ">=6.0"
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "devOptional": true,
+ "license": "BSD-3-Clause",
+ "peer": true
},
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "peer": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "node_modules/clsx": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=0.4.0"
}
},
- "node_modules/codemirror": {
- "version": "5.65.14",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.14.tgz",
- "integrity": "sha512-VSNugIBDGt0OU9gDjeVr6fNkoFQznrWEUdAApMlXQNbfE8gGO19776D6MwSqF/V/w/sDwonsQ0z7KmmI9guScg=="
- },
- "node_modules/collapse-white-space": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
- "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "devOptional": true,
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^8"
}
},
- "node_modules/color": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "engines": {
- "node": ">=12.5.0"
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "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==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=7.0.0"
+ "node": ">=0.4.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=="
- },
- "node_modules/color-string": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
+ "engines": {
+ "node": ">= 14"
}
},
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
- },
- "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==",
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dependencies": {
- "delayed-stream": "~1.0.0"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/comma-separated-tokens": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
- "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "devOptional": true,
+ "peer": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
},
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "node_modules/algoliasearch": {
+ "version": "5.29.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.29.0.tgz",
+ "integrity": "sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==",
+ "license": "MIT",
"dependencies": {
- "safe-buffer": "5.2.1"
+ "@algolia/client-abtesting": "5.29.0",
+ "@algolia/client-analytics": "5.29.0",
+ "@algolia/client-common": "5.29.0",
+ "@algolia/client-insights": "5.29.0",
+ "@algolia/client-personalization": "5.29.0",
+ "@algolia/client-query-suggestions": "5.29.0",
+ "@algolia/client-search": "5.29.0",
+ "@algolia/ingestion": "1.29.0",
+ "@algolia/monitoring": "1.29.0",
+ "@algolia/recommend": "5.29.0",
+ "@algolia/requester-browser-xhr": "5.29.0",
+ "@algolia/requester-fetch": "5.29.0",
+ "@algolia/requester-node-http": "5.29.0"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 14.0.0"
}
},
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "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==",
"engines": {
- "node": ">= 0.6"
+ "node": ">=8"
}
},
- "node_modules/cookie": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
- "license": "MIT",
+ "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==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
- "node_modules/css-declaration-sorter": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
- "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
- "dev": true,
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.9"
- }
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
},
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "peer": true
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
+ "dequal": "^2.0.3"
}
},
- "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,
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
"dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
},
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/fb55"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
- "node_modules/cssnano": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
- "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
- "dev": true,
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz",
+ "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==",
"dependencies": {
- "cssnano-preset-default": "^6.0.1",
- "lilconfig": "^2.1.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/cssnano-preset-default": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
- "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
- "dev": true,
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^9.0.0",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.1",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "postcss": "^8.2.15"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "postcss": "^8.2.15"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dev": true,
+ "node_modules/array.prototype.reduce": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz",
+ "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==",
"dependencies": {
- "css-tree": "~2.2.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-array-method-boxes-properly": "^1.0.0",
+ "is-string": "^1.0.7"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dev": true,
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
"dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
}
},
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.5.0.tgz",
- "integrity": "sha512-/7gw8TGrvH/0g564EnhgFZogTMVe+lifpB7LWU+PEsiq5o83TUXR3fDbzTRXOJhoJwck5IS9ez3Em5LNMMO2aw==",
- "dev": true,
- "license": "MIT",
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
+ "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
"dependencies": {
- "@asamuzakjp/css-color": "^3.2.0",
- "rrweb-cssom": "^0.8.0"
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
},
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/csstype": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
- "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
+ "safer-buffer": "~2.1.0"
}
},
- "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"
- },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"engines": {
- "node": ">=18"
+ "node": ">=0.8"
}
},
- "node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
+ },
+ "node_modules/astring": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
+ "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
+ "bin": {
+ "astring": "bin/astring"
}
},
- "node_modules/decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/decode-named-character-reference": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
- "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
- "dependencies": {
- "character-entities": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "peer": true
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
- "node_modules/default-browser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
- "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
- "dependencies": {
- "bundle-name": "^3.0.0",
- "default-browser-id": "^3.0.0",
- "execa": "^7.1.1",
- "titleize": "^3.0.0"
- },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
"engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 4.0.0"
}
},
- "node_modules/default-browser-id": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
- "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+ "node_modules/autoprefixer": {
+ "version": "10.4.14",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
+ "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ }
+ ],
"dependencies": {
- "bplist-parser": "^0.2.0",
- "untildify": "^4.0.0"
+ "browserslist": "^4.21.5",
+ "caniuse-lite": "^1.0.30001464",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
},
"engines": {
- "node": ">=12"
+ "node": "^10 || ^12 || >=14"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"engines": {
"node": ">= 0.4"
},
@@ -3866,1545 +3618,1311 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "*"
}
},
- "node_modules/define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
- "dependencies": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "node_modules/axe-core": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz",
+ "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=4"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "engines": {
- "node": ">=0.4.0"
+ "node_modules/axobject-query": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "dependencies": {
+ "dequal": "^2.0.3"
}
},
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/dependency-graph": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz",
- "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
+ "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=="
+ },
+ "node_modules/batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
}
},
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "node_modules/big-integer": {
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
"engines": {
- "node": ">=6"
+ "node": ">=0.6"
}
},
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "node": "*"
}
},
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
- "license": "Apache-2.0",
- "optional": true,
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/devlop": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
- "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
- "dependencies": {
- "dequal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true
+ "node_modules/blake3-wasm": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
+ "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dependencies": {
- "path-type": "^4.0.0"
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
- "node_modules/docson": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/docson/-/docson-2.1.0.tgz",
- "integrity": "sha512-0NbHZPfyMaEIIDQzhhRN9EmAK9sBLOqLt7B8dCjGyl2ytUpbAgmixpVMgpg1rQK04Or5fuEkQsHQRehdEF2BTA==",
+ "node_modules/bplist-parser": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
"dependencies": {
- "commander": "^2.15.1",
- "debug": "^3.1.0",
- "express": "^4.16.3",
- "handlebars": "^4.0.11",
- "jquery": "^2.2.4",
- "jsonpointer": "^4.0.1",
- "jsonpointer.js": "^0.4.0",
- "lodash": "^4.17.10",
- "marked": "^0.3.14",
- "serve-index": "^1.9.1",
- "traverse": "^0.6.6",
- "urijs": "^1.19.1"
+ "big-integer": "^1.6.44"
},
- "bin": {
- "docson": "lib/docson-cli.js"
+ "engines": {
+ "node": ">= 5.10.0"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "peer": true,
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
+ "fill-range": "^7.1.1"
},
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
+ "node_modules/browserslist": {
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+ "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "devOptional": true,
"funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
{
"type": "github",
- "url": "https://github.com/sponsors/fb55"
+ "url": "https://github.com/sponsors/ai"
}
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
+ ],
+ "license": "MIT",
"dependencies": {
- "domelementtype": "^2.3.0"
+ "caniuse-lite": "^1.0.30001669",
+ "electron-to-chromium": "^1.5.41",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.1"
},
- "engines": {
- "node": ">= 4"
+ "bin": {
+ "browserslist": "cli.js"
},
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dev": true,
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "devOptional": true,
+ "peer": true
+ },
+ "node_modules/bundle-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
"dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
+ "run-applescript": "^5.0.0"
},
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dotenv": {
- "version": "16.4.7",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
- "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
- "dev": true,
- "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
- "url": "https://dotenvx.com"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "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/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
"dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.68",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz",
- "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==",
- "devOptional": true,
- "license": "ISC"
- },
- "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=="
- },
- "node_modules/emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true,
+ "streamsearch": "^1.1.0"
+ },
"engines": {
- "node": ">= 4"
+ "node": ">=10.16.0"
}
},
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"engines": {
"node": ">= 0.8"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true,
"engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "node": ">= 6"
}
},
- "node_modules/es-abstract": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
- "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
+ "node_modules/caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.1",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.2.1",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
- "is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "safe-array-concat": "^1.0.0",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
}
},
- "node_modules/es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001686",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz",
+ "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
},
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
- "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==",
- "engines": {
- "node": ">= 0.4"
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/es-module-lexer": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz",
- "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dependencies": {
- "has": "^1.0.3"
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/esast-util-from-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
- "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
- "license": "MIT",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0"
- },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/esast-util-from-js": {
+ "node_modules/character-reference-invalid": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
- "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
- "license": "MIT",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "acorn": "^8.0.0",
- "esast-util-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/esbuild": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
- "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
},
"engines": {
- "node": ">=18"
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.1",
- "@esbuild/android-arm": "0.25.1",
- "@esbuild/android-arm64": "0.25.1",
- "@esbuild/android-x64": "0.25.1",
- "@esbuild/darwin-arm64": "0.25.1",
- "@esbuild/darwin-x64": "0.25.1",
- "@esbuild/freebsd-arm64": "0.25.1",
- "@esbuild/freebsd-x64": "0.25.1",
- "@esbuild/linux-arm": "0.25.1",
- "@esbuild/linux-arm64": "0.25.1",
- "@esbuild/linux-ia32": "0.25.1",
- "@esbuild/linux-loong64": "0.25.1",
- "@esbuild/linux-mips64el": "0.25.1",
- "@esbuild/linux-ppc64": "0.25.1",
- "@esbuild/linux-riscv64": "0.25.1",
- "@esbuild/linux-s390x": "0.25.1",
- "@esbuild/linux-x64": "0.25.1",
- "@esbuild/netbsd-arm64": "0.25.1",
- "@esbuild/netbsd-x64": "0.25.1",
- "@esbuild/openbsd-arm64": "0.25.1",
- "@esbuild/openbsd-x64": "0.25.1",
- "@esbuild/sunos-x64": "0.25.1",
- "@esbuild/win32-arm64": "0.25.1",
- "@esbuild/win32-ia32": "0.25.1",
- "@esbuild/win32-x64": "0.25.1"
+ "fsevents": "~2.3.2"
}
},
- "node_modules/esbuild-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.3.0.tgz",
- "integrity": "sha512-D7HeJNdkDKKMarPQO/3dlJT6RwN2YJO7ENU6RPlpOz5YxSHnUNi2yvW41Bckvi1EVwctIaLzlb0ni5ag2GINYA==",
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "esbuild": "^0.25.0",
- "get-tsconfig": "^4.7.0",
- "loader-utils": "^2.0.4",
- "webpack-sources": "^1.4.3"
- },
- "funding": {
- "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1"
+ "is-glob": "^4.0.1"
},
- "peerDependencies": {
- "webpack": "^4.40.0 || ^5.0.0"
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"devOptional": true,
- "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=6"
+ "node": ">=6.0"
}
},
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
},
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
}
},
- "node_modules/escodegen": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
- "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
"engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
+ "node": ">=6"
}
},
- "node_modules/escodegen/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
+ "node_modules/codemirror": {
+ "version": "5.65.14",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.14.tgz",
+ "integrity": "sha512-VSNugIBDGt0OU9gDjeVr6fNkoFQznrWEUdAApMlXQNbfE8gGO19776D6MwSqF/V/w/sDwonsQ0z7KmmI9guScg=="
+ },
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/eslint": {
- "version": "8.46.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
- "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
- "peer": true,
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.1",
- "@eslint/js": "^8.46.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.2",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=12.5.0"
}
},
- "node_modules/eslint-config-next": {
- "version": "13.4.12",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.12.tgz",
- "integrity": "sha512-ZF0r5vxKaVazyZH/37Au/XItiG7qUOBw+HaH3PeyXltIMwXorsn6bdrl0Nn9N5v5v9spc+6GM2ryjugbjF6X2g==",
+ "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==",
"dependencies": {
- "@next/eslint-plugin-next": "13.4.12",
- "@rushstack/eslint-patch": "^1.1.3",
- "@typescript-eslint/parser": "^5.42.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-jsx-a11y": "^6.5.1",
- "eslint-plugin-react": "^7.31.7",
- "eslint-plugin-react-hooks": "5.0.0-canary-7118f5dd7-20230705"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0",
- "typescript": ">=3.3.1"
+ "color-name": "~1.1.4"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
- "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "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=="
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.11.0",
- "resolve": "^1.22.1"
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
}
},
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz",
- "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==",
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true
+ },
+ "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==",
"dependencies": {
- "debug": "^4.3.4",
- "enhanced-resolve": "^5.12.0",
- "eslint-module-utils": "^2.7.4",
- "get-tsconfig": "^4.5.0",
- "globby": "^13.1.3",
- "is-core-module": "^2.11.0",
- "is-glob": "^4.0.3",
- "synckit": "^0.8.5"
+ "delayed-stream": "~1.0.0"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"funding": {
- "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dependencies": {
- "ms": "2.1.2"
+ "safe-buffer": "5.2.1"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">= 0.6"
}
},
- "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
- "version": "13.2.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
- "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
- "dependencies": {
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.3.0",
- "ignore": "^5.2.4",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.6"
}
},
- "node_modules/eslint-import-resolver-typescript/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.6"
}
},
- "node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
- "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dependencies": {
- "debug": "^3.2.7"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
+ "node": ">= 8"
}
},
- "node_modules/eslint-plugin-import": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz",
- "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.12.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
- "resolve": "^1.22.3",
- "semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
- },
+ "node_modules/css-declaration-sorter": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
+ "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+ "dev": true,
"engines": {
- "node": ">=4"
+ "node": "^10 || ^12 || >=14"
},
"peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ "postcss": "^8.0.9"
}
},
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
"dependencies": {
- "esutils": "^2.0.2"
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
}
},
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
- "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "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,
"dependencies": {
- "@babel/runtime": "^7.20.7",
- "aria-query": "^5.1.3",
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "ast-types-flow": "^0.0.7",
- "axe-core": "^4.6.2",
- "axobject-query": "^3.1.1",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "has": "^1.0.3",
- "jsx-ast-utils": "^3.3.3",
- "language-tags": "=1.0.5",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "semver": "^6.3.0"
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
},
"engines": {
- "node": ">=4.0"
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
},
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
}
},
- "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
"bin": {
- "semver": "bin/semver.js"
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/eslint-plugin-react": {
- "version": "7.33.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz",
- "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==",
+ "node_modules/cssnano": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
+ "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
+ "dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
- "doctrine": "^2.1.0",
- "estraverse": "^5.3.0",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
+ "cssnano-preset-default": "^6.0.1",
+ "lilconfig": "^2.1.0"
},
"engines": {
- "node": ">=4"
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/cssnano"
},
"peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ "postcss": "^8.2.15"
}
},
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.0.0-canary-7118f5dd7-20230705",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz",
- "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==",
+ "node_modules/cssnano-preset-default": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
+ "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
+ "dev": true,
+ "dependencies": {
+ "css-declaration-sorter": "^6.3.1",
+ "cssnano-utils": "^4.0.0",
+ "postcss-calc": "^9.0.0",
+ "postcss-colormin": "^6.0.0",
+ "postcss-convert-values": "^6.0.0",
+ "postcss-discard-comments": "^6.0.0",
+ "postcss-discard-duplicates": "^6.0.0",
+ "postcss-discard-empty": "^6.0.0",
+ "postcss-discard-overridden": "^6.0.0",
+ "postcss-merge-longhand": "^6.0.0",
+ "postcss-merge-rules": "^6.0.1",
+ "postcss-minify-font-values": "^6.0.0",
+ "postcss-minify-gradients": "^6.0.0",
+ "postcss-minify-params": "^6.0.0",
+ "postcss-minify-selectors": "^6.0.0",
+ "postcss-normalize-charset": "^6.0.0",
+ "postcss-normalize-display-values": "^6.0.0",
+ "postcss-normalize-positions": "^6.0.0",
+ "postcss-normalize-repeat-style": "^6.0.0",
+ "postcss-normalize-string": "^6.0.0",
+ "postcss-normalize-timing-functions": "^6.0.0",
+ "postcss-normalize-unicode": "^6.0.0",
+ "postcss-normalize-url": "^6.0.0",
+ "postcss-normalize-whitespace": "^6.0.0",
+ "postcss-ordered-values": "^6.0.0",
+ "postcss-reduce-initial": "^6.0.0",
+ "postcss-reduce-transforms": "^6.0.0",
+ "postcss-svgo": "^6.0.0",
+ "postcss-unique-selectors": "^6.0.0"
+ },
"engines": {
- "node": ">=10"
+ "node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ "postcss": "^8.2.15"
}
},
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dependencies": {
- "esutils": "^2.0.2"
- },
+ "node_modules/cssnano-utils": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
+ "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
+ "dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
}
},
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
- "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
"dependencies": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
+ "css-tree": "~2.2.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
}
},
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "peer": true,
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
- "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
},
- "node_modules/eslint/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "peer": true,
+ "node_modules/cssstyle": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.5.0.tgz",
+ "integrity": "sha512-/7gw8TGrvH/0g564EnhgFZogTMVe+lifpB7LWU+PEsiq5o83TUXR3fDbzTRXOJhoJwck5IS9ez3Em5LNMMO2aw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "@asamuzakjp/css-color": "^3.2.0",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/eslint/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "peer": true
+ "node_modules/csstype": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
},
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "peer": true,
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "assert-plus": "^1.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=0.10"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
+ "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": ">=4"
+ "node": ">=18"
}
},
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "peer": true,
+ "node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
+ "ms": "^2.1.1"
}
},
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "peer": true,
+ "node_modules/decimal.js": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
"dependencies": {
- "estraverse": "^5.2.0"
+ "character-entities": "^2.0.0"
},
- "engines": {
- "node": ">=4.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "peer": true
+ },
+ "node_modules/default-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
+ "dependencies": {
+ "bundle-name": "^3.0.0",
+ "default-browser-id": "^3.0.0",
+ "execa": "^7.1.1",
+ "titleize": "^3.0.0"
+ },
"engines": {
- "node": ">=4.0"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/estree-util-attach-comments": {
+ "node_modules/default-browser-id": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
- "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
"dependencies": {
- "@types/estree": "^1.0.0"
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/estree-util-build-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
- "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
- "license": "MIT",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-walker": "^3.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/estree-util-build-jsx/node_modules/estree-util-is-identifier-name": {
+ "node_modules/define-lazy-prop": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
- "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "engines": {
+ "node": ">=12"
+ },
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/estree-util-scope": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
- "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-to-js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
- "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
- "license": "MIT",
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
"dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "astring": "^1.8.0",
- "source-map": "^0.7.0"
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/estree-util-value-to-estree": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz",
- "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/remcohaszing"
+ "node_modules/defu": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
+ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "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==",
+ "engines": {
+ "node": ">=0.4.0"
}
},
- "node_modules/estree-util-visit": {
+ "node_modules/depd": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
- "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
- "license": "MIT",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
}
},
- "node_modules/estree-util-visit/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
- },
- "node_modules/estree-walker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz",
- "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ=="
+ "node_modules/dependency-graph": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz",
+ "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
},
- "node_modules/esutils": {
+ "node_modules/dequal": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "node_modules/detect-libc": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
"devOptional": true,
- "peer": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.8.x"
+ "node": ">=8"
}
},
- "node_modules/execa": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
- "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
"dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.1",
- "human-signals": "^4.3.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^3.0.7",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+ "dequal": "^2.0.0"
},
"funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/express": {
- "version": "4.21.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
- "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.3",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.7.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.3.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.3",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.12",
- "proxy-addr": "~2.0.7",
- "qs": "6.13.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.19.0",
- "serve-static": "1.16.2",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
+ "path-type": "^4.0.0"
},
"engines": {
- "node": ">= 0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
+ "node": ">=8"
}
},
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "node_modules/docson": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/docson/-/docson-2.1.0.tgz",
+ "integrity": "sha512-0NbHZPfyMaEIIDQzhhRN9EmAK9sBLOqLt7B8dCjGyl2ytUpbAgmixpVMgpg1rQK04Or5fuEkQsHQRehdEF2BTA==",
"dependencies": {
- "ms": "2.0.0"
+ "commander": "^2.15.1",
+ "debug": "^3.1.0",
+ "express": "^4.16.3",
+ "handlebars": "^4.0.11",
+ "jquery": "^2.2.4",
+ "jsonpointer": "^4.0.1",
+ "jsonpointer.js": "^0.4.0",
+ "lodash": "^4.17.10",
+ "marked": "^0.3.14",
+ "serve-index": "^1.9.1",
+ "traverse": "^0.6.6",
+ "urijs": "^1.19.1"
+ },
+ "bin": {
+ "docson": "lib/docson-cli.js"
}
},
- "node_modules/express/node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": ">=6.0.0"
}
},
- "node_modules/express/node_modules/ms": {
+ "node_modules/dom-serializer": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
},
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "engines": [
- "node >=0.6.0"
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
]
},
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "license": "MIT",
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
+ "domelementtype": "^2.3.0"
},
"engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
+ "node": ">= 4"
},
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "peer": true
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dependencies": {
- "reusify": "^1.0.4"
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/fault": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
- "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
- "license": "MIT",
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dev": true,
"dependencies": {
- "format": "^0.2.0"
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "peer": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
+ "node_modules/dotenv": {
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
+ "node": ">=12"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
- "node_modules/finalhandler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
+ "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/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dependencies": {
- "ms": "2.0.0"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
- "node_modules/finalhandler/node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.68",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz",
+ "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==",
+ "devOptional": true,
+ "license": "ISC"
},
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "peer": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
+ "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=="
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 4"
}
},
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "peer": true,
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">= 0.8"
}
},
- "node_modules/flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "peer": true
- },
- "node_modules/for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dependencies": {
- "is-callable": "^1.1.3"
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "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==",
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
"engines": {
- "node": ">=14"
+ "node": ">=0.12"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/foreground-child/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==",
+ "node_modules/error-stack-parser-es": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
+ "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
+ "license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/antfu"
}
},
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "node_modules/es-abstract": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
+ "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
"dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.1",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.1",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.0",
+ "safe-array-concat": "^1.0.0",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.10"
},
"engines": {
- "node": ">= 0.12"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/format": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
- "engines": {
- "node": ">=0.4.x"
- }
+ "node_modules/es-array-method-boxes-properly": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
},
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.4"
}
},
- "node_modules/fraction.js": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
- "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
- "dev": true,
+ "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==",
"engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://www.patreon.com/infusion"
+ "node": ">= 0.4"
}
},
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "engines": {
- "node": ">= 0.6"
- }
+ "node_modules/es-module-lexer": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz",
+ "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==",
+ "devOptional": true,
+ "peer": true
},
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
"dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
}
},
- "node_modules/fs.realpath": {
+ "node_modules/es-shim-unscopables": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
- },
- "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==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dependencies": {
+ "has": "^1.0.3"
}
},
- "node_modules/function.prototype.name": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -5413,79 +4931,118 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "node_modules/esast-util-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
+ "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0"
+ },
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/fuse.js": {
- "version": "6.6.2",
- "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",
- "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
- "engines": {
- "node": ">=10"
+ "node_modules/esast-util-from-js": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
+ "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "acorn": "^8.0.0",
+ "esast-util-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/gentype": {
- "version": "3.50.0",
- "resolved": "https://registry.npmjs.org/gentype/-/gentype-3.50.0.tgz",
- "integrity": "sha512-EKZzbS4HBuw80zDm5ZJxDdfoGw4nYClTgkv4vp8/db1MXmvCdJSA2NuvxNBYF8i5VqYccdQWzNGClmhWpTFWFQ==",
+ "node_modules/esbuild": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz",
+ "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==",
+ "dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"bin": {
- "gentype": "gentype.exe"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=18"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.4",
+ "@esbuild/android-arm": "0.25.4",
+ "@esbuild/android-arm64": "0.25.4",
+ "@esbuild/android-x64": "0.25.4",
+ "@esbuild/darwin-arm64": "0.25.4",
+ "@esbuild/darwin-x64": "0.25.4",
+ "@esbuild/freebsd-arm64": "0.25.4",
+ "@esbuild/freebsd-x64": "0.25.4",
+ "@esbuild/linux-arm": "0.25.4",
+ "@esbuild/linux-arm64": "0.25.4",
+ "@esbuild/linux-ia32": "0.25.4",
+ "@esbuild/linux-loong64": "0.25.4",
+ "@esbuild/linux-mips64el": "0.25.4",
+ "@esbuild/linux-ppc64": "0.25.4",
+ "@esbuild/linux-riscv64": "0.25.4",
+ "@esbuild/linux-s390x": "0.25.4",
+ "@esbuild/linux-x64": "0.25.4",
+ "@esbuild/netbsd-arm64": "0.25.4",
+ "@esbuild/netbsd-x64": "0.25.4",
+ "@esbuild/openbsd-arm64": "0.25.4",
+ "@esbuild/openbsd-x64": "0.25.4",
+ "@esbuild/sunos-x64": "0.25.4",
+ "@esbuild/win32-arm64": "0.25.4",
+ "@esbuild/win32-ia32": "0.25.4",
+ "@esbuild/win32-x64": "0.25.4"
}
},
- "node_modules/get-own-enumerable-property-symbols": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
- },
- "node_modules/get-stdin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
- "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
+ "node_modules/esbuild-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.3.0.tgz",
+ "integrity": "sha512-D7HeJNdkDKKMarPQO/3dlJT6RwN2YJO7ENU6RPlpOz5YxSHnUNi2yvW41Bckvi1EVwctIaLzlb0ni5ag2GINYA==",
"dev": true,
- "engines": {
- "node": ">=10"
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "get-tsconfig": "^4.7.0",
+ "loader-utils": "^2.0.4",
+ "webpack-sources": "^1.4.3"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1"
+ },
+ "peerDependencies": {
+ "webpack": "^4.40.0 || ^5.0.0"
}
},
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -5493,347 +5050,517 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
},
- "engines": {
- "node": ">= 0.4"
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
- "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
+ "engines": {
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
}
},
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dependencies": {
- "assert-plus": "^1.0.0"
+ "node_modules/escodegen/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/github-slugger": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "node_modules/eslint": {
+ "version": "8.46.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
+ "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
+ "peer": true,
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.1",
+ "@eslint/js": "^8.46.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.2",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
},
"engines": {
- "node": "*"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "node_modules/eslint-config-next": {
+ "version": "13.4.12",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.12.tgz",
+ "integrity": "sha512-ZF0r5vxKaVazyZH/37Au/XItiG7qUOBw+HaH3PeyXltIMwXorsn6bdrl0Nn9N5v5v9spc+6GM2ryjugbjF6X2g==",
"dependencies": {
- "is-glob": "^4.0.3"
+ "@next/eslint-plugin-next": "13.4.12",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.42.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "5.0.0-canary-7118f5dd7-20230705"
},
- "engines": {
- "node": ">=10.13.0"
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "devOptional": true,
- "peer": true
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ }
},
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "peer": true,
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz",
+ "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==",
"dependencies": {
- "type-fest": "^0.20.2"
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "get-tsconfig": "^4.5.0",
+ "globby": "^13.1.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.5"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
}
},
- "node_modules/globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "define-properties": "^1.1.3"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
"dependencies": {
- "array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
"merge2": "^1.4.1",
- "slash": "^3.0.0"
+ "slash": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ "node_modules/eslint-import-resolver-typescript/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "peer": true
+ "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "node_modules/handlebars": {
- "version": "4.7.8",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
- "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
"dependencies": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.2",
- "source-map": "^0.6.1",
- "wordwrap": "^1.0.0"
+ "debug": "^3.2.7"
},
- "bin": {
- "handlebars": "bin/handlebars"
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz",
+ "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.findlastindex": "^1.2.2",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.8.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.12.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.6",
+ "object.groupby": "^1.0.0",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.3",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
},
"engines": {
- "node": ">=0.4.7"
+ "node": ">=4"
},
- "optionalDependencies": {
- "uglify-js": "^3.1.4"
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
- "node_modules/handlebars/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "engines": {
- "node": ">=4"
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
"dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.33.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz",
+ "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==",
"dependencies": {
- "function-bind": "^1.1.1"
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.8"
},
"engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.0.0-canary-7118f5dd7-20230705",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz",
+ "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==",
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
}
},
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dependencies": {
- "es-define-property": "^1.0.0"
+ "esutils": "^2.0.2"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
- "engines": {
- "node": ">= 0.4"
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "peer": true,
"dependencies": {
- "has-symbols": "^1.0.2"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
+ "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
+ "dependencies": {
+ "ms": "2.1.2"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/hast-util-heading-rank": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
- "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
- "license": "MIT",
+ "node_modules/eslint/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "peer": true,
"dependencies": {
- "@types/hast": "^3.0.0"
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/hast-util-heading-rank/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "license": "MIT",
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "peer": true,
"dependencies": {
- "@types/unist": "*"
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "node_modules/hast-util-to-estree": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
- "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-util-attach-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
"license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-attach-comments": "^3.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-js": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "zwitch": "^2.0.0"
+ "@types/estree": "^1.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-estree/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "node_modules/estree-util-build-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
"license": "MIT",
"dependencies": {
- "@types/unist": "*"
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-estree/node_modules/estree-util-is-identifier-name": {
+ "node_modules/estree-util-build-jsx/node_modules/estree-util-is-identifier-name": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
"integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
@@ -5843,464 +5570,532 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-estree/node_modules/property-information": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
- "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==",
+ "node_modules/estree-util-scope": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
+ "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
"license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0"
+ },
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-html": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
- "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "node_modules/estree-util-to-js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
"license": "MIT",
"dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "ccount": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-whitespace": "^3.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "stringify-entities": "^4.0.0",
- "zwitch": "^2.0.4"
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-html/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "node_modules/estree-util-value-to-estree": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz",
+ "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==",
"license": "MIT",
"dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/hast-util-to-html/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
- },
- "node_modules/hast-util-to-html/node_modules/property-information": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
- "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==",
- "license": "MIT",
+ "@types/estree": "^1.0.0"
+ },
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "url": "https://github.com/sponsors/remcohaszing"
}
},
- "node_modules/hast-util-to-jsx-runtime": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
- "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+ "node_modules/estree-util-visit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-object": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "vfile-message": "^4.0.0"
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/hast-util-to-jsx-runtime/node_modules/@types/hast": {
+ "node_modules/estree-util-visit/node_modules/@types/unist": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
- "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
- "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
},
- "node_modules/hast-util-to-jsx-runtime/node_modules/estree-util-is-identifier-name": {
+ "node_modules/estree-walker": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
- "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz",
+ "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ=="
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
- "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz",
- "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==",
- "dependencies": {
- "inline-style-parser": "0.2.2"
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "devOptional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
}
},
- "node_modules/hast-util-to-string": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
- "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
- "license": "MIT",
+ "node_modules/execa": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
"dependencies": {
- "@types/hast": "^3.0.0"
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/hast-util-to-string/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "node_modules/exit-hook": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
+ "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@types/unist": "*"
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/hast-util-whitespace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
- "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "node_modules/express": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"dependencies": {
- "@types/hast": "^3.0.0"
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/hast-util-whitespace/node_modules/@types/hast": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
- "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==",
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
- "@types/unist": "*"
+ "ms": "2.0.0"
}
},
- "node_modules/highlight.js": {
- "version": "11.9.0",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
- "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
+ "node_modules/express/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"engines": {
- "node": ">=12.0.0"
+ "node": ">= 0.8"
}
},
- "node_modules/highlightjs-rescript": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/highlightjs-rescript/-/highlightjs-rescript-0.2.2.tgz",
- "integrity": "sha512-4svMEPtDxxtoVW35DR6prREvo/4oTZfl/Ab1DSLzoZdMpjjuG8kaNkhKCd+1F083fKdlmoFNPCK8rykOxaZY1g=="
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
- "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==",
+ "node_modules/exsolve": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz",
+ "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"license": "MIT",
"dependencies": {
- "whatwg-encoding": "^3.1.1"
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
},
"engines": {
- "node": ">=18"
+ "node": ">=8.6.0"
}
},
- "node_modules/html-url-attributes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz",
- "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/html-void-elements": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
- "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "peer": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
+ "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
"license": "MIT",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "peer": true,
"dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
+ "flat-cache": "^3.0.4"
},
"engines": {
- "node": ">= 0.8"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "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",
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
+ "to-regex-range": "^5.0.1"
},
"engines": {
- "node": ">= 14"
+ "node": ">=8"
}
},
- "node_modules/http-proxy-agent/node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
+ "node_modules/finalhandler": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"license": "MIT",
"dependencies": {
- "ms": "^2.1.3"
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">= 0.8"
}
},
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
+ "ms": "2.0.0"
}
},
- "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,
+ "node_modules/finalhandler/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
"engines": {
- "node": ">= 14"
+ "node": ">= 0.8"
}
},
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
- "license": "MIT",
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "peer": true,
"dependencies": {
- "ms": "^2.1.3"
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=6.0"
+ "node": ">=10"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/human-signals": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
- "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
- "engines": {
- "node": ">=14.18.0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "peer": true,
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "engines": {
- "node": ">= 4"
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "peer": true
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
}
},
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "peer": true,
+ "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": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=14"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "peer": true,
+ "node_modules/foreground-child/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": ">=0.8.19"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "engines": {
+ "node": "*"
}
},
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/internal-slot": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
- "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">= 0.12"
}
},
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
"engines": {
- "node": ">= 0.10"
+ "node": ">=0.4.x"
}
},
- "node_modules/is-alphabetical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
- "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "node_modules/is-alphanumerical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
- "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
- "dependencies": {
- "is-alphabetical": "^2.0.0",
- "is-decimal": "^2.0.0"
+ "node_modules/fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
}
},
- "node_modules/is-array-buffer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
- "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
"dependencies": {
- "has-bigints": "^1.0.1"
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=8"
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/is-boolean-object": {
+ "node_modules/function-bind": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
"dependencies": {
"call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
@@ -6309,38 +6104,50 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "engines": {
- "node": ">= 0.4"
- },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
+ "node_modules/fuse.js": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",
+ "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=10"
}
},
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "node_modules/gentype": {
+ "version": "3.50.0",
+ "resolved": "https://registry.npmjs.org/gentype/-/gentype-3.50.0.tgz",
+ "integrity": "sha512-EKZzbS4HBuw80zDm5ZJxDdfoGw4nYClTgkv4vp8/db1MXmvCdJSA2NuvxNBYF8i5VqYccdQWzNGClmhWpTFWFQ==",
+ "hasInstallScript": true,
+ "bin": {
+ "gentype": "gentype.exe"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -6349,158 +6156,131 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-decimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
- "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "node_modules/get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
},
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "bin": {
- "is-docker": "cli.js"
- },
+ "node_modules/get-stdin": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
+ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
+ "dev": true,
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "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,
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
+ "node": ">=10"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-hexadecimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
- "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-inside-container": {
+ "node_modules/get-symbol-description": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
"dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
},
"engines": {
- "node": ">=14.16"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "engines": {
- "node": ">= 0.4"
+ "node_modules/get-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
}
},
- "node_modules/is-number-object": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": "*"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10.13.0"
}
},
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "devOptional": true
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"peer": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
"engines": {
"node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "engines": {
- "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "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/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
"dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "define-properties": "^1.1.3"
},
"engines": {
"node": ">= 0.4"
@@ -6509,57 +6289,138 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dependencies": {
- "call-bind": "^1.0.2"
+ "get-intrinsic": "^1.1.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "peer": true
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=0.4.7"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
}
},
- "node_modules/is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "node_modules/handlebars/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
},
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dependencies": {
- "has-symbols": "^1.0.2"
+ "es-define-property": "^1.0.0"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
"engines": {
"node": ">= 0.4"
},
@@ -6567,13 +6428,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typed-array": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
- "dependencies": {
- "which-typed-array": "^1.1.11"
- },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
@@ -6581,777 +6439,1619 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typedarray": {
+ "node_modules/has-tostringtag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
- },
- "node_modules/is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dependencies": {
- "call-bind": "^1.0.2"
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": {
- "is-docker": "^2.0.0"
+ "function-bind": "^1.1.2"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
}
},
- "node_modules/is-wsl/node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
+ "node_modules/hast-util-heading-rank": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
+ "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ "node_modules/hast-util-heading-rank/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
},
- "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",
+ "node_modules/hast-util-to-estree": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
+ "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
+ "license": "MIT",
"dependencies": {
- "@isaacs/cliui": "^8.0.2"
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-attach-comments": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-js": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "zwitch": "^2.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "devOptional": true,
- "peer": true,
+ "node_modules/hast-util-to-estree/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
"dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
+ "@types/unist": "*"
}
},
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
+ "node_modules/hast-util-to-estree/node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "license": "MIT",
"funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
- "dev": true,
+ "node_modules/hast-util-to-estree/node_modules/property-information": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
+ "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==",
"license": "MIT",
- "bin": {
- "jiti": "bin/jiti.js"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/jquery": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
- "integrity": "sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q=="
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "peer": true,
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
"dependencies": {
- "argparse": "^2.0.1"
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
- },
- "node_modules/jsdom": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
- "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
- "dev": true,
+ "node_modules/hast-util-to-html/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
"license": "MIT",
"dependencies": {
- "cssstyle": "^4.2.1",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.5.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.6",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.16",
- "parse5": "^7.2.1",
- "rrweb-cssom": "^0.8.0",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^5.1.1",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.1.1",
- "ws": "^8.18.0",
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "canvas": "^3.0.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
+ "@types/unist": "*"
}
},
- "node_modules/jsdom/node_modules/tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "dev": true,
- "license": "BSD-3-Clause",
+ "node_modules/hast-util-to-html/node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/hast-util-to-html/node_modules/property-information": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
+ "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
+ "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
"dependencies": {
- "tldts": "^6.1.32"
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "vfile-message": "^4.0.0"
},
- "engines": {
- "node": ">=16"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
+ "node_modules/hast-util-to-jsx-runtime/node_modules/@types/hast": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
+ "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==",
+ "dependencies": {
+ "@types/unist": "*"
}
},
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "peer": true
+ "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
},
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "peer": true
+ "node_modules/hast-util-to-jsx-runtime/node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
+ "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
},
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
+ "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz",
+ "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==",
+ "dependencies": {
+ "inline-style-parser": "0.2.2"
}
},
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
+ "node_modules/hast-util-to-string": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
+ "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+ "license": "MIT",
"dependencies": {
- "universalify": "^2.0.0"
+ "@types/hast": "^3.0.0"
},
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsonpointer": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz",
- "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==",
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/jsonpointer.js": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz",
- "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg=="
- },
- "node_modules/jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "node_modules/hast-util-to-string/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
"dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
+ "@types/unist": "*"
}
},
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
+ "@types/hast": "^3.0.0"
},
- "engines": {
- "node": ">=4.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "peer": true,
+ "node_modules/hast-util-whitespace/node_modules/@types/hast": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz",
+ "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==",
"dependencies": {
- "json-buffer": "3.0.1"
+ "@types/unist": "*"
}
},
- "node_modules/language-subtag-registry": {
- "version": "0.3.22",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
- "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
- },
- "node_modules/language-tags": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
- "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
- "dependencies": {
- "language-subtag-registry": "~0.3.2"
+ "node_modules/highlight.js": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
+ "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "peer": true,
+ "node_modules/highlightjs-rescript": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/highlightjs-rescript/-/highlightjs-rescript-0.2.2.tgz",
+ "integrity": "sha512-4svMEPtDxxtoVW35DR6prREvo/4oTZfl/Ab1DSLzoZdMpjjuG8kaNkhKCd+1F083fKdlmoFNPCK8rykOxaZY1g=="
+ },
+ "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": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
+ "whatwg-encoding": "^3.1.1"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=18"
}
},
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
+ "node_modules/html-url-attributes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz",
+ "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
- "license": "MIT"
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
- "node_modules/loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "devOptional": true,
- "peer": true,
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
"engines": {
- "node": ">=6.11.5"
+ "node": ">= 0.8"
}
},
- "node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "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": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">=8.9.0"
+ "node": ">= 14"
}
},
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "peer": true,
+ "node_modules/http-proxy-agent/node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "p-locate": "^5.0.0"
+ "ms": "^2.1.3"
},
"engines": {
- "node": ">=10"
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "peer": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
- "node_modules/longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
},
- "bin": {
- "loose-envify": "cli.js"
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
}
},
- "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==",
+ "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": "ISC"
- },
- "node_modules/lz-string": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
- "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
- "bin": {
- "lz-string": "bin/bin.js"
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
}
},
- "node_modules/markdown-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
- "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
"engines": {
- "node": ">=16"
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/markdown-table": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
- "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "engines": {
+ "node": ">=14.18.0"
}
},
- "node_modules/marked": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
- "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
- "bin": {
- "marked": "bin/marked"
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/mdast-util-find-and-replace": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
- "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
- "license": "MIT",
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "peer": true,
"dependencies": {
- "@types/mdast": "^4.0.0",
- "escape-string-regexp": "^5.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
- "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
- "license": "MIT",
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dependencies": {
- "@types/unist": "*"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
- "node_modules/mdast-util-find-and-replace/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
- "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
- "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
- "license": "MIT",
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
"dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-frontmatter": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz",
- "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==",
- "license": "MIT",
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
"dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "escape-string-regexp": "^5.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "micromark-extension-frontmatter": "^2.0.0"
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/@types/mdast": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
- "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
- "license": "MIT",
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dependencies": {
- "@types/unist": "*"
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/mdast-util-frontmatter/node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "license": "MIT",
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dependencies": {
- "ms": "^2.1.3"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
- "node": ">=6.0"
+ "node": ">= 0.4"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"engines": {
- "node": ">=12"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
- "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"license": "MIT",
"dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-phrasing": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
- "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "license": "MIT",
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-markdown": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
- "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.0.0"
- },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0"
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
- "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark-core-commonmark": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
- "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-destination": {
+ "node_modules/is-hexadecimal": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
- "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-wsl/node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "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/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "devOptional": true,
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "devOptional": true,
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/jquery": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
+ "integrity": "sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q=="
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "peer": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "node_modules/jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsdom/node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "peer": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "devOptional": true,
+ "peer": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "peer": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonpointer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz",
+ "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jsonpointer.js": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz",
+ "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg=="
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "peer": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "peer": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "devOptional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "peer": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "peer": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "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/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/markdown-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/marked": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+ "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
+ "bin": {
+ "marked": "bin/marked"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz",
+ "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-extension-frontmatter": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
"license": "MIT",
"dependencies": {
"micromark-util-character": "^2.0.0",
@@ -14906,10 +15606,181 @@
"micromark-util-symbol": "^2.0.0"
}
},
- "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-resolve-all": {
+ "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz",
+ "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
- "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -14922,13 +15793,14 @@
],
"license": "MIT",
"dependencies": {
+ "micromark-util-character": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
- "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-subtokenize": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
- "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -14941,13 +15813,11 @@
],
"license": "MIT",
"dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
- "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": {
+ "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
"integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
@@ -14963,7 +15833,7 @@
],
"license": "MIT"
},
- "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-types": {
+ "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-types": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
"integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
@@ -14979,10 +15849,10 @@
],
"license": "MIT"
},
- "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-chunked": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
- "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "node_modules/micromark-factory-space": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
+ "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -14993,15 +15863,34 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
"dependencies": {
- "micromark-util-symbol": "^2.0.0"
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
}
},
- "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-combine-extensions": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
- "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "node_modules/micromark-util-character": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz",
+ "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+ "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -15014,11 +15903,23 @@
],
"license": "MIT",
"dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
}
},
- "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-symbol": {
+ "node_modules/micromark-util-events-to-acorn/node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
"integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
@@ -15034,7 +15935,7 @@
],
"license": "MIT"
},
- "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-types": {
+ "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-types": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
"integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
@@ -15050,10 +15951,10 @@
],
"license": "MIT"
},
- "node_modules/micromark-factory-mdx-expression": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz",
- "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==",
+ "node_modules/micromark-util-symbol": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz",
+ "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -15063,275 +15964,543 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
+ ]
+ },
+ "node_modules/micromark-util-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
+ "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "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==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/miniflare": {
+ "version": "4.20250726.0",
+ "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250726.0.tgz",
+ "integrity": "sha512-7+/RQQ9dNsyGfR2XN2RDLultf7HHrJ5YltSXSeyQGUpzGU3iYlFhh9Smg+ygkkOJ3+trf0bgwixOnqnnWpc9ZQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
+ "@cspotcode/source-map-support": "0.8.1",
+ "acorn": "8.14.0",
+ "acorn-walk": "8.3.2",
+ "exit-hook": "2.2.1",
+ "glob-to-regexp": "0.4.1",
+ "sharp": "^0.33.5",
+ "stoppable": "1.1.0",
+ "undici": "^7.10.0",
+ "workerd": "1.20250726.0",
+ "ws": "8.18.0",
+ "youch": "4.1.0-beta.10",
+ "zod": "3.22.3"
+ },
+ "bin": {
+ "miniflare": "bootstrap.js"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/miniflare/node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/miniflare/node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
- "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
- "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
- "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
],
- "license": "MIT"
- },
- "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-types": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
- "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
],
- "license": "MIT"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/micromark-factory-space": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
- "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
],
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/micromark-util-character": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz",
- "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
],
- "dependencies": {
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/micromark-util-events-to-acorn": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
- "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
],
- "license": "MIT",
- "dependencies": {
- "@types/acorn": "^4.0.0",
- "@types/estree": "^1.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "vfile-message": "^4.0.0"
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
}
},
- "node_modules/micromark-util-events-to-acorn/node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "license": "MIT"
+ "node_modules/miniflare/node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
},
- "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
- "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
],
- "license": "MIT"
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
},
- "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-types": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
- "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
+ "node_modules/miniflare/node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
],
- "license": "MIT"
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
},
- "node_modules/micromark-util-symbol": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz",
- "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "node_modules/miniflare/node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
},
- "node_modules/micromark-util-types": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
- "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "node_modules/miniflare/node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "node_modules/miniflare/node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
"dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
+ "@emnapi/runtime": "^1.2.0"
},
"engines": {
- "node": ">=8.6"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
+ "node_modules/miniflare/node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=4"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "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==",
+ "node_modules/miniflare/node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">= 0.6"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "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==",
+ "node_modules/miniflare/node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
- "mime-db": "1.52.0"
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
},
"engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "engines": {
- "node": ">=12"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/miniflare/node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "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/minimatch": {
@@ -15716,6 +16885,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -15945,6 +17121,13 @@
"node": ">=8"
}
},
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -18654,8 +19837,8 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "devOptional": true,
"license": "MIT",
- "optional": true,
"dependencies": {
"is-arrayish": "^0.3.1"
}
@@ -18753,6 +19936,17 @@
"node": ">= 0.8"
}
},
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
"node_modules/streamsearch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
@@ -19692,6 +20886,13 @@
"node": ">=14.17"
}
},
+ "node_modules/ufo": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
+ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
@@ -19718,6 +20919,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/undici": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz",
+ "integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -19725,6 +20936,20 @@
"devOptional": true,
"peer": true
},
+ "node_modules/unenv": {
+ "version": "2.0.0-rc.19",
+ "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.19.tgz",
+ "integrity": "sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "defu": "^6.1.4",
+ "exsolve": "^1.0.7",
+ "ohash": "^2.0.11",
+ "pathe": "^2.0.3",
+ "ufo": "^1.6.1"
+ }
+ },
"node_modules/unified": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
@@ -20340,6 +21565,69 @@
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
},
+ "node_modules/workerd": {
+ "version": "1.20250726.0",
+ "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250726.0.tgz",
+ "integrity": "sha512-wDZqSKfIfQ2eVTUL6UawXdXEKPPyzRTnVdbhoKGq3NFrMxd+7v1cNH92u8775Qo1zO5S+GyWonQmZPFakXLvGw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "workerd": "bin/workerd"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "optionalDependencies": {
+ "@cloudflare/workerd-darwin-64": "1.20250726.0",
+ "@cloudflare/workerd-darwin-arm64": "1.20250726.0",
+ "@cloudflare/workerd-linux-64": "1.20250726.0",
+ "@cloudflare/workerd-linux-arm64": "1.20250726.0",
+ "@cloudflare/workerd-windows-64": "1.20250726.0"
+ }
+ },
+ "node_modules/wrangler": {
+ "version": "4.26.1",
+ "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.26.1.tgz",
+ "integrity": "sha512-zGFEtHrjTAWOngm+zwEvYCxFwMSIBrzHa3Yu6rAxYMEzsT8PPvo2rdswyUJiUkpE9s2Depr37opceaY7JxEYFw==",
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "dependencies": {
+ "@cloudflare/kv-asset-handler": "0.4.0",
+ "@cloudflare/unenv-preset": "2.5.0",
+ "blake3-wasm": "2.1.5",
+ "esbuild": "0.25.4",
+ "miniflare": "4.20250726.0",
+ "path-to-regexp": "6.3.0",
+ "unenv": "2.0.0-rc.19",
+ "workerd": "1.20250726.0"
+ },
+ "bin": {
+ "wrangler": "bin/wrangler.js",
+ "wrangler2": "bin/wrangler.js"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@cloudflare/workers-types": "^4.20250726.0"
+ },
+ "peerDependenciesMeta": {
+ "@cloudflare/workers-types": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/wrangler/node_modules/path-to-regexp": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+ "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -20477,6 +21765,51 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/youch": {
+ "version": "4.1.0-beta.10",
+ "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz",
+ "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@poppinss/colors": "^4.1.5",
+ "@poppinss/dumper": "^0.6.4",
+ "@speed-highlight/core": "^1.2.7",
+ "cookie": "^1.0.2",
+ "youch-core": "^0.3.3"
+ }
+ },
+ "node_modules/youch-core": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz",
+ "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@poppinss/exception": "^1.2.2",
+ "error-stack-parser-es": "^1.0.5"
+ }
+ },
+ "node_modules/youch/node_modules/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.22.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz",
+ "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/zwitch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
diff --git a/package.json b/package.json
index 58869e8ac..053111ff2 100644
--- a/package.json
+++ b/package.json
@@ -62,10 +62,8 @@
"build": "rescript && npm run update-index && next build",
"test": "node scripts/test-examples.mjs && node scripts/test-hrefs.mjs",
"reanalyze": "reanalyze -all-cmt .",
- "update-index": "npm run generate-llms && node scripts/extract-indices.mjs && node scripts/extract-tocs.mjs && node scripts/extract-syntax.mjs && node scripts/generate_feed.mjs > public/blog/feed.xml",
- "sync-bundles": "node scripts/sync-playground-bundles.mjs",
- "generate-llms": "node scripts/generate_llms.mjs",
- "generate-resources": "node scripts/generate_resources.mjs"
+ "update-index": "node scripts/extract-tocs.mjs && node scripts/extract-syntax.mjs",
+ "deploy": "wrangler deploy"
},
"devDependencies": {
"@mdx-js/react": "^2.3.0",
@@ -79,6 +77,7 @@
"postcss-nesting": "^12.1.1",
"reanalyze": "^2.16.0",
"simple-functional-loader": "^1.2.1",
- "tailwindcss": "^3.3.3"
+ "tailwindcss": "^3.3.3",
+ "wrangler": "^4.26.1"
}
}
diff --git a/pages/blog.js b/pages/blog.js
deleted file mode 100644
index ec29847f8..000000000
--- a/pages/blog.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import BlogRes from "src/Blog.mjs";
-
-export { getStaticProps_All as getStaticProps } from "src/Blog.mjs";
-
-export default function Blog(props) {
- return
-}
diff --git a/pages/blog/[slug].js b/pages/blog/[slug].js
deleted file mode 100644
index 9ccae1e3e..000000000
--- a/pages/blog/[slug].js
+++ /dev/null
@@ -1,5 +0,0 @@
-export {
- default,
- getStaticPaths,
- getStaticProps
-} from "src/BlogArticle.mjs";
diff --git a/pages/blog/archived.js b/pages/blog/archived.js
deleted file mode 100644
index 112948ab4..000000000
--- a/pages/blog/archived.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import BlogRes from "src/Blog.mjs";
-
-export { getStaticProps_Archived as getStaticProps } from "src/Blog.mjs";
-
-export default function Blog(props) {
- return
-}
diff --git a/pages/community/code-of-conduct.mdx b/pages/community/code-of-conduct.mdx
deleted file mode 100644
index 1d23f4ded..000000000
--- a/pages/community/code-of-conduct.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: "Code of Conduct"
-description: "Our working codex for the ReScript community"
-canonical: "/community/code-of-conduct"
----
-
-# Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age,
-body size, disability, ethnicity, gender identity and expression, level of
-experience, nationality, personal appearance, race, religion, or sexual
-identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment include:
-
-- Using welcoming and inclusive language
-- Being respectful of differing viewpoints and experiences
-- Gracefully accepting constructive criticism
-- Focusing on what is best for the community
-- Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-- The use of sexualized language or imagery and unwelcome sexual attention or advances
-- Trolling, insulting/derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or electronic address, without explicit permission
-- Other conduct which could reasonably be considered inappropriate in a professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an
-appointed representative at an online or offline event. Representation of a
-project may be further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at
-[rescript-association.org](https://www.rescript-association.org/contact). All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an
-incident. Further details of specific enforcement policies may be posted
-separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version]
-
-[homepage]: https://contributor-covenant.org
-[version]: https://contributor-covenant.org/version/1/4/
diff --git a/pages/community/content.mdx b/pages/community/content.mdx
deleted file mode 100644
index 84c68f3f6..000000000
--- a/pages/community/content.mdx
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: "Content"
-description: "Community Content"
-canonical: "/community/content"
----
-
-
-import CommunityContent from 'src/CommunityContent.mjs';
-
-
diff --git a/pages/community/overview.mdx b/pages/community/overview.mdx
deleted file mode 100644
index cfdd6cf03..000000000
--- a/pages/community/overview.mdx
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: "Overview"
-description: "Community Resources Overview"
-canonical: "/community/overview"
----
-
-# Community Overview
-
-## Official Channels
-
-- This website
-- [X (previously Twitter)](https://x.com/rescriptlang)
-- [Bluesky](https://bsky.app/profile/rescript-lang.org)
-- [Forum](https://forum.rescript-lang.org)
-- [ReScript GitHub Org](https://github.com/rescript-lang/)
-- [ReScript YouTube Channel](https://www.youtube.com/@rescriptlang)
-
-News are broadcasted on this site's blog, on Bluesky and X. Some extra, less important news are also posted on the forum's [Announcements category](https://forum.rescript-lang.org/c/announcements/).
-
-**We don't use any other channel to communicate officially**. Any announcement made by users on Reddit, Discord, Medium and others don't necessarily represent our intent.
-
-## Questions
-
-Your questions can go on:
-
-- [The General category](https://forum.rescript-lang.org/c/general/) of the forum.
-- Various GitHub repositories in our [GitHub org](https://github.com/rescript-lang/).
-- [Stack Overflow's `rescript` tag](https://stackoverflow.com/questions/tagged/rescript) (not frequently monitored).
-
-> We stand for inclusivity and good behavior. Please read our [Code of
-> Conduct](/community/code-of-conduct) and help us keeping our community healthy and
-> friendly!
diff --git a/pages/community/roadmap.mdx b/pages/community/roadmap.mdx
deleted file mode 100644
index bc4c0a0f7..000000000
--- a/pages/community/roadmap.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: "Roadmap"
-description: "Goals & Future Releases"
-canonical: "/community/roadmap"
----
-
-# Roadmap
-
-The ReScript development is an Open Source effort coordinated by individiual Open Source contributors, its creator [Hongbo Zhang](https://github.com/bobzhang) and members of the [ReScript Association](https://rescript-association.org).
-
-For latest development updates, please check out the [ReScript forum](https://forum.rescript-lang.org) development section and the [ReScript blog](/blog), or follow the relevant GitHub milestones on the rescript-compiler repository.
-
-## Current focus
-
-Major v12.0 release (see [v12 milestone](https://github.com/rescript-lang/rescript/milestone/16)).
-
-- Move the [Rescript Core](https://github.com/rescript-lang/rescript-core) standard library into the compiler / remove the OCaml standard library
-- A new build system tailored to ReScript's needs ([rewatch](https://github.com/teamwalnut/rewatch)) for better monorepo support and even faster compilation speed
-- Make it easier to create libraries for consumption from TypeScript with GenType
-
-**Note:** Release goals may be subject to change.
diff --git a/pages/community/translations.mdx b/pages/community/translations.mdx
deleted file mode 100644
index 084021d64..000000000
--- a/pages/community/translations.mdx
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Translations"
-description: "Translation Sites"
-canonical: "/community/translation"
----
-
-# Translations
-The ReScript project is exclusively curated in English and our documentation platform is still in the shaping process.
-We currently don't have plans introducing i18n / translation features just yet.
-We welcome any community efforts to translate our resources. Please make sure to follow SEO best practises and most importantly,
-add [canonical](https://moz.com/learn/seo/canonicalization) references to point to the original source, otherwise we might get mixed results with SEO / google search.
-When in doubt, please reach out to us [in the forum](https://forum.rescript-lang.org).
diff --git a/pages/docs/manual/v12.0.0/api.mdx b/pages/docs/manual/v12.0.0/api.mdx
deleted file mode 100644
index 3717e9af0..000000000
--- a/pages/docs/manual/v12.0.0/api.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
-# Introduction
-
-## Stdlib
-
-[Stdlib](api/stdlib) is ReScript's new standard library. It replaces the complete `Js` module as well as some of the more frequently used modules from `Belt` and is recommended to use with uncurried mode.
-
-In ReScript 11, it was shipped as a separate npm package `@rescript/core`.
-
-Since Rescript 12, it is now included with the `rescript` npm package itself.
-
-## Additional Libraries
-
-ReScript ships with these two additional modules in its standard library:
-
-- [Belt](api/belt): immutable collections and extra helpers not available in JavaScript / [Stdlib](api/stdlib).
-- [Dom](api/dom): Dom related types and modules. Contains our standardized types used by various userland DOM bindings.
-
-## Legacy Modules
-
-The [Js](api/js) module is superseded by [Stdlib](api/stdlib).
diff --git a/pages/docs/manual/v12.0.0/api/[...slug].js b/pages/docs/manual/v12.0.0/api/[...slug].js
deleted file mode 100644
index 5a21c79ba..000000000
--- a/pages/docs/manual/v12.0.0/api/[...slug].js
+++ /dev/null
@@ -1,18 +0,0 @@
-import {
- getStaticPathsByVersion,
- getStaticPropsByVersion,
-} from "src/ApiDocs.mjs";
-
-import APIDocs from "src/ApiDocs.mjs";
-
-export async function getStaticProps(ctx) {
- return await getStaticPropsByVersion({ ...ctx, version: "v12.0.0" });
-}
-
-export async function getStaticPaths(ctx) {
- return await getStaticPathsByVersion("v12.0.0");
-}
-
-export default function Comp(props) {
- return ;
-}
diff --git a/pages/docs/manual/v12.0.0/array-and-list.mdx b/pages/docs/manual/v12.0.0/array-and-list.mdx
deleted file mode 100644
index 88ca3cffa..000000000
--- a/pages/docs/manual/v12.0.0/array-and-list.mdx
+++ /dev/null
@@ -1,226 +0,0 @@
----
-title: "Array & List"
-description: "Arrays and List data structures"
-canonical: "/docs/manual/v12.0.0/array-and-list"
----
-
-# Array and List
-
-## Array
-
-Arrays are our main ordered data structure. They work the same way as JavaScript arrays: they can be randomly accessed, dynamically resized, updated, etc.
-
-
-
-```res example
-let myArray = ["hello", "world", "how are you"]
-```
-```js
-var myArray = ["hello", "world", "how are you"];
-```
-
-
-
-ReScript arrays' items must have the same type, i.e. homogeneous.
-
-### Usage
-#### Access
-Accessing items in an array will return an `option` and can be done like so:
-
-
-
-```res example
-let myArray = ["hello", "world", "how are you"]
-
-let firstItem = myArray[0] // Some("hello")
-
-let tenthItem = myArray->Array.get(10) // None
-```
-```js
-var myArray = ["hello", "world", "how are you"];
-
-var firstItem = myArray[0];
-
-var tenthItem = myArray[10];
-```
-
-
-
-The behavior of returning an `option` is new to V11 when you have [Core](api/core) open.
-It provides a safer way to access array items, which is especially useful when you're not sure if the index is out of bounds.
-If you would like to not use an `option`, you can use [`Array.getUnsafe`](api/core/array#value-getUnsafe).
-
-#### Update
-Items in an array can be updated by assigning a value to an index or using a function:
-
-
-
-```res example
-let myArray = ["hello", "world", "how are you"]
-
-myArray[0] = "hey" // now ["hey", "world", "how are you"]
-
-myArray->Array.push("?") // ["hey", "world", "how are you", "?"]
-
-myArray->Array.set(0, "bye") // ["bye", "world", "how are you", "?"]
-```
-```js
-var myArray = ["hello", "world", "how are you"];
-
-myArray[0] = "hey";
-
-myArray.push("?");
-
-myArray[0] = "bye";
-```
-
-
-
-### Array spreads
-
-**Since 11.1**
-
-
-You can spread arrays of the the same type into new arrays, just like in JavaScript:
-
-
-
-```res example
-let y = [1, 2]
-let x = [4, 5, ...y]
-let x2 = [4, 5, ...y, 7, ...y]
-let x3 = [...y]
-```
-
-```javascript
-var Belt_Array = require("rescript/lib/js/belt_Array.js");
-
-var y = [
- 1,
- 2
-];
-
-var x = Belt_Array.concatMany([
- [
- 4,
- 5
- ],
- y
- ]);
-
-var x2 = Belt_Array.concatMany([
- [
- 4,
- 5
- ],
- y,
- [7],
- y
- ]);
-
-var x3 = Belt_Array.concatMany([y]);
-```
-
-
-> Note that array spreads compiles to `Belt.Array.concatMany` right now. This is likely to change to native array spreads in the future.
-
-## List
-
-ReScript provides a singly linked list too. Lists are:
-
-- immutable
-- fast at prepending items
-- fast at getting the head
-- slow at everything else
-
-
-
-```res example
-let myList = list{1, 2, 3}
-```
-```js
-var myList = {
- hd: 1,
- tl: {
- hd: 2,
- tl: {
- hd: 3,
- tl: 0
- }
- }
-};
-```
-
-
-
-Like arrays, lists' items need to be of the same type.
-
-### Usage
-
-You'd use list for its resizability, its fast prepend (adding at the head), and its fast split, all of which are immutable and relatively efficient.
-
-Do **not** use list if you need to randomly access an item or insert at non-head position. Your code would end up obtuse and/or slow.
-
-The standard lib provides a [List module](api/core/list).
-
-#### Immutable Prepend
-
-Use the spread syntax:
-
-
-
-```res prelude
-let myList = list{1, 2, 3}
-let anotherList = list{0, ...myList}
-```
-```js
-var myList = {
- hd: 1,
- tl: {
- hd: 2,
- tl: {
- hd: 3,
- tl: 0
- }
- }
-};
-
-var anotherList = {
- hd: 0,
- tl: myList
-};
-```
-
-
-
-`myList` didn't mutate. `anotherList` is now `list{0, 1, 2, 3}`. This is efficient (constant time, not linear). `anotherList`'s last 3 elements are shared with `myList`!
-
-**Note that `list{a, ...b, ...c}` was a syntax error** before compiler v10.1. In general, the pattern should be used with care as its performance and allocation overhead are linear (`O(n)`).
-
-#### Access
-
-`switch` (described in the [pattern matching section](pattern-matching-destructuring.md)) is usually used to access list items:
-
-
-
-```res example
-let message =
- switch myList {
- | list{} => "This list is empty"
- | list{first, second, ...rest} => "The list two items and a potenial remainder of items"
- | list{a, ...rest} => "The head of the list is the string " ++ Int.toString(a)
- }
-```
-```js
-let message = myList !== 0 ? (
- ({
- hd: 2,
- tl: {
- hd: 3,
- tl: /* [] */0
- }
- }) !== 0 ? "The list two items and a potenial remainder of items" : "The head of the list is the string " + (1).toString()
- ) : "This list is empty";
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/async-await.mdx b/pages/docs/manual/v12.0.0/async-await.mdx
deleted file mode 100644
index 1a459ce06..000000000
--- a/pages/docs/manual/v12.0.0/async-await.mdx
+++ /dev/null
@@ -1,326 +0,0 @@
----
-title: "Async / Await"
-description: "Async / await for asynchronous operations"
-canonical: "/docs/manual/v12.0.0/async-await"
----
-
-
-
-
-
-
-# Async / Await
-
-ReScript comes with `async` / `await` support to make asynchronous, `Promise` based code easier to read and write. This feature is very similar to its JS equivalent, so if you are already familiar with JS' `async` / `await`, you will feel right at home.
-
-## How it looks
-
-Let's start with a quick example to show-case the syntax:
-
-
-
-
-```res
-// Some fictive functionality that offers asynchronous network actions
-@val external fetchUserMail: string => promise = "GlobalAPI.fetchUserMail"
-@val external sendAnalytics: string => promise = "GlobalAPI.sendAnalytics"
-
-// We use the `async` keyword to allow the use of `await` in the function body
-let logUserDetails = async (userId: string) => {
- // We use `await` to fetch the user email from our fictive user endpoint
- let email = await fetchUserMail(userId)
-
- await sendAnalytics(`User details have been logged for ${userId}`)
-
- Console.log(`Email address for user ${userId}: ${email}`)
-}
-```
-
-```js
-async function logUserDetails(userId) {
- var email = await GlobalAPI.fetchUserMail(userId);
- await GlobalAPI.sendAnalytics("User details have been logged for " + userId + "");
- console.log("Email address for user " + userId + ": " + email + "");
-}
-```
-
-
-
-As we can see above, an `async` function is defined via the `async` keyword right before the function's parameter list. In the function body, we are now able to use the `await` keyword to explicitly wait for a `Promise` value and assign its content to a let binding `email`.
-
-You will probably notice that this looks very similar to `async` / `await` in JS, but there are still a few details that are specific to ReScript. The next few sections will go through all the details that are specific to the ReScript type system.
-
-## Basics
-
-- You may only use `await` in `async` function bodies
-- `await` may only be called on a `promise` value
-- `await` calls are expressions, therefore they can be used in pattern matching (`switch`)
-- A function returning a `promise<'a>` is equivalent to an `async` function returning a value `'a` (important for writing signature files and bindings)
-- `promise` values and types returned from an `async` function don't auto-collapse into a "flat promise" like in JS (more on this later)
-
-
-## Types and `async` functions
-
-### `async` function type signatures
-
-Function type signatures (i.e defined in signature files) don't require any special keywords for `async` usage. Whenever you want to type an `async` function, use a `promise` return type.
-
-```resi
-// Demo.resi
-
-let fetchUserMail: string => promise
-```
-
-The same logic applies to type definitions in `.res` files:
-
-```res example
-// function type
-type someAsyncFn = int => promise
-
-// Function type annotation
-let fetchData: string => promise = async (userId) => {
- await fetchUserMail(userId)
-}
-```
-
-**BUT:** When typing `async` functions in your implementation files, you need to omit the `promise<'a>` type:
-
-```res
-// This function is compiled into a `string => promise` type.
-// The promise<...> part is implicitly added by the compiler.
-let fetchData = async (userId: string): string => {
- await fetchUserMail("test")
-}
-```
-
-For completeness reasons, let's expand the full signature and inline type definitions in one code snippet:
-
-```res
-// Note how the inline return type uses `string`, while the type definition uses `promise`
-let fetchData: string => promise = async (userId: string): string {
- await fetchUserMail(userId)
-}
-```
-
-**Note:** In a practical scenario you'd either use a type signature, or inline types, not both at the same time. In case you are interested in the design decisions, check out [this discussion](https://github.com/rescript-lang/rescript-compiler/pull/5913#issuecomment-1359003870).
-
-### Promises don't auto-collapse in async functions
-
-In JS, nested promises (i.e. `promise>`) will automatically collapse into a flat promise (`promise<'a>`). This is not the case in ReScript. Use the `await` function to manually unwrap any nested promises within an `async` function instead.
-
-```res
-let fetchData = async (userId: string): string => {
- // We can't just return the result of `fetchUserMail`, otherwise we'd get a
- // type error due to our function return type of type `string`
- await fetchUserMail(userId)
-}
-```
-
-## Error handling
-
-You may use `try / catch` or `switch` to handle exceptions during async execution.
-
-```res
-// For simulation purposes
-let authenticate = async () => {
- JsError.RangeError.throwWithMessage("Authentication failed.")
-}
-
-let checkAuth = async () => {
- try {
- await authenticate()
- } catch {
- | JsExn(e) =>
- switch JsExn.message(e) {
- | Some(msg) => Console.log("JS error thrown: " ++ msg)
- | None => Console.log("Some other exception has been thrown")
- }
- }
-}
-```
-
-Note how we are essentially catching JS errors the same way as described in our [Exception](exception#catch-rescript-exceptions-from-js) section.
-
-You may unify error and value handling in a single switch as well:
-
-```res
-let authenticate = async () => {
- JsError.RangeError.throwWithMessage("Authentication failed.")
-}
-
-let checkAuth = async () => {
- switch await authenticate() {
- | _ => Console.log("ok")
- | exception JsExn(e) =>
- switch JsExn.message(e) {
- | Some(msg) => Console.log("JS error thrown: " ++ msg)
- | None => Console.log("Some other exception has been thrown")
- }
- }
-}
-```
-
-**Important:** When using `await` with a `switch`, always make sure to put the actual await call in the `switch` expression, otherwise your `await` error will not be caught.
-
-## Piping `await` calls
-
-You may want to pipe the result of an `await` call right into another function.
-This can be done by wrapping your `await` calls in a new `{}` closure.
-
-
-
-```res example
-@val external fetchUserMail: string => promise = "GlobalAPI.fetchUserMail"
-
-let fetchData = async () => {
- let mail = {await fetchUserMail("1234")}->String.toUpperCase
- Console.log(`All upper-cased mail: ${mail}`)
-}
-```
-
-```js
-async function fetchData(param) {
- var mail = (await GlobalAPI.fetchUserMail("1234")).toUpperCase();
- console.log("All upper-cased mail: " + mail + "");
-}
-```
-
-
-
-Note how the original closure was removed in the final JS output. No extra allocations!
-
-## Pattern matching on `await` calls
-
-`await` calls are just another kind of expression, so you can use `switch` pattern matching for more complex logic.
-
-
-
-```res example
-@val external fetchUserMail: string => promise = "GlobalAPI.fetchUserMail"
-
-let fetchData = async () => {
- switch (await fetchUserMail("user1"), await fetchUserMail("user2")) {
- | (user1Mail, user2Mail) => {
- Console.log("user 1 mail: " ++ user1Mail)
- Console.log("user 2 mail: " ++ user2Mail)
- }
-
- | exception JsError(err) => Console.log2("Some error occurred", err)
- }
-}
-```
-
-```js
-async function fetchData(param) {
- var val;
- var val$1;
- try {
- val = await GlobalAPI.fetchUserMail("user1");
- val$1 = await GlobalAPI.fetchUserMail("user2");
- }
- catch (raw_err){
- var err = Caml_js_exceptions.internalToOCamlException(raw_err);
- if (err.RE_EXN_ID === "JsError") {
- console.log("Some error occurred", err._1);
- return ;
- }
- throw err;
- }
- console.log("user 1 mail: " + val);
- console.log("user 2 mail: " + val$1);
-}
-```
-
-
-
-## `await` multiple promises
-
-We can utilize the `Promise` module to handle multiple promises. E.g. let's use `Promise.all` to wait for multiple promises before continuing the program:
-
-```res
-let pauseReturn = (value, timeout) => {
- Promise.make((resolve, _reject) => {
- setTimeout(() => {
- resolve(value)
- }, timeout)->ignore
- })
-}
-
-let logMultipleValues = async () => {
- let promise1 = pauseReturn("value1", 2000)
- let promise2 = pauseReturn("value2", 1200)
- let promise3 = pauseReturn("value3", 500)
-
- let all = await Promise.all([promise1, promise2, promise3])
-
- switch all {
- | [v1, v2, v3] => Console.log(`All values: ${v1}, ${v2}, ${v3}`)
- | _ => Console.log("this should never happen")
- }
-}
-```
-
-## JS Interop with `async` functions
-
-`async` / `await` practically works with any function that returns a `promise<'a>` value. Map your `promise` returning function via an `external`, and use it in an `async` function as usual.
-
-Here's a full example of using the MDN `fetch` API, using `async` / `await` to simulate a login:
-
-```res
-// A generic Response type for typing our fetch requests
-module Response = {
- type t<'data>
- @send external json: t<'data> => promise<'data> = "json"
-}
-
-// A binding to our globally available `fetch` function. `fetch` is a
-// standardized function to retrieve data from the network that is available in
-// all modern browsers.
-@val @scope("globalThis")
-external fetch: (
- string,
- 'params,
-) => promise, "error": Nullable.t}>> =
- "fetch"
-
-// We now use our asynchronous `fetch` function to simulate a login.
-// Note how we use `await` with regular functions returning a `promise`.
-let login = async (email: string, password: string) => {
- let body = {
- "email": email,
- "password": password,
- }
-
- let params = {
- "method": "POST",
- "headers": {
- "Content-Type": "application/json",
- },
- "body": Json.stringifyAny(body),
- }
-
- try {
- let response = await fetch("https://reqres.in/api/login", params)
- let data = await response->Response.json
-
- switch Nullable.toOption(data["error"]) {
- | Some(msg) => Error(msg)
- | None =>
- switch Nullable.toOption(data["token"]) {
- | Some(token) => Ok(token)
- | None => Error("Didn't return a token")
- }
- }
- } catch {
- | _ => Error("Unexpected network error occurred")
- }
-}
-```
-
diff --git a/pages/docs/manual/v12.0.0/attribute.mdx b/pages/docs/manual/v12.0.0/attribute.mdx
deleted file mode 100644
index cea6170a2..000000000
--- a/pages/docs/manual/v12.0.0/attribute.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: "Attribute (Decorator)"
-description: "Annotations in ReScript"
-canonical: "/docs/manual/v12.0.0/attribute"
----
-
-# Attribute (Decorator)
-
-Like many other languages, ReScript allows annotating a piece of code to express extra functionality. Here's an example:
-
-
-
-```res
-@inline
-let mode = "dev"
-
-let mode2 = mode
-```
-```js
-var mode2 = "dev";
-```
-
-
-
-The `@inline` annotation tells `mode`'s value to be inlined into its usage sites (see output). We call such annotation "attribute" (or "decorator" in JavaScript).
-
-An attribute starts with `@` and goes before the item it annotates. In the above example, it's hooked onto the let binding.
-
-## Usage
-
-> **Note:** In previous versions (< 8.3) all our interop related attributes started with a `bs.` prefix (`bs.module`, `bs.val`). Our formatter will automatically drop them in newer ReScript versions.
-
-You can put an attribute almost anywhere. You can even add extra data to them by using them visually like a function call. Here are a few famous attributes (explained in other sections):
-
-
-
-```res
-@@warning("-27")
-
-
-@unboxed
-type a = Name(string)
-
-@val external message: string = "message"
-
-type student = {
- age: int,
- @as("aria-label") ariaLabel: string,
-}
-
-@deprecated
-let customDouble = foo => foo * 2
-
-@deprecated("Use SomeOther.customTriple instead")
-let customTriple = foo => foo * 3
-```
-```js
-```
-
-
-
-1. `@@warning("-27")` is a standalone attribute that annotates the entire file. Those attributes start with `@@`. Here, it carries the data `"-27"`. You can find a full list of all available warnings [here](./warning-numbers).
-2. `@unboxed` annotates the type definition.
-3. `@val` annotates the `external` statement.
-4. `@as("aria-label")` annotates the `ariaLabel` record field.
-5. `@deprecated` annotates the `customDouble` expression. This shows a warning while compiling telling consumers to not rely on this method long-term.
-6. `@deprecated("Use SomeOther.customTriple instead")` annotates the `customTriple` expression with a string to describe the reason for deprecation.
-
-For a list of all decorators and their usage, please refer to the [Syntax Lookup](/syntax-lookup) page.
-
-## Extension Point
-
-There's a second category of attributes, called "extension points" (a remnant term of our early systems):
-
-
-
-```res
-%raw("var a = 1")
-```
-```js
-var a = 1
-```
-
-
-
-Extension points are attributes that don't _annotate_ an item; they _are_ the item. Usually they serve as placeholders for the compiler to implicitly substitute them with another item.
-
-Extension points start with `%`. A standalone extension point (akin to a standalone regular attribute) starts with `%%`.
-
-For a list of all extension points and their usage, please refer to the [Syntax Lookup](/syntax-lookup) page.
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/bind-to-global-js-values.mdx b/pages/docs/manual/v12.0.0/bind-to-global-js-values.mdx
deleted file mode 100644
index 17d5954a2..000000000
--- a/pages/docs/manual/v12.0.0/bind-to-global-js-values.mdx
+++ /dev/null
@@ -1,145 +0,0 @@
----
-title: "Bind to Global JS Values"
-description: "JS interop with global JS values in ReScript"
-canonical: "/docs/manual/v12.0.0/bind-to-global-js-values"
----
-
-# Bind to Global JS Values
-
-**First**, make sure the value you'd like to model doesn't already exist in our [provided API](api/core).
-
-Some JS values, like `setTimeout`, live in the global scope. You can bind to them like so:
-
-
-
-```res example
-@val external setTimeout: (unit => unit, int) => float = "setTimeout"
-@val external clearTimeout: float => unit = "clearTimeout"
-```
-```js
-// Empty output
-```
-
-
-
-(We already provide `setTimeout`, `clearTimeout` and others in the [Core API](api/core) module).
-
-This binds to the JavaScript [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrworkerGlobalScope/setTimeout) methods and the corresponding `clearTimeout`. The `external`'s type annotation specifies that `setTimeout`:
-
-- Takes a function that accepts `unit` and returns `unit` (which on the JS side turns into a function that accepts nothing and returns nothing aka `undefined`),
-- and an integer that specifies the duration before calling said function,
-- returns a number that is the timeout's ID. This number might be big, so we're modeling it as a float rather than the 32-bit int.
-
-### Tips & Tricks
-
-**The above isn't ideal**. See how `setTimeout` returns a `float` and `clearTimeout` accepts one. There's no guarantee that you're passing the float created by `setTimeout` into `clearTimeout`! For all we know, someone might pass it `Math.random()` into the latter.
-
-We're in a language with a great type system now! Let's leverage a popular feature to solve this problem: abstract types.
-
-
-
-```res example
-type timerId
-@val external setTimeout: (unit => unit, int) => timerId = "setTimeout"
-@val external clearTimeout: timerId => unit = "clearTimeout"
-
-let id = setTimeout(() => Console.log("hello"), 100)
-clearTimeout(id)
-```
-```js
-var id = setTimeout(function (param) {
- console.log("hello");
-}, 100);
-
-clearTimeout(id);
-```
-
-
-
-Clearly, `timerId` is a type that can only be created by `setTimeout`! Now we've guaranteed that `clearTimeout` _will_ be passed a valid ID. Whether it's a number under the hood is now a mere implementation detail.
-
-Since `external`s are inlined, we end up with JS output as readable as hand-written JS.
-
-## Global Modules
-
-If you want to bind to a value inside a global module, e.g. `Math.random`, attach a `scope` to your `val` external:
-
-
-
-```res example
-@scope("Math") @val external random: unit => float = "random"
-let someNumber = random()
-```
-```js
-var someNumber = Math.random();
-```
-
-
-
-you can bind to an arbitrarily deep object by passing a tuple to `scope`:
-
-
-
-```res example
-@val @scope(("window", "location", "ancestorOrigins"))
-external length: int = "length"
-```
-```js
-// Empty output
-```
-
-
-
-This binds to `window.location.ancestorOrigins.length`.
-
-## Special Global Values
-
-Global values like `__filename` and `__DEV__` don't always exist; you can't even model them as an `option`, since the mere act of referring to them in ReScript (then compiled into JS) would trigger the usual `Uncaught ReferenceError: __filename is not defined` error in e.g. the browser environment.
-
-For these troublesome global values, ReScript provides a special approach: `%external(a_single_identifier)`.
-
-
-
-```res example
-switch %external(__DEV__) {
-| Some(_) => Console.log("dev mode")
-| None => Console.log("production mode")
-}
-```
-```js
-var match = typeof __DEV__ === "undefined" ? undefined : __DEV__;
-
-if (match !== undefined) {
- console.log("dev mode");
-} else {
- console.log("production mode");
-}
-```
-
-
-
-That first line's `typeof` check won't trigger a JS ReferenceError.
-
-Another example:
-
-
-
-```res example
-switch %external(__filename) {
-| Some(f) => Console.log(f)
-| None => Console.log("non-node environment")
-};
-```
-```js
-var match = typeof (__filename) === "undefined" ? undefined : (__filename);
-
-if (match !== undefined) {
- console.log(match);
-} else {
- console.log("non-node environment");
-}
-```
-
-
-
-
diff --git a/pages/docs/manual/v12.0.0/bind-to-js-function.mdx b/pages/docs/manual/v12.0.0/bind-to-js-function.mdx
deleted file mode 100644
index 1f0fe26a7..000000000
--- a/pages/docs/manual/v12.0.0/bind-to-js-function.mdx
+++ /dev/null
@@ -1,490 +0,0 @@
----
-title: "Bind to JS Function"
-description: "JS interop with functions in ReScript"
-canonical: "/docs/manual/v12.0.0/bind-to-js-function"
----
-
-# Function
-
-Binding a JS function is like binding any other value:
-
-
-
-```res example
-// Import nodejs' path.dirname
-@module("path") external dirname: string => string = "dirname"
-let root = dirname("/User/github") // returns "User"
-```
-```js
-var Path = require("path");
-var root = Path.dirname("/User/github");
-```
-
-
-
-We also expose a few special features, described below.
-
-## Labeled Arguments
-
-ReScript has [labeled arguments](function.md#labeled-arguments) (that can also be optional). These work on an `external` too! You'd use them to _fix_ a JS function's unclear usage. Assuming we're modeling this:
-
-```js
-// MyGame.js
-
-function draw(x, y, border) {
- // suppose `border` is optional and defaults to false
-}
-draw(10, 20)
-draw(20, 20, true)
-```
-
-It'd be nice if on ReScript's side, we can bind & call `draw` while labeling things a bit:
-
-
-
-```res example
-@module("MyGame")
-external draw: (~x: int, ~y: int, ~border: bool=?) => unit = "draw"
-
-draw(~x=10, ~y=20, ~border=true)
-draw(~x=10, ~y=20)
-```
-```js
-var MyGame = require("MyGame");
-
-MyGame.draw(10, 20, true);
-MyGame.draw(10, 20, undefined);
-```
-
-
-
-We've compiled to the same function, but now the usage is much clearer on the ReScript side thanks to labels!
-
-Note that you can freely reorder the labels on the ReScript side; they'll always correctly appear in their declaration order in the JavaScript output:
-
-
-
-```res example
-@module("MyGame")
-external draw: (~x: int, ~y: int, ~border: bool=?) => unit = "draw"
-
-draw(~x=10, ~y=20)
-draw(~y=20, ~x=10)
-```
-```js
-var MyGame = require("MyGame");
-
-MyGame.draw(10, 20, undefined);
-MyGame.draw(10, 20, undefined);
-```
-
-
-
-## Object Method
-
-Functions attached to JS objects (other than JS modules) require a special way of binding to them, using `send`:
-
-
-
-```res example
-type document // abstract type for a document object
-@send external getElementById: (document, string) => Dom.element = "getElementById"
-@val external doc: document = "document"
-
-let el = getElementById(doc, "myId")
-```
-```js
-var el = document.getElementById("myId");
-```
-
-
-
-In a `send`, the object is always the first argument. Actual arguments of the method follow (this is a bit what modern OOP objects are really).
-
-### Chaining
-
-Ever used `foo().bar().baz()` chaining ("fluent api") in JS OOP? We can model that in ReScript too, through the [pipe operator](pipe.md).
-
-### Nested function call
-
-`@send` can also accept a `@scope(("itemOne","itemTwo"))` to access a function on a nested property.
-
-
-```res example
-type stripe
-
-@module("stripe") @new
-external make: string => stripe = "default"
-
-type createSession = {}
-
-type sessionResult
-
-@send
-@scope(("checkout", "sessions"))
-external createCheckoutSession: (stripe, createSession) =>
- Promise.t = "create"
-
-let stripe = make("sk_...")
-let session = stripe->createCheckoutSession({})
-```
-```js
-import Stripe from "stripe";
-
-var stripe = new Stripe("sk_...");
-var session = stripe.checkout.sessions.create({});
-```
-
-
-## Variadic Function Arguments
-
-You might have JS functions that take an arbitrary amount of arguments. ReScript supports modeling those, under the condition that the arbitrary arguments part is homogenous (aka of the same type). If so, add `variadic` to your `external`.
-
-
-
-```res example
-@module("path") @variadic
-external join: array => string = "join"
-
-let v = join(["a", "b"])
-```
-```js
-var Path = require("path");
-var v = Path.join("a", "b");
-```
-
-
-
-`module` will be explained in [Import from/Export to JS](import-from-export-to-js.md).
-
-## Modeling Polymorphic Function
-
-Apart from the above special-case, JS functions in general are often arbitrarily overloaded in terms of argument types and number. How would you bind to those?
-
-### Trick 1: Multiple `external`s
-
-If you can exhaustively enumerate the many forms an overloaded JS function can take, simply bind to each differently:
-
-
-
-```res example
-@module("MyGame") external drawCat: unit => unit = "draw"
-@module("MyGame") external drawDog: (~giveName: string) => unit = "draw"
-@module("MyGame") external draw: (string, ~useRandomAnimal: bool) => unit = "draw"
-```
-```js
-// Empty output
-```
-
-
-
-Note how all three externals bind to the same JS function, `draw`.
-
-### Trick 2: Polymorphic Variant + `unwrap`
-
-If you have the irresistible urge of saying "if only this JS function argument was a variant instead of informally being either `string` or `int`", then good news: we do provide such `external` features through annotating a parameter as a polymorphic variant! Assuming you have the following JS function you'd like to bind to:
-
-```js
-function padLeft(value, padding) {
- if (typeof padding === "number") {
- return Array(padding + 1).join(" ") + value;
- }
- if (typeof padding === "string") {
- return padding + value;
- }
- throw new Error(`Expected string or number, got '${padding}'.`);
-}
-```
-
-Here, `padding` is really conceptually a variant. Let's model it as such.
-
-
-
-```res example
-@val
-external padLeft: (
- string,
- @unwrap [
- | #Str(string)
- | #Int(int)
- ])
- => string = "padLeft"
-padLeft("Hello World", #Int(4))
-padLeft("Hello World", #Str("Message from ReScript: "))
-```
-```js
-padLeft("Hello World", 4);
-padLeft("Hello World", "Message from ReScript: ");
-```
-
-
-
-Obviously, the JS side couldn't have an argument that's a polymorphic variant! But here, we're just piggy backing on poly variants' type checking and syntax. The secret is the `@unwrap` annotation on the type. It strips the variant constructors and compile to just the payload's value. See the output.
-
-## Constrain Arguments Better
-
-Consider the Node `fs.readFileSync`'s second argument. It can take a string, but really only a defined set: `"ascii"`, `"utf8"`, etc. You can still bind it as a string, but we can use poly variants + `string` to ensure that our usage's more correct:
-
-
-
-```res example
-@module("fs")
-external readFileSync: (
- ~name: string,
- @string [
- | #utf8
- | @as("ascii") #useAscii
- ],
-) => string = "readFileSync"
-
-readFileSync(~name="xx.txt", #useAscii)
-```
-```js
-var Fs = require("fs");
-Fs.readFileSync("xx.txt", "ascii");
-```
-
-
-
-- Attaching `@string` to the whole poly variant type makes its constructor compile to a string of the same name.
-- Attaching a `@as("bla")` to a constructor lets you customize the final string.
-
-And now, passing something like `"myOwnUnicode"` or other variant constructor names to `readFileSync` would correctly error.
-
-Aside from string, you can also compile an argument to an int, using `int` instead of `string` in a similar way:
-
-
-
-```res example
-@val
-external testIntType: (
- @int [
- | #onClosed
- | @as(20) #onOpen
- | #inBinary
- ])
- => int = "testIntType"
-testIntType(#inBinary)
-```
-```js
-testIntType(21);
-```
-
-
-
-`onClosed` compiles to `0`, `onOpen` to `20` and `inBinary` to **`21`**.
-
-## Unknown for type safety
-
-It is best practice to inspect data received from untrusted external functions to ensure it contains what you expect. This helps avoid run-time crashes and unexpected behavior. If you're certain about what an external function returns, simply assert the return value as `string` or `array` or whatever you want it to be. Otherwise use `unknown`. The ReScript type system will prevent you from using an `unknown` until you first inspect it and "convert" it using JSON parsing utilities or similar tools.
-
-Consider the example below of two external functions that access the value of a property on a JavaScript object. `getPropertyUnsafe` returns an `'a`, which means "anything you want it to be." ReScript allows you to use this value as a `string` or `array` or any other type. Quite convenient! But if the property is missing or contains something unexpected, your code might break. You can make the binding more safe by changing `'a` to `string` or `option<'a>`, but this doesn't completely eliminate the problem.
-
-The `getPropertySafe` function returns an `unknown`, which could be `null` or a `string` or anything else. But ReScript prevents you from using this value inappropriately until it has been safely parsed.
-
-```res example
-@get_index external getPropertyUnsafe: ({..}, string) => 'a = ""
-@get_index external getPropertySafe: ({..}, string) => unknown = ""
-
-let person = {"name": "Bob", "age": 12}
-
-let greeting1 = "Hello, " ++ getPropertyUnsafe(person, "name") // works (this time!)
-// let greeting2 = "Hello, " ++ getPropertySafe(person, "name") // syntax error
-```
-
-## Special-case: Event Listeners
-
-One last trick with polymorphic variants:
-
-
-
-```res example
-type readline
-
-@send
-external on: (
- readline,
- @string [
- | #close(unit => unit)
- | #line(string => unit)
- ]
- )
- => readline = "on"
-
-let register = rl =>
- rl
- ->on(#close(event => ()))
- ->on(#line(line => Console.log(line)));
-```
-```js
-function register(rl) {
- return rl
- .on("close", function($$event) {})
- .on("line", function(line) {
- console.log(line);
- });
-}
-```
-
-
-
-
-
-## Fixed Arguments
-
-Sometimes it's convenient to bind to a function using an `external`, while passing predetermined argument values to the JS function:
-
-
-
-```res example
-@val
-external processOnExit: (
- @as("exit") _,
- int => unit
-) => unit = "process.on"
-
-processOnExit(exitCode =>
- Console.log("error code: " ++ Int.toString(exitCode))
-);
-```
-```js
-process.on("exit", function (exitCode) {
- console.log("error code: " + exitCode.toString());
-});
-```
-
-
-
-The `@as("exit")` and the placeholder `_` argument together indicates that you want the first argument to compile to the string `"exit"`. You can also use any JSON literal with `as`: `` @as(json`true`) ``, `` @as(json`{"name": "John"}`) ``, etc.
-
-## Ignore arguments
-
-You can also explicitly "hide" `external` function parameters in the JS output, which may be useful if you want to add type constraints to other parameters without impacting the JS side:
-
-
-
-```res
-@val external doSomething: (@ignore 'a, 'a) => unit = "doSomething"
-
-doSomething("this only shows up in ReScript code", "test")
-```
-
-```js
-doSomething("test");
-```
-
-
-
-**Note:** It's a pretty niche feature, mostly used to map to polymorphic JS APIs.
-
-## Modeling `this`-based Callbacks
-
-Many JS libraries have callbacks which rely on this (the source), for example:
-
-```js
-x.onload = function(v) {
- console.log(this.response + v)
-}
-```
-
-Here, `this` would point to `x` (actually, it depends on how `onload` is called, but we digress). It's not correct to declare `x.onload` of type `(. unit) -> unit`. Instead, we introduced a special attribute, `this`, which allows us to type `x` as so:
-
-
-
-```res example
-type x
-@val external x: x = "x"
-@set external setOnload: (x, @this ((x, int) => unit)) => unit = "onload"
-@get external resp: x => int = "response"
-setOnload(x, @this (o, v) => Console.log(resp(o) + v))
-```
-```js
-x.onload = function (v) {
- var o = this;
- console.log((o.response + v) | 0);
-};
-```
-
-
-
-`@this` reserves the first parameter for the `this` value, and for arity of 0, there is no need for a redundant `unit` type.
-
-## Function Nullable Return Value Wrapping
-
-For JS functions that return a value that can also be `undefined` or `null`, we provide `@return(...)`. To automatically convert that value to an `option` type (recall that ReScript `option` type's `None` value only compiles to `undefined` and not `null`).
-
-
-
-```res example
-type element
-type dom
-
-@send @return(nullable)
-external getElementById: (dom, string) => option = "getElementById"
-
-let test = dom => {
- let elem = dom->(getElementById("haha"))
- switch (elem) {
- | None => 1
- | Some(_ui) => 2
- }
-}
-```
-```js
-function test(dom) {
- var elem = dom.getElementById("haha");
- if (elem == null) {
- return 1;
- } else {
- console.log(elem);
- return 2;
- }
-}
-
-```
-
-
-
-`return(nullable)` attribute will automatically convert `null` and `undefined` to `option` type.
-
-Currently 4 directives are supported: `null_to_opt`, `undefined_to_opt`, `nullable` and `identity`.
-
-
-
-`identity` will make sure that compiler will do nothing about the returned value. It is rarely used, but introduced here for debugging purpose.
-
-## Tagged template functions
-
-**Since 11.1**
-
-**Experimental** You can easily bind to [JS tagged template functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates).
-Tag functions in JS expect as input an array of strings and variadic parameters for the arguments of the interpolation.
-To bind to those functions in ReScript, the binding signature must have two arrays as arguments,
-the first one being an array of strings and the second can be an array of anything.
-You add the `@taggedTemplate` annotation and you're good to go!
-
-
-
-```res example
-// see https://bun.sh/docs/runtime/shell
-type result = {exitCode: int}
-@module("bun") @taggedTemplate
-external sh: (array, array) => promise = "$"
-
-let filename = "index.res"
-let result = await sh`ls ${filename}`
-```
-
-```js
-import * as $$Bun from "bun";
-var filename = "index.res";
-var result = await $$Bun.$`ls ${filename}`;
-```
-
-
-
-Notice that it gets compiled to tagged template literals in JS, which allows
-to use JS tools that only work on the literals and not by calling directly the tag function.
-
-There are plenty of useful JS tools you can bind to, like [`gql`](https://github.com/apollographql/graphql-tag),
-[`sql`](https://github.com/porsager/postgres), [`css`](https://github.com/mayank99/ecsstatic) and a lot others!
diff --git a/pages/docs/manual/v12.0.0/bind-to-js-object.mdx b/pages/docs/manual/v12.0.0/bind-to-js-object.mdx
deleted file mode 100644
index c6fcc831c..000000000
--- a/pages/docs/manual/v12.0.0/bind-to-js-object.mdx
+++ /dev/null
@@ -1,197 +0,0 @@
----
-title: "Bind to JS Object"
-description: "Interop with JS objects in ReScript"
-canonical: "/docs/manual/v12.0.0/bind-to-js-object"
----
-
-# Bind to JS Object
-
-JavaScript objects are a combination of several use-cases:
-
-- As a "record" or "struct" in other languages (like ReScript and C).
-- As a hash map.
-- As a class.
-- As a module to import/export.
-
-ReScript cleanly separates the binding methods for JS object based on these 4 use-cases. This page documents the first three. Binding to JS module objects is described in the [Import from/Export to JS](import-from-export-to-js.md) section.
-
-
-
-## Bind to Record-like JS Objects
-
-### Bind Using ReScript Record
-
-If your JavaScript object has fixed fields, then it's conceptually like a ReScript record. Since a ReScript record compiles to a clean JavaScript object, you can definitely type a JS object as a ReScript record!
-
-
-
-```res example
-type person = {
- name: string,
- friends: array,
- age: int,
-}
-
-@module("MySchool") external john: person = "john"
-
-let johnName = john.name
-```
-```js
-var MySchool = require("MySchool");
-
-var johnName = MySchool.john.name;
-```
-
-
-
-External is documented [here](external.md). `@module` is documented [here](import-from-export-to-js.md).
-
-If you want or need to use different field names on the ReScript and the JavaScript side, you can use the `@as` decorator:
-
-
-
-```res example
-type action = {
- @as("type") type_: string
-}
-
-let action = {type_: "ADD_USER"}
-```
-```js
-var action = {
- type: "ADD_USER"
-};
-```
-
-
-
-This is useful to map to JavaScript attribute names that cannot be expressed in ReScript (such as keywords).
-
-It is also possible to map a ReScript record to a JavaScript array by passing indices to the `@as` decorator:
-
-
-
-```res
-type t = {
- @as("0") foo: int,
- @as("1") bar: string,
-}
-
-let value = {foo: 7, bar: "baz"}
-```
-
-```js
-var value = [
- 7,
- "baz"
-];
-```
-
-
-
-
-### Bind Using ReScript Object
-
-Alternatively, you can use [ReScript object](object.md) to model a JS object too:
-
-
-
-```res example
-type person = {
- "name": string,
- "friends": array,
- "age": int,
-}
-
-@module("MySchool") external john: person = "john"
-
-let johnName = john["name"]
-```
-```js
-var MySchool = require("MySchool");
-
-var johnName = MySchool.john.name;
-```
-
-
-
-### Bind Using Special Getter and Setter Attributes
-
-Alternatively, you can use `get` and `set` to bind to individual fields of a JS object:
-
-
-
-```res example
-type textarea
-@set external setName: (textarea, string) => unit = "name"
-@get external getName: textarea => string = "name"
-```
-```js
-```
-
-
-
-You can also use `get_index` and `set_index` to access a dynamic property or an index:
-
-
-
-```res example
-type t
-@new external create: int => t = "Int32Array"
-@get_index external get: (t, int) => int = ""
-@set_index external set: (t, int, int) => unit = ""
-
-let i32arr = create(3)
-i32arr->set(0, 42)
-Console.log(i32arr->get(0))
-```
-```js
-var i32arr = new Int32Array(3);
-i32arr[0] = 42;
-console.log(i32arr[0]);
-```
-
-
-
-## Bind to Hash Map-like JS Object
-
-If your JavaScript object:
-
-- might or might not add/remove keys
-- contains only values that are of the same type
-
-Then it's not really an object, it's a hash map. Use [Dict](api/core/dict), which contains operations like `get`, `set`, etc. and cleanly compiles to a JavaScript object still.
-
-## Bind to a JS Object That's a Class
-
-Use `new` to emulate e.g. `new Date()`:
-
-
-
-```res example
-type t
-@new external createDate: unit => t = "Date"
-
-let date = createDate()
-```
-```js
-var date = new Date();
-```
-
-
-
-You can chain `new` and `module` if the JS module you're importing is itself a class:
-
-
-
-```res example
-type t
-@new @module external book: unit => t = "Book"
-let myBook = book()
-```
-```js
-var Book = require("Book");
-var myBook = new Book();
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/browser-support-polyfills.mdx b/pages/docs/manual/v12.0.0/browser-support-polyfills.mdx
deleted file mode 100644
index dbdeeeed7..000000000
--- a/pages/docs/manual/v12.0.0/browser-support-polyfills.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "Browser Support & Polyfills"
-description: "Note on browser support in ReScript"
-canonical: "/docs/manual/v12.0.0/browser-support-polyfills"
----
-
-# Browser Support & Polyfills
-
-ReScript compiles to JavaScript **ES5**, with the exception of optionally allowing to compile to ES6's module import & export.
-
-For [old browsers](https://caniuse.com/#search=typed%20array), you also need to polyfill TypedArray. The following standard library functions require it:
-
-- `Int64.float_of_bits`
-- `Int64.bits_of_float`
-- `Int32.float_of_bits`
-- `Int32.bits_of_float`
-
-If you don't use these functions, you're fine. Otherwise, it'll be a runtime failure.
diff --git a/pages/docs/manual/v12.0.0/build-configuration-schema.mdx b/pages/docs/manual/v12.0.0/build-configuration-schema.mdx
deleted file mode 100644
index a9c454341..000000000
--- a/pages/docs/manual/v12.0.0/build-configuration-schema.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: "Configuration Schema"
-metaTitle: "Build System Configuration Schema"
-description: "Schema exploration widget for the ReScript configuration file"
-canonical: "/docs/manual/v12.0.0/build-configuration-schema"
----
-
-import dynamic from "next/dynamic";
-
-export const Docson = dynamic(
- () =>
- import("src/components/Docson").then((comp) => {
- return comp.make;
- }),
- {
- ssr: false,
- loading: () =>
Loading...
,
- }
-);
-
-export default function BuildConfigurationSchemaPage() {
- return ;
-}
diff --git a/pages/docs/manual/v12.0.0/build-configuration.mdx b/pages/docs/manual/v12.0.0/build-configuration.mdx
deleted file mode 100644
index d7c7dfaa6..000000000
--- a/pages/docs/manual/v12.0.0/build-configuration.mdx
+++ /dev/null
@@ -1,245 +0,0 @@
----
-title: "Configuration"
-metaTitle: "Build System Configuration"
-description: "Details about the configuration of the ReScript build system (rescript.json)"
-canonical: "/docs/manual/v12.0.0/build-configuration"
----
-
-# Configuration
-
-`rescript.json` (or `bsconfig.json` in versions prior ReScript 11) is the single, mandatory build meta file needed for `rescript`.
-
-**The complete configuration schema is [here](./build-configuration-schema)**. We'll _non-exhaustively_ highlight the important parts in prose below.
-
-## name, namespace
-
-`name` is the name of the library, used as its "namespace". You can activate namespacing through `"namespace": true` in your `rescript.json`. Namespacing is almost **mandatory**; we haven't turned it on by default yet to preserve backward-compatibility.
-
-**Explanation**: by default, your files, once used as a third-party dependency, are available globally to the consumer. E.g. if you have a `Util.res` and the consumer also has a file of the same name, they will clash. Turning on `namespace` avoids this by wrapping all your own project's files into an extra module layer; instead of a global `Util` module, the consumer will see you as `MyProject.Util`. **The namespacing affects your consumers, not yourself**.
-
-Aka, in ReScript, "namespace" is just a fancy term for an auto-generated module that wraps all your project's files (efficiently and correctly, of course!) for third-party consumption.
-
-We don't do folder-level namespacing for your own project; all your own file names must be unique. This is a constraint that enables several features such as fast search and easier project reorganization.
-
-**Note**: the `rescript.json` `name` should be the same as the `package.json` `name`, to avoid confusing corner-cases. However, this means that you can't use a camelCased names such as `MyProject`, since `package.json` and npm forbid you to do so (some file systems are case-insensitive). To have the namespace/module as `MyProject`, write `"name": "my-project"`. ReScript will turn that into the camelCased name correctly.
-
-**Note on custom namespacing**: if for some reason, you need a namespace that is different from what your `name` will produce, you can directly send a string to the `namespace` option. For example, if your package is a binding named `bs-some-thing`, you can use `"namespace": "some-thing"` to get `SomeThing` namespace instead of `BsSomeThing`.
-
-## sources
-
-Your source files need to be specified explicitly (we don't want to accidentally drill down into some unrelated directories). Examples:
-
-```json
-{
- "sources": ["src", "examples"]
-}
-```
-
-```json
-{
- "sources": {
- "dir": "src",
- "subdirs": ["page"]
- }
-}
-```
-
-```json
-{
- "sources": [
- "examples",
- {
- "dir": "src",
- "subdirs": true // recursively builds every subdirectory
- }
- ]
-}
-```
-
-You can mark your directories as dev-only (for e.g. tests). These won't be built and exposed to third-parties, or even to other "dev" directories in the same project:
-
-```json
-{
- "sources": {
- "dir": "test",
- "type": "dev"
- }
-}
-```
-
-You can also explicitly allow which modules can be seen from outside. This feature is especially useful for library authors who want to have a single entry point for their users.
-Here, the file `src/MyMainModule.res` is exposed to outside consumers, while all other files are private.
-
-```json
-{
- "sources": {
- "dir": "src",
- "public": ["MyMainModule"]
- }
-}
-```
-
-## bs-dependencies, bs-dev-dependencies
-
-List of ReScript dependencies. Just like `package.json`'s dependencies, they'll be searched in `node_modules`.
-
-Note that only sources marked with `"type":"dev"` will be able to resolve modules from `bs-dev-dependencies`.
-
-## pinned-dependencies
-
-**Since 8.4**: List of pinned dependencies. A pinned dependency will always be rebuilt whenever you build a toplevel package (e.g. your main app) with `rescript`.
-
-This is useful for working on multiple independent ReScript packages simultaneously. More usage details can be found in our dedicated [pinned dependencies](./build-pinned-dependencies) page.
-
-## external-stdlib
-
-**Since 9.0**: This setting allows depending on an externally built stdlib package (instead of a locally built stdlib runtime). Useful for shipping packages that are only consumed in JS or TS without any dependencies to the ReScript development toolchain.
-
-More details can be found on our [external stdlib](./build-external-stdlib) page.
-
-## js-post-build
-
-Hook that's invoked every time a file is recompiled. Good for JS build system interop, but please use it **sparingly**. Calling your custom command for every recompiled file slows down your build and worsens the building experience for even third-party users of your lib.
-
-Example:
-
-```json
-{
- "js-post-build": {
- "cmd": "/path/to/node ../../postProcessTheFile.js"
- }
-}
-```
-
-Note that the path resolution for the command (`node` in this case) is done so:
-
-- `/myCommand` is resolved into `/myCommand`
-- `package/myCommand` is resolved into `node_modules/package/myCommand`
-- `./myCommand` is resolved into `myProjectRoot/myCommand`
-- `myCommand` is just called as `myCommand`, aka a globally available executable. But note that ReScript doesn't read into your shell's environment, so if you put e.g. `node`, it won't find it unless you specify an absolute path. Alternatively, add `#!/usr/local/bin/node` to the top of your script to directly call it without prepending `node`.
-
-The command itself is called from inside `lib/bs`.
-
-## package-specs
-
-Output to either CommonJS (the default) or JavaScript module. Example:
-
-```json
-{
- "package-specs": {
- "module": "commonjs",
- "in-source": true
- }
-}
-```
-
-- `"module": "commonjs"` generates output as CommonJS format.
-- `"module": "esmodule"` generates output as JavaScript module format. Will be default value in next major.
-- `"in-source": true` generates output alongside source files. If you omit it, it'll generate the artifacts into `lib/js`. The output directory is not configurable otherwise.
-
-This configuration only applies to you, when you develop the project. When the project is used as a third-party library, the consumer's own `rescript.json` `package-specs` overrides the configuration here, logically.
-
-## suffix
-
-**Since 11.0**: The suffix can now be freely chosen. However, we still suggest you stick to the convention and use
-one of the following:
-
-- `".js`
-- `".mjs"`
-- `".cjs"`
-- `".res.js"`
-- `".res.mjs"`
-- `".res.cjs"`
-
-### Design Decisions
-
-Generating JS files with the `.res.js` suffix means that, on the JS side, you can do `const myReScriptFile = require('./TheFile.res.js')`. The benefits:
-
-- It's immediately clear that we're dealing with a generated JS file here.
-- It avoids clashes with a potential `TheFile.js` file in the same folder.
-- It avoids the need of using a build system loader for ReScript files. This + in-source build means integrating a ReScript project into your pure JS codebase **basically doesn't touch anything in your build pipeline at all**.
-
-## uncurried
-
-**Since 11.0**: While we strongly encourage all users to use uncurried mode, it is still possible to opt out. Just set `"uncurried"` to `false` to get the old behavior back:
-
-```json
-{
- "uncurried": false
-}
-```
-
-More details can be found in the [blogpost about "Uncurried Mode"](/blog/uncurried-mode).
-
-## warnings
-
-Selectively turn on/off certain warnings and/or turn them into hard errors. Example:
-
-```json
-{
- "warnings": {
- "number": "-44-102",
- "error": "+5"
- }
-}
-```
-
-Turn off warning `44` and `102` (polymorphic comparison). Turn warning `5` (partial application whose result has function type and is ignored) into a hard error.
-
-The warning numbers are shown in the build output when they're triggered. See [Warning Numbers](./warning-numbers) for the complete list.
-
-## bsc-flags
-
-Extra flags to pass to the compiler. For advanced usages.
-
-- `-open ABC` opens the module `ABC` for each file in the project. `ABC` can either be a dependency, namespaced project or local module of the current project.
-
-## gentypeconfig
-
-To enable genType, set `"gentypeconfig"` at top level in the project's `rescript.json`.
-
-```json
-{
- "gentypeconfig": {
- "module": "esmodule",
- "moduleResolution": "node",
- "generatedFileExtension": ".gen.tsx",
- "debug": {
- "all": false,
- "basic": false
- }
- }
-}
-```
-
-`generatedFileExtension`: File extension used for genType generated files (defaults to `".gen.tsx"`)
-
-`module`: Module format used for the generated `*.gen.tsx` files (supports `"esmodule"` and `"commonjs"`)
-
-`moduleResolution`: Module resolution strategy used in genType outputs. This may be required for compatibility with TypeScript projects. Specify the value as the same in `tsconfig.json`.
-
-- `"node"`(default): Drop extensions in import paths.
-- `"node16"`: Use TS output's extension. This provides compatibility with projects using `"moduleResolution": "node16"` and ES Modules.
-- `"bundler"`: Use TS input's extension. This provides compatibility with projects using `"moduleResolution": "bundler"` and ES Modules. This also requires TS v5.0+ and `compilerOptions.allowImportingTsExtensions` to `true`
-
-`debug`: Enable debug logs.
-
-### Deprecated options
-
-`language`: the `language` setting is not required from compiler v10.1.
-
-`shims`: Required only if one needs to export certain basic ReScript data types to JS when one cannot modify the sources to add annotations (e.g. exporting ReScript lists), and if the types are not first-classed in genType.
-
-## Environment Variables
-
-We heavily disrecommend the usage of environment variables, but for certain cases, they're justified.
-
-### Error Output Coloring: `FORCE_COLOR`
-
-This is mostly for other programmatic usage of `rescript` where outputting colors is not desired.
-
-When `FORCE_COLOR` is set to `1`: `rescript` produces color.
-When `FORCE_COLOR` is set to `0`: `rescript` doesn't produce color.
-When `FORCE_COLOR` is not set: `rescript` might or might not produce color, depending on a smart detection of where it's outputted.
-
-> Note that the underlying compiler will always be passed `-color always`. See more details in [this issue](https://github.com/rescript-lang/rescript-compiler/issues/2984#issuecomment-410669163).
diff --git a/pages/docs/manual/v12.0.0/build-external-stdlib.mdx b/pages/docs/manual/v12.0.0/build-external-stdlib.mdx
deleted file mode 100644
index 66123a3dd..000000000
--- a/pages/docs/manual/v12.0.0/build-external-stdlib.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: "External Stdlib"
-metaTitle: "External Stdlib"
-description: "Configuring an external ReScript stdlib package"
-canonical: "/docs/manual/v12.0.0/build-external-stdlib"
----
-
-# External Stdlib
-
-**Since 9.0**
-
-Your ReScript project depends on the `rescript` package as a [`devDependency`](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file), which includes our compiler, build system and runtime like `Belt`. However, you had to move it to `dependency` in `package.json` if you publish your code:
-- To Docker or other low-storage deployment devices.
-- For pure JS/TS consumers who probably won't install `rescript` in their own project.
-
-In these cases, the size or mere presence of `rescript` can be troublesome, since it includes not just our necessary runtime like `Belt`, but also our compiler and build system.
-
-To solve that, we now publish our runtime as a standalone package at [`@rescript/std`](https://www.npmjs.com/package/@rescript/std), whose versions mirror `rescript`'s. Now you can keep `rescript` as a `devDependency` and have only `@rescript/std` as your runtime `dependency`.
-
-**This is an advanced feature**. Please only use it in the aforementioned scenarios. If you already use a JS bundler with dead code elimination, you might not need this feature.
-
-## Configuration
-
-Say you want to publish a JS-only ReScript 9.0 library. Install the packages like this:
-
-```sh
-npm install rescript@11.0.1 --save-dev
-npm install @rescript/std@11.0.1
-```
-
-Then add this to `rescript.json`:
-
-```json
-{
- // ...
- "external-stdlib" : "@rescript/std"
-}
-```
-
-Now the compiled JS code will import using the path defined by `external-stdlib`. Check the JS output tab:
-
-
-
-```res
-Array.forEach([1, 2, 3], num => Console.log(num))
-```
-
-```js
-// Note the require path starting with "@rescript/std".
-var Belt_Array = require("@rescript/std/lib/js/belt_Array.js");
-
-Belt_Array.forEach([1, 2, 3], function (num) {
- console.log(num);
-});
-```
-
-
-
-**Make sure the version number of `rescript` and `@rescript/std` match in your `package.json`** to avoid running into runtime issues due to mismatching stdlib assumptions.
diff --git a/pages/docs/manual/v12.0.0/build-overview.mdx b/pages/docs/manual/v12.0.0/build-overview.mdx
deleted file mode 100644
index e2a739220..000000000
--- a/pages/docs/manual/v12.0.0/build-overview.mdx
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: "Overview"
-metaTitle: "Build System Overview"
-description: "Documentation about the ReScript build system and its toolchain"
-canonical: "/docs/manual/v12.0.0/build-overview"
----
-
-# Build System Overview
-
-ReScript comes with a build system, [`rescript`](https://www.npmjs.com/package/rescript), that's fast, lean and used as the authoritative build system of the community.
-
-Every ReScript project needs a build description file, `rescript.json`.
-
-## Options
-
-See `rescript help`:
-
-```
-❯ rescript help
-Usage: rescript
-
-`rescript` is equivalent to `rescript build`
-
-Options:
- -v, -version display version number
- -h, -help display help
-
-Subcommands:
- build
- clean
- format
- convert
- dump
- help
-
-Run `rescript -h` for subcommand help. Examples:
- rescript build -h
- rescript format -h
-```
-
-## Build Project
-
-Each build will create build artifacts from your project's source files.
-
-**To build a project (including its dependencies / pinned-dependencies)**, run:
-
-```sh
-rescript
-```
-
-Which is an alias for `rescript build`.
-
-To keep a build watcher, run:
-
-```sh
-rescript -w
-```
-
-Any new file change will be picked up and the build will re-run.
-
-**Note**: third-party libraries (in `node_modules`, or via `pinned-dependencies`) aren't watched, as doing so may exceed the node.js watcher count limit.
-
-**Note 2**: In case you want to set up a project in a JS-monorepo-esque approach (`npm` and `yarn` workspaces) where changes in your sub packages should be noticed by the build, you will need to define pinned dependencies in your main project's `rescript.json`. More details [here](./build-pinned-dependencies).
-
-## Clean Project
-
-If you ever get into a stale build for edge-case reasons, use:
-
-```sh
-rescript clean
-```
-
-## Compile with stricter errors in CI
-
-**Since 11.1**
-
-You may want to compile your project with stricter rules for production, than when developing. With the `-warn-error` build flag, this can easily be done, for instance in a continuous integration script. E.g.:
-
-```sh
-rescript -warn-error +110
-```
-
-Here, warning number 110, which is triggered when a [`%todo`](/syntax-lookup#todo) has been found, gets promoted to an error. The full list of warning numbers can be found [here](/docs/manual/next/warning-numbers).
diff --git a/pages/docs/manual/v12.0.0/build-performance.mdx b/pages/docs/manual/v12.0.0/build-performance.mdx
deleted file mode 100644
index 7f358f548..000000000
--- a/pages/docs/manual/v12.0.0/build-performance.mdx
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: "Performance"
-metaTitle: "Build Performance"
-description: "ReScript build performance and measuring tools"
-canonical: "/docs/manual/v12.0.0/build-performance"
----
-
-# Build Performance
-
-ReScript considers performance at install time, build time and run time as a serious feature; it's one of those things you don't notice until you realize it's missing.
-
-## Profile Your Build
-
-Sometime your build can be slow due to some confused infra setups. We provide an interactive visualization of your build's performance via `bstracing`:
-
-```sh
-./node_modules/.bin/bstracing
-```
-
-Run the above command at your ReScript project's root; it'll spit out a JSON file you can drag and drop into `chrome://tracing`.
-
-import Image from "src/components/Image";
-
-
-
-## Under the Hood
-
-ReScript itself uses a build system under the hood, called [Ninja](https://ninja-build.org). Ninja is like Make, but cross-platform, minimal, focuses on perf and destined to be more of a low-level building block than a full-blown build system. In this regard, Ninja's a great implementation detail for `rescript`.
-
-ReScript reads into `rescript.json` and generates the Ninja build file in `lib/bs`. The file contains the low-level compiler commands, namespacing rules, intermediate artifacts generation & others. It then runs `ninja` for the actual build.
-
-## The JS Wrapper
-
-`rescript` itself is a Node.js wrapper which takes care of some miscellaneous tasks, plus the watcher. The lower-level, watcher-less, fast native `rescript` is called `rescript.exe`. It's located at `node_modules/rescript/{your-platform}/rescript.exe`.
-
-If you don't need the watcher, you can run said `rescript.exe`. This side-steps Node.js' long startup time, which can be in the order of `100ms`. Our editor plugin finds and uses this native `rescript.exe` for better performance.
-
-## Numbers
-
-Raw `rescript.exe` build on a small project should be around `70ms`. This doubles when you use the JS `rescript` wrapper which comes with a watcher, which is practically faster since you don't manually run the build at every change (though you should opt for the raw `rescript.exe` for programmatic usage, e.g. inserting rescript into your existing JS build pipeline).
-
-No-op build (when no file's changed) should be around `15ms`. Incremental rebuild (described soon) of a single file in a project is around `70ms` too.
-
-Cleaning the artifacts should be instantaneous.
-
-### Extreme Test
-
-We've stress-tested `rescript.exe` on a big project of 10,000 files (2 directories, 5000 files each, first 5000 no dependencies, last 5000 10 dependencies on files from the former directory) using https://github.com/rescript-lang/build-benchmark, on a Retina Macbook Pro Early 2015 (3.1 GHz Intel Core i7).
-
-
-
-- No-op build of 10k files: `800ms` (the minimum amount of time required to check the mtimes of 10k files).
-- Clean build: \<3 minutes.
-- Incremental build: depends on the number of the dependents of the file. No dependent means `1s`.
-
-### Stability
-
-`rescript` is a file-based build system. We don't do in-memory build, even if that speeds up the build a lot. In-memory builds risk memory leaks, out-of-memory errors, corrupt halfway build and others. Our watcher mode stays open for days or months with no leak.
-
-The watcher is also just a thin file watcher that calls `rescript.exe`. We don't like babysitting daemon processes.
-
-## Incrementality & Correctness
-
-ReScript doesn't take whole seconds to run every time. The bulk of the build performance comes from incremental build, aka re-building a previously built project when a few files changed.
-
-In short, thanks to our compiler and the build system's architecture, we're able to **only build what's needed**. E.g. if `MyFile.res` isn't changed, then it's not recompiled. You can roughly emulate such incrementalism in languages like JavaScript, but the degree of correctness is unfortunately low. For example, if you rename or move a JS file, then the watcher might get confused and not pick up the "new" file or fail to clean things up correctly, resulting in you needing to clean your build and restart anew, which defeats the purpose.
-
-Say goodbye to stale build from your JavaScript ecosystem!
-
-## Speed Up Incremental Build
-
-ReScript uses the concept of interface files (`.resi`) (or, equivalently, [module signatures](module.md#signatures)). Exposing only what you need naturally speeds up incremental builds. E.g. if you change a `.res` file whose corresponding `.resi` file doesn't expose the changed part, then you've reduced the amount of dependent files you have to rebuild.
-
-## Programmatic Usage
-
-Unfortunately, JS build systems are usually the bottleneck for building a JS project nowadays. Having parts of the build blazingly fast doesn't matter much if the rest of the build takes seconds or literally minutes. Here are a few suggestions:
-
-- Convert more files into ReScript =). Fewer files going through fewer parts of the JS pipeline helps a ton.
-- Careful with bringing in more dependencies: libraries, syntax transforms (e.g. the unofficially supported PPX), build step loaders, etc. The bulk of these dragging down the editing & building experience might out-weight the API benefits they provide.
-
-## Hot Reloading
-
-Hot reloading refers to maintaining a dev server and listening to file changes in a way that allows the server to pipe some delta changes right into the currently running browser page. This provides a relatively fast iteration workflow while working in specific frameworks.
-
-However, hot reloading is fragile by nature, and counts on the occasional inconsistencies (bad state, bad eval, etc.) and the heavy devserver setup/config being less of a hassle than the benefits it provides. We err on the side of caution and stability in general, and decided not to provide a built-in hot reloading _yet_. **Note**: you can still use the hot reloading facility provided by your JS build pipeline.
diff --git a/pages/docs/manual/v12.0.0/build-pinned-dependencies.mdx b/pages/docs/manual/v12.0.0/build-pinned-dependencies.mdx
deleted file mode 100644
index 405ac7f7c..000000000
--- a/pages/docs/manual/v12.0.0/build-pinned-dependencies.mdx
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: "Pinned Dependencies"
-metaTitle: "Pinned Dependencies"
-description: "Handling multiple packages within one ReScript project with pinned dependencies"
-canonical: "/docs/manual/v12.0.0/build-pinned-dependencies"
----
-
-# Pinned Dependencies
-
-Usually we'd recommend to use ReScript in a single-codebase style by using one `rescript.json` file for your whole codebase.
-
-There are scenarios where you still want to connect and build multiple independent ReScript packages for one main project though (`npm` workspaces-like "monorepos"). This is where `pinned-dependencies` come into play.
-
-## Package Types
-
-Before we go into detail, let's first explain all the different package types recognized by the build system:
-
-- Toplevel (this is usually the final app you are building, which has dependencies to other packages)
-- Pinned dependencies (these are your local packages that should always rebuild when you build your toplevel, those should be listed in `bs-dependencies` and `pinned-dependencies`)
-- Normal dependencies (these are packages that are consumed from npm and listed via `bs-dependencies`)
-
-Whenever a package is being built (`rescript build`), the build system will build the toplevel package with its pinned-dependencies. So any changes made in a pinned dependency will automatically be reflected in the final app.
-
-## Build System Package Rules
-
-The build system respects the following rules for each package type:
-
-**Toplevel**
-
-- Warnings reported
-- Warn-error respected
-- Builds dev dependencies
-- Builds pinned dependencies
-- Runs custom rules
-- Package-specs like JavaScript module or CommonJS overrides all its dependencies
-
-**Pinned dependencies**
-
-- Warnings reported
-- Warn-error respected
-- Ignores pinned dependencies
-- Builds dev dependencies
-- Runs custom rules
-
-**Normal dependencies**
-
-- Warnings, warn-error ignored
-- Ignores dev directories
-- Ignores pinned dependencies
-- Ignores custom generator rules
-
-So with that knowledge in mind, let's dive into some more concrete examples to see our pinned dependencies in action.
-
-## Examples
-
-### Yarn workspaces
-
-Let's assume we have a codebase like this:
-
-```
-myproject/
- app/
- - src/App.res
- - rescript.json
- common/
- - src/Header.res
- - rescript.json
- myplugin/
- - src/MyPlugin.res
- - rescript.json
- package.json
-```
-
-Our `package.json` file within our codebase root would look like this:
-
-```json
-{
- "name": "myproject",
- "private": true,
- "workspaces": {
- "packages": ["app", "common", "myplugin"]
- }
-}
-```
-
-Our `app` folder would be our toplevel package, consuming our `common` and `myplugin` packages as `pinned-dependencies`. The configuration for `app/rescript.json` looks like this:
-
-```json
-{
- "name": "app",
- "version": "1.0.0",
- "sources": {
- "dir": "src",
- "subdirs": true
- },
- /* ... */
- "bs-dependencies": ["common", "myplugin"],
- "pinned-dependencies": ["common", "myplugin"]
- /* ... */
-}
-```
-
-Now, whenever we are running `rescript build` within our `app` package, the compiler would always rebuild any changes within its pinned dependencies as well.
-
-**Important:** ReScript will not rebuild any `pinned-dependencies` in watch mode! This is due to the complexity of file watching, so you'd need to set up your own file-watcher process that runs `rescript build` on specific file changes.
diff --git a/pages/docs/manual/v12.0.0/control-flow.mdx b/pages/docs/manual/v12.0.0/control-flow.mdx
deleted file mode 100644
index 600684cb4..000000000
--- a/pages/docs/manual/v12.0.0/control-flow.mdx
+++ /dev/null
@@ -1,211 +0,0 @@
----
-title: "If-Else & Loops"
-description: "If, else, ternary, for, and while"
-canonical: "/docs/manual/v12.0.0/control-flow"
----
-
-# If-Else & Loops
-
-ReScript supports `if`, `else`, ternary expression (`a ? b : c`), `for` and `while`.
-
-ReScript also supports our famous pattern matching, which will be covered in [its own section](pattern-matching-destructuring.md)
-
-## If-Else & Ternary
-
-Unlike its JavaScript counterpart, ReScript's `if` is an expression; they evaluate to their body's content:
-
-
-
-```res
-let message = if isMorning {
- "Good morning!"
-} else {
- "Hello!"
-}
-```
-```js
-var message = isMorning ? "Good morning!" : "Hello!";
-```
-
-
-
-**Note:** an `if-else` expression without the final `else` branch implicitly gives `()` (aka the `unit` type). So this:
-
-
-
-```res
-if showMenu {
- displayMenu()
-}
-```
-```js
-if (showMenu) {
- displayMenu();
-}
-```
-
-
-
-is basically the same as:
-
-
-
-```res
-if showMenu {
- displayMenu()
-} else {
- ()
-}
-```
-```js
-if (showMenu) {
- displayMenu()
-}
-```
-
-
-
-Here's another way to look at it. This is clearly wrong:
-
-```res
-let result = if showMenu {
- 1 + 2
-}
-```
-
-It'll give a type error, saying basically that the implicit `else` branch has the type `unit` while the `if` branch has type `int`. Intuitively, this makes sense: what would `result`'s value be, if `showMenu` was `false`?
-
-We also have ternary sugar, but **we encourage you to prefer if-else when possible**.
-
-
-
-```res
-let message = isMorning ? "Good morning!" : "Hello!"
-```
-```js
-var message = isMorning ? "Good morning!" : "Hello!";
-```
-
-
-
-**`if-else` and ternary are much less used** in ReScript than in other languages; [Pattern-matching](pattern-matching-destructuring.md) kills a whole category of code that previously required conditionals.
-
-## For Loops
-
-For loops iterate from a starting value up to (and including) the ending value.
-
-
-
-```res
-for i in startValueInclusive to endValueInclusive {
- Console.log(i)
-}
-```
-```js
-for(var i = startValueInclusive; i <= endValueInclusive; ++i){
- console.log(i);
-}
-```
-
-
-
-
-
-```res example
-// prints: 1 2 3, one per line
-for x in 1 to 3 {
- Console.log(x)
-}
-```
-```js
-for(var x = 1; x <= 3; ++x){
- console.log(x);
-}
-```
-
-
-
-You can make the `for` loop count in the opposite direction by using `downto`.
-
-
-
-```res
-for i in startValueInclusive downto endValueInclusive {
- Console.log(i)
-}
-```
-```js
-for(var i = startValueInclusive; i >= endValueInclusive; --i){
- console.log(i);
-}
-```
-
-
-
-
-
-```res example
-// prints: 3 2 1, one per line
-for x in 3 downto 1 {
- Console.log(x)
-}
-```
-```js
-for(var x = 3; x >= 1; --x){
- console.log(x);
-}
-```
-
-
-
-## While Loops
-
-While loops execute its body code block while its condition is true.
-
-
-
-```res
-while testCondition {
- // body here
-}
-```
-```js
-while (testCondition) {
- // body here
-}
-```
-
-
-
-### Tips & Tricks
-
-There's no loop-breaking `break` keyword (nor early `return` from functions, for that matter) in ReScript. However, we can break out of a while loop easily through using a [mutable binding](mutation.md).
-
-
-
-```res example
-let break = ref(false)
-
-while !break.contents {
- if Math.random() > 0.3 {
- break := true
- } else {
- Console.log("Still running")
- }
-}
-```
-```js
-var $$break = {
- contents: false
-};
-
-while(!$$break.contents) {
- if (Math.random() > 0.3) {
- $$break.contents = true;
- } else {
- console.log("Still running");
- }
-};
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/converting-from-js.mdx b/pages/docs/manual/v12.0.0/converting-from-js.mdx
deleted file mode 100644
index 37ed1e330..000000000
--- a/pages/docs/manual/v12.0.0/converting-from-js.mdx
+++ /dev/null
@@ -1,303 +0,0 @@
----
-title: "Converting from JS"
-description: "How to convert to ReScript with an existing JS codebase"
-canonical: "/docs/manual/v12.0.0/converting-from-js"
----
-
-# Converting from JS
-
-ReScript offers a unique project conversion methodology which:
-- Ensures minimal disruption to your teammates (very important!).
-- Remove the typical friction of verifying conversion's correctness and performance guarantees.
-- Doesn't force you to search for pre-made binding libraries made by others. **ReScript doesn't need the equivalent of TypeScript's `DefinitelyTyped`**.
-
-## Step 1: Install ReScript
-
-Run `npm install rescript` on your project, then imitate our [New Project](installation#new-project) workflow by adding a `rescript.json` at the root. Then start `npx rescript -w`.
-
-## Step 2: Copy Paste the Entire JS File
-
-Let's work on converting a file called `src/main.js`.
-
-```js
-const school = require('school');
-
-const defaultId = 10;
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return school.getStudentById(defaultId);
- }
-}
-```
-
-First, copy the entire file content over to a new file called `src/Main.res` by using our [`%%raw` JS embedding trick](embed-raw-javascript):
-
-
-
-```res example
-%%raw(`
-const school = require('school');
-
-const defaultId = 10;
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return school.getStudentById(defaultId);
- }
-}
-`)
-```
-```js
-// Generated by ReScript, PLEASE EDIT WITH CARE
-'use strict';
-
-const school = require('school');
-
-const defaultId = 10;
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return school.getStudentById(defaultId);
- }
-}
-
-/* Not a pure module */
-```
-
-
-
-Add this file to `rescript.json`:
-
-```json
- "sources": {
- "dir" : "src",
- "subdirs" : true
- },
-```
-
-Open an editor tab for `src/Main.res.js`. Do a command-line `diff -u src/main.js src/Main.res.js`. Aside from whitespaces, you should see only minimal, trivial differences. You're already a third of the way done!
-
-**Always make sure** that at each step, you keep the ReScript output `.res.js` file open to compare against the existing JavaScript file. Our compilation output is very close to your hand-written JavaScript; you can simply eye the difference to catch conversion bugs!
-
-## Step 3: Extract Parts into Idiomatic ReScript
-
-Let's turn the `defaultId` variable into a ReScript let-binding:
-
-
-
-```res example
-let defaultId = 10
-
-%%raw(`
-const school = require('school');
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return school.getStudentById(defaultId);
- }
-}
-`)
-```
-```js
-// Generated by ReScript, PLEASE EDIT WITH CARE
-'use strict';
-
-const school = require('school');
-
-function queryResult(usePayload, payload) {
- if usePayload {
- return payload.student
- } else {
- return school.getStudentById(defaultId)
- }
-}
-
-var defaultId = 10;
-
-exports.defaultId = defaultId;
-/* Not a pure module */
-```
-
-
-
-Check the output. Diff it. Code still works. Moving on! Extract the function:
-
-
-
-```res
-%%raw(`
-const school = require('school');
-`)
-
-let defaultId = 10
-
-let queryResult = (usePayload, payload) => {
- if usePayload {
- payload.student
- } else {
- school.getStudentById(defaultId)
- }
-}
-```
-```js
-```
-
-
-
-Format the code: `./node_modules/.bin/rescript format src/Main.res`.
-
-We have a type error: "The record field student can't be found". That's fine! **Always ensure your code is syntactically valid first**. Fixing type errors comes later.
-
-## Step 4: Add `external`s, Fix Types
-
-The previous type error is caused by `payload`'s record declaration (which supposedly contains the field `student`) not being found. Since we're trying to convert as quickly as possible, let's use our [object](object) feature to avoid needing type declaration ceremonies:
-
-
-
-```res
-%%raw(`
-const school = require('school');
-`)
-
-let defaultId = 10
-
-let queryResult = (usePayload, payload) => {
- if usePayload {
- payload["student"]
- } else {
- school["getStudentById"](defaultId)
- }
-}
-```
-```js
-```
-
-
-
-Now this triggers the next type error, that `school` isn't found. Let's use [`external`](external) to bind to that module:
-
-
-
-```res example
-@module external school: 'whatever = "school"
-
-let defaultId = 10
-
-let queryResult = (usePayload, payload) => {
- if usePayload {
- payload["student"]
- } else {
- school["getStudentById"](defaultId)
- }
-}
-```
-```js
-// Generated by ReScript, PLEASE EDIT WITH CARE
-'use strict';
-
-var School = require("school");
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return School.getStudentById(10);
- }
-}
-
-var defaultId = 10;
-
-exports.defaultId = defaultId;
-exports.queryResult = queryResult;
-/* school Not a pure module */
-```
-
-
-
-We hurrily typed `school` as a polymorphic `'whatever` and let its type be inferred by its usage below. The inference is technically correct, but within the context of bringing it a value from JavaScript, slightly dangerous. This is just the interop trick we've shown in the [`external`](external) page.
-
-Anyway, the file passes the type checker again. Check the `.res.js` output, diff with the original `.js`; we've now converted a file over to ReScript!
-
-Now, you can delete the original, hand-written `main.js` file, and grep the files importing `main.js` and change them to importing `Main.res.js`.
-
-## (Optional) Step 5: Cleanup
-
-If you prefer more advanced, rigidly typed `payload` and `school`, feel free to do so:
-
-
-
-```res example
-type school
-type student
-type payload = {
- student: student
-}
-
-@module external school: school = "school"
-@send external getStudentById: (school, int) => student = "getStudentById"
-
-let defaultId = 10
-
-let queryResult = (usePayload, payload) => {
- if usePayload {
- payload.student
- } else {
- school->getStudentById(defaultId)
- }
-}
-```
-```js
-// Generated by ReScript, PLEASE EDIT WITH CARE
-'use strict';
-
-var School = require("school");
-
-function queryResult(usePayload, payload) {
- if (usePayload) {
- return payload.student;
- } else {
- return School.getStudentById(10);
- }
-}
-
-var defaultId = 10;
-
-exports.defaultId = defaultId;
-exports.queryResult = queryResult;
-/* school Not a pure module */
-```
-
-
-
-We've:
-- introduced an opaque types for `school` and `student` to prevent misuse of their values
-- typed the payload as a record with only the `student` field
-- typed `getStudentById` as the sole method of `student`
-
-Check that the `.res.js` output didn't change. How rigidly to type your JavaScript code is up to you; we recommend not typing them too elaborately; it's sometime an endless chase, and produces diminishing returns, especially considering that the elaborate-ness might turn off your potential teammates.
-
-## Tips & Tricks
-
-In the same vein of idea, **resist the urge to write your own wrapper functions for the JS code you're converting**. Use [`external`s](external), which are guaranteed to be erased in the output. And avoid trying to take the occasion to convert JS data structures into ReScript-specific data structures like variant or list. **This isn't the time for that**.
-
-The moment you produce extra conversion code in the output, your skeptical teammate's mental model might switch from "I recognize this output" to "this conversion might be introducing more problems than it solves. Why are we testing ReScript again?". Then you've lost.
-
-## Conclusion
-
-- Paste the JS code into a new ReScript file as embedded raw JS code.
-- Compile and keep the output file open. Check and diff against original JS file. Free regression tests.
-- Always make sure your file is syntactically valid. Don't worry about fixing types before that.
-- (Ab)use [object](object.md) accesses to quickly convert things over.
-- Optionally clean up the types for robustness.
-- Don't go overboard and turn off your boss and fellow teammates.
-- Proudly display that you've conserved the semantics and performance characteristics during the conversion by showing your teammates the eerily familiar output.
-- Get promoted for introducing a new technology the safer, mature way.
diff --git a/pages/docs/manual/v12.0.0/dict.mdx b/pages/docs/manual/v12.0.0/dict.mdx
deleted file mode 100644
index 07569fe66..000000000
--- a/pages/docs/manual/v12.0.0/dict.mdx
+++ /dev/null
@@ -1,161 +0,0 @@
----
-title: "Dictionary"
-description: "Dictionary data structure in ReScript"
-canonical: "/docs/manual/v12.0.0/dict"
----
-
-# Dictionary
-
-ReScript has first class support for dictionaries. Dictionaries are mutable objects with string keys, where all values must have the same type. Dicts compile to regular JavaScript objects at runtime.
-
-## Create
-
-You can create a new dictionary in a few different ways, depending on your use case.
-
-
-
-```res prelude
-// Using the first class dict syntax
-let d = dict{"A": 5, "B": 6}
-
-// Programatically via the standard library
-let d2 = Dict.fromArray([("A", 5), ("B", 6)])
-```
-
-```js
-let d = {
- A: 5,
- B: 6
-};
-
-let d2 = Object.fromEntries([
- [
- "A",
- 5
- ],
- [
- "B",
- 6
- ]
-]);
-
-```
-
-
-
-A few things to note here:
-
-* Using the first class `dict{}` syntax compiles cleanly to a JavaScript object directly
-* Using `Dict.fromArray` is useful when you need to create a dictionary programatically
-
-## Access
-
-You can access values from a Dictionary either via the the standard library `Dict` module functions, or using pattern matching.
-
-
-
-```res prelude
-let d = dict{"A": 5, "B": 6, "C": 7}
-
-// Using `Dict.get`
-let a = d->Dict.get("A")
-
-// Switching on the full dict
-let b = switch d {
-| dict{"B": b} => Some(b)
-| _ => None
-}
-
-// Destructuring
-let dict{"C": ?c} = d
-```
-
-```js
-let d = {
- A: 5,
- B: 6,
- C: 7
-};
-
-let a = d["A"];
-
-let b = d.B;
-
-let b$1 = b !== undefined ? b : undefined;
-
-let c = d.C;
-```
-
-
-> In the Destructuring example, we're using the `?` optional pattern match syntax to pull out the `C` key value as an optional, regardless of if the dict has it or not.
-
-## Pattern matching
-Dictionaries have first class support for pattern matching. Read more in the [dedicated guide on pattern matching and destructring in ReScript](pattern-matching-destructuring.md#match-on-dictionaries).
-
-## Updating and setting values
-
-You can set and update new values on your dictionary using the `Dict.set` function. All updates are mutable.
-
-
-
-```res prelude
-let d = dict{"A": 5, "B": 6}
-
-d->Dict.set("C", 7)
-```
-
-```js
-let d = {
- A: 5,
- B: 6
-};
-
-d["C"] = 7;
-```
-
-
-
-## Advanced example: Pattern matching on JSON
-
-JSON objects are represented as dictionaries (`dict`). You can leverage that fact to decode JSON in a nice way, using only language features:
-
-
-
-```res prelude
-type user = {
- name: string,
- email: string,
-}
-
-/** Decode JSON to a `user`. */
-let decodeUser = (json: JSON.t) => {
- switch json {
- | Object(dict{"name": JSON.String(name), "email": JSON.String(email)}) =>
- Some({name, email})
- | _ => None
- }
-}
-
-```
-
-```js
-function decodeUser(json) {
- if (typeof json !== "object" || json === null || Array.isArray(json)) {
- return;
- }
- let name = json.name;
- if (typeof name !== "string") {
- return;
- }
- let email = json.email;
- if (typeof email === "string") {
- return {
- name: name,
- email: email
- };
- }
-
-}
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/editor-code-analysis.mdx b/pages/docs/manual/v12.0.0/editor-code-analysis.mdx
deleted file mode 100644
index cce661ff3..000000000
--- a/pages/docs/manual/v12.0.0/editor-code-analysis.mdx
+++ /dev/null
@@ -1,158 +0,0 @@
----
-title: "Dead Code Analysis in ReScript"
-metaTitle: "Dead Code Analysis in ReScript"
-description: "Documentation about ReScript editor plugins and code analysis"
-canonical: "/docs/manual/v12.0.0/editor-plugins"
----
-
-# Dead Code Analysis in ReScript
-
-This guide provides a detailed walkthrough on how to leverage ReScript’s powerful dead code analysis tools to maintain a clean, efficient, and distraction-free codebase.
-
-Dead code refers to code that's present in your codebase but is never executed. It can lead to:
-
-- Increased compilation times
-- Confusion during development
-- Misleading assumptions about functionality
-
-ReScript’s language design allows for accurate and efficient dead code analysis using the **ReScript Code Analyzer**, available via the official VSCode extension.
-
-### Prerequisites
-
-- ReScript VSCode extension (v1.8.2 or higher)
-
-### Activation
-
-1. Open the Command Palette: `Cmd/Ctrl + P`
-2. Run: `> ReScript: Start Code Analyzer`
-
-### Deactivation
-
-- Run: `> ReScript: Stop Code Analyzer`
-- Or click “Stop Code Analyzer” in the status bar
-
-### Result
-
-- The “Problems” pane populates with dead code warnings and suggestions.
-
-## Real-World Use Cases
-
-### 1. **Unused Record Fields**
-
-```rescript
-type useReturn = {
- items: array,
- toggleItemChecked: string => unit, // ← Never used
- setCheckedOnItem: (string, bool) => unit,
- checkAll: unit => unit,
- uncheckAll: unit => unit,
-}
-```
-
-Remove unused fields to simplify code.
-
-### 2. **Unused Variant Cases**
-
-```rescript
-type textType =
- | Text(string)
- | TextWithIcon({icon: React.element, text: string})
- | Render(React.element) // ← Never constructed
-```
-
-Removing unused variants allows simplifying rendering logic.
-
-### 3. **Unused Parts of State**
-
-```rescript
-type validationState = Idle | Invalid | Valid
-
-type state = {
- oldPassword: string,
- newPassword: string,
- newPasswordRepeated: string,
- validationState: validationState, // ← Never read
-}
-```
-
-Old validation logic might remain after refactors—clean it up.
-
-### 4. **Unnecessary Interface Exposure**
-
-```rescript
-// DrilldownTarget.resi
-MetricParam.parse // ← Never used
-MetricParam.serialize // ← Never used
-```
-
-Keep interfaces minimal by removing unused exports.
-
-### 5. **Unused Functions**
-
-```rescript
-let routerUrlToPath = ... // ← Never used
-let routeUrlStartsWith = ... // ← Never used
-```
-
-Removing these often uncovers further unused logic.
-
-### 6. **Unused Components**
-
-Components never referenced in production should be removed, unless explicitly preserved.
-
-
-## Keeping Some Dead Code
-
-### Use `@dead` and `@live`
-
-#### `@dead`
-
-Suppresses warnings but notifies if code becomes alive again.
-
-```rescript
-type user = {
- name: string,
- @dead age: int,
-}
-```
-
-#### `@live`
-
-Permanently marks code as alive (no future warnings).
-
-```rescript
-@live
-let getUserName = user => user.name
-```
-
-## Configuration
-
-Add to your `rescript.json`:
-
-```json
-"reanalyze": {
- "analysis": ["dce"],
- "suppress": ["src/bindings", "src/stories", "src/routes"],
- "unsuppress": [],
- "transitive": false
-}
-```
-
-### Options:
-
-- **analysis**: Enables dead code analysis (`"dce"`)
-- **suppress**: Silences reporting for paths (still analyzes)
-- **unsuppress**: Re-enables reports within suppressed paths
-- **transitive**: Controls reporting of indirectly dead code
-
-**Recommendation:** Set `transitive: false` for incremental cleanup.
-
-## Summary
-
-ReScript’s dead code analyzer helps you:
-
-- Incrementally clean up your codebase
-- Avoid confusion and complexity
-- Improve long-term maintainability
-
-Use it regularly for the best results.
diff --git a/pages/docs/manual/v12.0.0/editor-plugins.mdx b/pages/docs/manual/v12.0.0/editor-plugins.mdx
deleted file mode 100644
index 331b6e2b0..000000000
--- a/pages/docs/manual/v12.0.0/editor-plugins.mdx
+++ /dev/null
@@ -1,205 +0,0 @@
----
-title: "Editor"
-metaTitle: "Editor"
-description: "Documentation about ReScript editor plugins and code analysis"
-canonical: "/docs/manual/v12.0.0/editor-plugins"
----
-
-# Editor
-
-This section is about the editor plugin for ReScript. It adds syntax highlighting, autocomplete, type hints, formatting, code navigation, code analysis for `.res` and `.resi` files.
-
-
-## Plugins
-
-- [VSCode](https://marketplace.visualstudio.com/items?itemName=chenglou92.rescript-vscode)
-- [Sublime Text](https://github.com/rescript-lang/rescript-sublime)
-- [Vim/Neovim](https://github.com/rescript-lang/vim-rescript)
-
-### Community Supported
-
-We don't officially support these; use them at your own risk!
-
-- [Neovim Tree-sitter](https://github.com/nkrkv/nvim-treesitter-rescript)
-- [IDEA](https://github.com/reasonml-editor/reasonml-idea-plugin)
-- [Emacs](https://github.com/jjlee/rescript-mode)
-
-
-## Code analysis
-
-The code analysis provides extra checks for your ReScript project, such as detecting dead code and unhandled exceptions. It's powered by [reanalyze](https://github.com/rescript-association/reanalyze), which is built into the extension — no separate install required.
-
-### How to Use
-
-- Open the command palette and run:
- `ReScript: Start Code Analyzer`
-- Warnings like dead code will show inline in the editor.
-- Suppression actions are available where applicable.
-- To stop analysis, click **Stop Code Analyzer** in the status bar.
-
-### Configuration
-
-Add a `reanalyze` section to your `rescript.json` to control what the analyzer checks or ignores. You’ll get autocomplete for config options in the editor.
-More details: [reanalyze config docs](https://github.com/rescript-association/reanalyze#configuration-via-bsconfigjson)
-
-### Guide
-
-Look [here](editor-code-analysis) for a more detailed guide about how to use the code analysis tool.
-
-### Caveats
-
-- Doesn't support cross-package dead code analysis in monorepos. Run it per package instead.
-
-## Editor features
-Below are features and configurations of the editor tooling that might be good to know about.
-
-### Pipe completions
-Pipes (`->`) are a huge and important part of the ReScript language, for many reasons. Because of that, extra care has gone into the editor experience for using pipes.
-
-#### Default pipe completion rules for non-builtin types
-By default, using `->` will give completions from the module where the type of the expression you're piping on is defined. So, if you're piping on something of the type `SomeModule.t` (like `someValue->`) then you'll get completions for all functions defined in `SomeModule` that take the type `t` as the first unlabelled argument.
-
-#### Pipe completions for builtin types
-For builtin types, completion will automatically happen based on the _standard library module_ for that type. So, `array` types will get completions from the `Array` module, `string` gets completions from `String`, and so on.
-
-There is a way to enhance this behavior via configuration, described further down in this document.
-
-### Dot completion enhancements
-In ReScript, using a dot (`.`) normally means "access record field". But, because using `.` to trigger completions is so pervasive in for example JavaScript, we extend `.` to trigger completions in more scenarios than just for record field access.
-
-This behavior has the following important implications:
-- Improves discoverability (E.g. using a `.` will reveal important pipe completions)
-- Enables a more natural completion flow for people used to JavaScript, where dots power more completions naturally
-
-Below is a list of all the scenarios where using dots trigger completion in addition to the normal record field completion.
-
-#### Objects
-When writing a `.` on something that's a [structural object](object.md), you'll get completions for those object properties. Example:
-```res
-let obj = {
- "first": true,
- "second": false
-}
-
-let x = obj.
-
-// Will give the following completions for object property access:
-// - ["first"]
-// - ["second"]
-```
-
-#### Pipe completions for anything
-When writing `.` on _anything_, the editor will try to do pipe completion for the value on the left of the `.`. Example:
-
-```res
-let arr = [1, 2, 3]
-
-let x = arr.
-
-// Will give the following pipe completions:
-// - ->Array.length
-// - ->Array.filter
-// - ->Array.map
-```
-
-### `@editor.completeFrom` for drawing completions from additional modules
-You can configure any type you have control over to draw pipe completions from additional modules, in addition to the main module where the type is defined, via the `@editor.completeFrom` decorator. This is useful in many different scenarios:
-
-* When you, for various reasons, need to have your type definition separate from its "main module". Could be because of cyclic dependencies, a need for the type to be in a recursive type definition chain, and so on.
-* You have separate modules with useful functions for your type but that you don't want to (or can't) include in the main module of that type.
-
-Let's look at an example:
-```res
-// Types.res
-// In this example types need to live separately in their own file, for various reasons
-type htmlInput
-
-// Utils.res
-module HtmlInput = {
- /** Gets the HTML input value. */
- @get
- external value: Types.htmlInput => option = "value"
-}
-```
-
-In the example above, if we try and pipe on something of the type `Types.htmlInput`, we'll get no completions because there are no functions in `Types` that take `htmlInput` as its first unlabelled argument. But, better DX would be for the editor to draw completions from our util functions for `htmlInput` in the `Utils.HtmlInput` module.
-
-With `@editor.completeFrom`, we can fix this. Let's look at an updated example:
-```res
-// Types.res
-@editor.completeFrom(Utils.HtmlInput)
-type htmlInput
-
-// Utils.res
-module HtmlInput = {
- /** Gets the HTML input value. */
- @get
- external value: Types.htmlInput => option = "value"
-}
-```
-
-Now when piping on a value of the type `Types.htmlInput`, the editor tooling will know to include relevant functions from the module `Utils.HtmlInput`, and you'll get the completions you expect, even if the functions aren't located in the same module.
-
-> You can point out multiple modules to draw completions from for a type either by repeating `@editor.completeFrom` with a single module path each time, or by passing an array with all the module paths you want to include, like `@editor.completeFrom([Utils.HtmlInput, HtmlInputUtils])`.
-
-### Configuring the editor via `editor` in `rescript.json`
-There's certain configuration you can do for the editor on a per project basis in `rescript.json`. Below lists all of the configuration available.
-
-#### `autocomplete` for pipe completion
-The `autocomplete` property of `editor` in `rescript.json` let's you map types to modules _on the project level_ that you want the editor to leverage when doing autocomplete for pipes.
-
-This is useful in scenarios like:
-* You have your own util module(s) for builtin types. Maybe you have an `ArrayExtra` with helpers for arrays that you want to get completions from whenever dealing with arrays.
-* You have your own util module(s) for types you don't control yourself (and therefore can't use `@editor.completeFrom`), like from external packages you install.
-
-To configure, you pass `autocomplete` an object where the keys are the _path to the type_ you want to target, and then an array of the path to each module you want to include for consideration for pipe completions.
-
-Let's take two examples.
-
-##### Enhancing completion for builtin types
-First, let's look at including our own `ArrayExtra` in all completions for `array`:
-```json
-{
- "editor": {
- "autocomplete": {
- "array": ["ArrayExtra"]
- }
- }
-}
-```
-
-Now, when using pipes on arrays, you'll get completions both from the standard library array functions, and also from your own `ArrayExtra` module.
-```res
-let x = [1, 2, 3]->
-
-// Example of what completing at the pipe might look like
-- Array.length
-- Array.map
-- Array.filter
-- ArrayExtra.someArrayFn
-- ArrayExtra.myOtherArrayFn
-```
-
-##### Enhancing completion for non-builtin types
-Now, let's look at an example of when you have a non-builtin type that you don't have control over.
-
-In this example, imagine this:
-* We're writing an app using `fastify`
-* We're using an external package that provides the necessary bindings in a `Fastify` module
-* We've got our own extra file `FastifyExtra` that has various custom util functions that operate on the main type `Fastify.t`
-
-We now want the editor to always suggest completions from the `FastifyExtra` module, in addition to the regular completions from the main `Fastify` module.
-
-Let's configure this using the `editor.autocomplete` config in `rescript.json`:
-
-```json
-{
- "editor": {
- "autocomplete": {
- "Fastify.t": ["FastifyExt"]
- }
- }
-}
-```
-
-Now, when using pipes on anything of type `Fastify.t`, we'll also get completions from our custom `FastifyExtra`.
diff --git a/pages/docs/manual/v12.0.0/embed-raw-javascript.mdx b/pages/docs/manual/v12.0.0/embed-raw-javascript.mdx
deleted file mode 100644
index b42675f4c..000000000
--- a/pages/docs/manual/v12.0.0/embed-raw-javascript.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: "Embed Raw JavaScript"
-description: "Utility syntax to for raw JS usage in ReScript"
-canonical: "/docs/manual/v12.0.0/embed-raw-javascript"
----
-
-# Embed Raw JavaScript
-
-## Paste Raw JS Code
-
-First thing first. If you're ever stuck learning ReScript, remember that you can always just paste raw JavaScript code into our source file:
-
-
-
-```res example
-%%raw(`
-// look ma, regular JavaScript!
-var message = "hello";
-function greet(m) {
- console.log(m)
-}
-`)
-```
-```js
-// look ma, regular JavaScript!
-var message = "hello";
-function greet(m) {
- console.log(m)
-}
-```
-
-
-
-The `%%raw` special ReScript call takes your code string and pastes it as-is into the output. **You've now technically written your first ReScript file!**
-
-(The back tick syntax is a multiline string, similar to JavaScript's. Except for us, no escaping is needed inside the string. More on string in a later section.)
-
-While `%%raw` lets you embed top-level raw JS code, `%raw` lets you embed expression-level JS code:
-
-
-
-```res example
-let add = %raw(`
- function(a, b) {
- console.log("hello from raw JavaScript!");
- return a + b
- }
-`)
-
-Console.log(add(1, 2))
-```
-```js
-var add = function(a, b) {
- console.log("hello from raw JavaScript!");
- return a + b
-};
-
-console.log(add(1, 2));
-```
-
-
-
-The above code:
-- declared a ReScript variable `add`,
-- with the raw JavaScript value of a function declaration,
-- then called that function in ReScript.
-
-If your boss is ever worried that your teammates can't adopt ReScript, just let them keep writing JavaScript inside ReScript files =).
-
-## Debugger
-
-You can also drop a `%debugger` expression in a body:
-
-
-
-```res example
-let f = (x, y) => {
- %debugger
- x + y
-}
-```
-```js
-function f(x, y) {
- debugger;
- return x + y | 0;
-}
-```
-
-
-
-Output:
-
-```js
-function f(x, y) {
- debugger; // JavaScript developer tools will set an breakpoint and stop here
- x + y;
-}
-```
-
-## Tips & Tricks
-
-Embedding raw JS snippets isn't the best way to experience ReScript, though it's also highly useful if you're just starting out. As a matter of fact, the first few ReScript projects were converted through:
-
-- pasting raw JS snippets inside a file
-- examining the JS output (identical to the old hand-written JS)
-- gradually extract a few values and functions and making sure the output still looks OK
-
-At the end, we get a fully safe, converted ReScript file whose JS output is clean enough that we can confidently assert that no new bug has been introduced during the conversion process.
-
-We have a small guide on this iteration [here](converting-from-js.md). Feel free to peruse it later.
diff --git a/pages/docs/manual/v12.0.0/equality-comparison.mdx b/pages/docs/manual/v12.0.0/equality-comparison.mdx
deleted file mode 100644
index d3dc3f302..000000000
--- a/pages/docs/manual/v12.0.0/equality-comparison.mdx
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: "Equality and Comparison"
-description: "Handling equality and comparison checks"
-canonical: "/docs/manual/v12.0.0/equality-comparison"
----
-
-# Equality and Comparison
-
-ReScript has shallow equality `===`, deep equality `==`, and comparison operators `>`, `>=`, `<`, and `<=`.
-
-## Shallow equality
-The shallow equality operator `===` compares two values and either compiles to `===` or a `bool` if the equality is known to the compiler.
-It behaves the same as the strict equality operator `===` in JavaScript.
-
-Using `===` will never add a runtime cost.
-
-
-
-```res
-let t1 = 1 === 1 // true
-let t2 = "foo" === "foo" // true
-let t3 = { "foo": "bar" } === { "foo": "bar"} // false
-
-let doStringsMatch = (s1: string, s2: string) => s1 === s2
-```
-```js
-var t1 = true;
-var t2 = "foo" === "foo";
-var t3 = ({ foo: "bar" }) === ({ foo: "bar" });
-
-function doStringsMatch(s1, s2) {
- return s1 === s2;
-}
-```
-
-
-
-## Deep equality
-ReScript has the deep equality operator `==` to check deep equality of two items, which is very different from the loose equality operator like `==` in JavaScript.
-
-When using `==` in ReScript it will never compile to `==` in JavaScript,
-it will either compile to `===`, a runtime call to an internal function that deeply compares the equality, or a `bool` if the equality is known to the compiler.
-
-
-
-```res
-let t1 = 1 == 1 // true
-let t2 = "foo" == "foo" // true
-let t3 = { "foo": "bar" } == { "foo": "bar"} // true
-
-let doStringsMatch = (s1: string, s2: string) => s1 == s2
-```
-```js
-import * as Caml_obj from "./stdlib/caml_obj.js";
-
-var t1 = true;
-var t2 = true;
-var t3 = Caml_obj.equal({ foo: "bar" }, { foo: "bar" });
-
-function doStringsMatch(s1, s2) {
- return s1 === s2;
-}
-```
-
-
-`==` will compile to `===` (or a `bool` if the compiler can determine equality) when:
-
-- Comparing `string`, `char`, `int`, `float`, `bool`, or `unit`
-- Comparing variants or polymorphic variants that do not have constructor values
-
-`==` will compile to a runtime check for deep equality when:
-- Comparing `array`, `tuple`, `list`, `object`, `record`, or regular expression `Re.t`
-- Comparing variants or polymorphic variants that have constructor values
-
-> When using `==` pay close attention to the JavaScript output if you're not sure what `==` will compile to.
-
-## Comparison
-ReScript has operators for comparing values that compile to the the same operator in JS, a runtime check using an internal function, or a `bool` if the equality is known to the compiler,
-
-| operator | comparison |
-| --- | ----------- |
-| `>` | greater than |
-| `>=` | greater than or equal |
-| `<` | less than |
-| `<=` | less than or equal |
-
-Comparison can be done on any type.
-
-An operator will compile to the same operator (or a `bool` if the compiler can determine equality) when:
-- Comparing `int`, `float`, `string`, `char`, `bool`
-
-An operator will compile to a runtime check for deep equality when:
-- Comparing `array`, `tuple`, `list`, `object`, `record`, or regular expression (`Re.t`)
-- Comparing variants or polymorphic variants
-
-
-
-```res
-let compareInt = (a: int, b: int) => a > b
-let t1 = 1 > 10
-let compareArray = (a: array, b: array) => a > b
-let compareOptions = (a: option, b: option) => a < b
-```
-```js
-import * as Caml_obj from "./stdlib/caml_obj.js";
-
-function compareInt(a, b) {
- return a > b;
-}
-
-var t1 = false;
-
-var compareArray = Caml_obj.greaterthan;
-
-var compareOptions = Caml_obj.lessthan;
-```
-
-
-## Performance of runtime equality checks
-The runtime equality check ReScript uses is quite fast and should be adequate for almost all use cases.
-For small objects it can be 2x times faster than alternative deep compare functions such as Lodash's [`_.isEqual`](https://lodash.com/docs/4.17.15#isEqual).
-
-For larger objects instead of using `==` you could manually use a faster alternative such as [fast-deep-compare](https://www.npmjs.com/package/fast-deep-equal), or write a custom comparator function.
-
-[This repo](https://github.com/jderochervlk/rescript-perf) has benchmarks comparing results of different libraries compared to ReScript's built-in equality function.
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/exception.mdx b/pages/docs/manual/v12.0.0/exception.mdx
deleted file mode 100644
index 176c48c9e..000000000
--- a/pages/docs/manual/v12.0.0/exception.mdx
+++ /dev/null
@@ -1,514 +0,0 @@
----
-title: "Exception"
-description: "Exceptions and exception handling in ReScript"
-canonical: "/docs/manual/v12.0.0/exception"
----
-
-# Exception
-
-Exceptions are just a special kind of variant, thrown in **exceptional** cases (don't abuse them!). Consider using the [`option`](null-undefined-option.mdx) or [`result`](api/core/result) type for recoverable errors.
-
-You can create your own exceptions like you'd make a variant (exceptions need to be capitalized too).
-
-
-
-```res example
-exception InputClosed(string)
-// later on
-throw(InputClosed("The stream has closed!"))
-```
-```js
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-let InputClosed = /* @__PURE__ */Primitive_exceptions.create("Playground.InputClosed");
-
-throw {
- RE_EXN_ID: InputClosed,
- _1: "The stream has closed!",
- Error: new Error()
-};
-```
-
-
-
-## Built-in Exceptions
-
-ReScript has some built-in exceptions:
-
-### `Not_found`
-
-
-
-```res prelude
-let getItem = (item: int) =>
- if (item === 3) {
- // return the found item here
- 1
- } else {
- throw(Not_found)
- }
-
-let result =
- try {
- getItem(2)
- } catch {
- | Not_found => 0 // Default value if getItem throws
- }
-```
-```js
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-function getItem(item) {
- if (item === 3) {
- return 1;
- }
- throw {
- RE_EXN_ID: "Not_found",
- Error: new Error()
- };
-}
-
-let result;
-
-try {
- result = getItem(2);
-} catch (raw_exn) {
- let exn = Primitive_exceptions.internalToException(raw_exn);
- if (exn.RE_EXN_ID === "Not_found") {
- result = 0;
- } else {
- throw exn;
- }
-}
-```
-
-
-
-Note that the above is just for demonstration purposes; in reality, you'd return an `option` directly from `getItem` and avoid the `try` altogether.
-
-You can directly match on exceptions _while_ getting another return value from a function:
-
-
-
-```res prelude
-switch list{1, 2, 3}->List.getExn(4) {
-| item => Console.log(item)
-| exception Not_found => Console.log("No such item found!")
-}
-```
-```js
-import * as Stdlib_List from "./stdlib/Stdlib_List.js";
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-let exit = 0;
-
-let item;
-
-try {
- item = Stdlib_List.getExn({
- hd: 1,
- tl: {
- hd: 2,
- tl: {
- hd: 3,
- tl: /* [] */0
- }
- }
- }, 4);
- exit = 1;
-} catch (raw_exn) {
- let exn = Primitive_exceptions.internalToException(raw_exn);
- if (exn.RE_EXN_ID === "Not_found") {
- console.log("No such item found!");
- } else {
- throw exn;
- }
-}
-
-if (exit === 1) {
- console.log(item);
-}
-```
-
-
-
-### `Invalid_argument`
-
-Used to check if argument is valid. This exception takes a string.
-
-
-```res example
-let divide = (a, b) =>
- if b == 0 {
- throw(Invalid_argument("Denominator is zero"))
- } else {
- a / b
- }
-
-// catch error
-try divide(2, 0)->Console.log catch {
-| Invalid_argument(msg) => Console.log(msg) // Denominator is zero
-}
-```
-
-```js
-import * as Primitive_int from "./stdlib/Primitive_int.js";
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-function divide(a, b) {
- if (b === 0) {
- throw {
- RE_EXN_ID: "Invalid_argument",
- _1: "Denominator is zero",
- Error: new Error()
- };
- }
- return Primitive_int.div(a, b);
-}
-
-try {
- console.log(divide(2, 0));
-} catch (raw_msg) {
- let msg = Primitive_exceptions.internalToException(raw_msg);
- if (msg.RE_EXN_ID === "Invalid_argument") {
- console.log(msg._1);
- } else {
- throw msg;
- }
-}
-```
-
-
-
-### `Assert_failure`
-
-Thrown when you use `assert(condition)` and `condition` is false. The arguments
-are the location of the `assert` in the source code (file name, line number, column number).
-
-
-
-```res example
-let decodeUser = (json: JSON.t) =>
- switch json {
- | Object(userDict) =>
- switch (userDict->Dict.get("name"), userDict->Dict.get("age")) {
- | (Some(String(name)), Some(Number(age))) => (name, age->Float.toInt)
- | _ => assert(false)
- }
- | _ => assert(false)
- }
-
-
-try decodeUser(%raw("{}"))->Console.log catch {
-| Assert_failure(loc) => Console.log(loc) // ("filename", line, col)
-}
-```
-
-```js
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-function decodeUser(json) {
- if (typeof json === "object" && json !== null && !Array.isArray(json)) {
- let match = json["name"];
- let match$1 = json["age"];
- if (typeof match === "string" && typeof match$1 === "number") {
- return [
- match,
- match$1 | 0
- ];
- }
- throw {
- RE_EXN_ID: "Assert_failure",
- _1: [
- "playground.res",
- 6,
- 11
- ],
- Error: new Error()
- };
- }
- throw {
- RE_EXN_ID: "Assert_failure",
- _1: [
- "playground.res",
- 8,
- 9
- ],
- Error: new Error()
- };
-}
-
-try {
- console.log(decodeUser({}));
-} catch (raw_loc) {
- let loc = Primitive_exceptions.internalToException(raw_loc);
- if (loc.RE_EXN_ID === "Assert_failure") {
- console.log(loc._1);
- } else {
- throw loc;
- }
-}
-```
-
-
-
-### `Failure`
-
-Exception thrown to signal that the given arguments do not make sense. This
-exception takes a string as an argument.
-
-
-
-```res example
-let isValidEmail = email => {
- let hasAtSign = String.includes(email, "@")
- let hasDot = String.includes(email, ".")
- if !(hasAtSign && hasDot) {
- throw(Failure("Invalid email address"))
- } else {
- true
- }
-}
-
-
-let isValid = try isValidEmail("rescript.org") catch {
-| Failure(msg) => {
- Console.error(msg)
- false
- }
-}
-```
-
-```js
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-function isValidEmail(email) {
- let hasAtSign = email.includes("@");
- let hasDot = email.includes(".");
- if (hasAtSign && hasDot) {
- return true;
- }
- throw {
- RE_EXN_ID: "Failure",
- _1: "Invalid email address",
- Error: new Error()
- };
-}
-
-let isValid;
-
-try {
- isValid = isValidEmail("rescript.org");
-} catch (raw_msg) {
- let msg = Primitive_exceptions.internalToException(raw_msg);
- if (msg.RE_EXN_ID === "Failure") {
- console.error(msg._1);
- isValid = false;
- } else {
- throw msg;
- }
-}
-```
-
-
-
-### `Division_by_zero`
-
-Exception thrown by integer division and remainder operations when their second argument is zero.
-
-
-
-```res example
-// ReScript throws `Division_by_zero` if the denominator is zero
-let result = try Some(10 / 0) catch {
-| Division_by_zero => None
-}
-
-Console.log(result) // None
-```
-
-```js
-import * as Primitive_int from "./stdlib/Primitive_int.js";
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-let result;
-
-try {
- result = Primitive_int.div(10, 0);
-} catch (raw_exn) {
- let exn = Primitive_exceptions.internalToException(raw_exn);
- if (exn.RE_EXN_ID === "Division_by_zero") {
- result = undefined;
- } else {
- throw exn;
- }
-}
-
-console.log(result);
-```
-
-
-
-## Catching JS Exceptions
-
-To distinguish between JavaScript exceptions and ReScript exceptions, ReScript namespaces JS exceptions under the `JsExn(payload)` variant. To catch an exception thrown from the JS side:
-
-
-Throw an exception from JS:
-
-```js
-// Example.js
-
-exports.someJsFunctionThatThrows = () => {
- throw new Error("A Glitch in the Matrix!");
-}
-```
-
-Then catch it from ReScript:
-
-```res
-// import the method in Example.js
-@module("./Example")
-external someJsFunctionThatThrows: () => unit = "someJsFunctionThatThrows"
-
-try {
- // call the external method
- someJSFunctionThatThrows()
-} catch {
-| JsExn(exn) =>
- switch JsExn.message(exn) {
- | Some(m) => Console.log("Caught a JS exception! Message: " ++ m)
- | None => ()
- }
-}
-```
-
-The payload `exn` here is of type `unknown` since in JS you can throw anything. To operate on `exn`, do like the code above by using the standard library's [`JsExn`](api/core/jsexn) module's helpers
-or use [`Type.Classify.classify`](api/core/type/classify#value-classify) to get more information about the runtime type of `exn`.
-
-## Throw a JS Exception
-
-### Throw a JS Error
-
-`throw(MyException)` throws a ReScript exception. To throw a JavaScript error (whatever your purpose is), use `JsError.throwWithMessage`:
-
-
-
-```res example
-let myTest = () => {
- JsError.throwWithMessage("Hello!")
-}
-```
-```js
-import * as Stdlib_JsError from "./stdlib/Stdlib_JsError.js";
-
-function myTest() {
- return Stdlib_JsError.throwWithMessage("Hello!");
-}
-```
-
-
-
-Then you can catch it from the JS side:
-
-```js
-// after importing `myTest`...
-try {
- myTest()
-} catch (e) {
- console.log(e.message) // "Hello!"
-}
-```
-
-### Throw a value that is not an JS Error
-
-If you want to throw any value that is not a valid JS Error, use `JsExn.throw`:
-
-
-
-```res example
-let myTest = () => {
- JsExn.throw("some non-error value!")
-}
-```
-```js
-function myTest() {
- throw "some non-error value!";
-}
-```
-
-
-
-Then you can catch it from the JS side:
-
-```js
-// after importing `myTest`...
-try {
- myTest()
-} catch (message) {
- console.log(message) // "Hello!"
-}
-```
-
-## Catch ReScript Exceptions from JS
-
-The previous section is less useful than you think; to let your JS code work with your exception-throwing ReScript code, the latter doesn't actually need to throw a JS exception. ReScript exceptions can be used by JS code!
-
-
-
-```res example
-exception BadArgument({myMessage: string})
-
-let myTest = () => {
- throw(BadArgument({myMessage: "Oops!"}))
-}
-```
-```js
-import * as Primitive_exceptions from "./stdlib/Primitive_exceptions.js";
-
-let BadArgument = /* @__PURE__ */Primitive_exceptions.create("Playground.BadArgument");
-
-function myTest() {
- throw {
- RE_EXN_ID: BadArgument,
- myMessage: "Oops!",
- Error: new Error()
- };
-}
-```
-
-
-
-Then, in your JS:
-
-```js
-// after importing `myTest`...
-try {
- myTest()
-} catch (e) {
- console.log(e.myMessage) // "Oops!"
- console.log(e.Error.stack) // the stack trace
-}
-```
-
-> Note: `RE_EXN_ID` is an internal field for bookkeeping purposes. Don't use it on the JS side. Use the other fields.
-
-The above `BadArgument` exception takes an inline record type. We special-case compile the exception as `{RE_EXN_ID, myMessage, Error}` for good ergonomics. If the exception instead took ordinary positional arguments, l like the standard library's `Invalid_argument("Oops!")`, which takes a single argument, the argument is compiled to JS as the field `_1` instead. A second positional argument would compile to `_2`, etc.
-
-## Tips & Tricks
-
-When you have ordinary variants, you often don't **need** exceptions. For example, instead of throwing when `item` can't be found in a collection, try to return an `option` (`None` in this case) instead.
-
-### Catch Both ReScript and JS Exceptions in the Same `catch` Clause
-
-```res
-try {
- someOtherJSFunctionThatThrows()
-} catch {
-| Not_found => ... // catch a ReScript exception
-| Invalid_argument(_) => ... // catch a second ReScript exception
-| JsExn(exn) => ... // catch the JS exception
-}
-```
-
-This technically works, but hopefully you don't ever have to work with such code...
diff --git a/pages/docs/manual/v12.0.0/extensible-variant.mdx b/pages/docs/manual/v12.0.0/extensible-variant.mdx
deleted file mode 100644
index 51b834fd3..000000000
--- a/pages/docs/manual/v12.0.0/extensible-variant.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "Extensible Variant"
-description: "Extensible Variants in ReScript"
-canonical: "/docs/manual/v12.0.0/extensible-variant"
----
-
-# Extensible Variant
-
-Variant types are usually constrained to a fixed set of constructors. There may be very rare cases where you still want to be able to add constructors to a variant type even after its initial type declaration. For this, we offer extensible variant types.
-
-## Definition and Usage
-
-
-
-```res example
-type t = ..
-
-type t += Other
-
-type t +=
- | Point(float, float)
- | Line(float, float, float, float)
-```
-```js
-var Caml_exceptions = require("./stdlib/caml_exceptions.js");
-
-var Other = Caml_exceptions.create("Playground.Other");
-
-var Point = Caml_exceptions.create("Playground.Point");
-
-var Line = Caml_exceptions.create("Playground.Line");
-```
-
-
-
-The `..` in the type declaration above defines an extensible variant `type t`. The `+=` operator is then used to add constructors to the given type.
-
-**Note:** Don't forget the leading `type` keyword when using the `+=` operator!
-
-## Pattern Matching Caveats
-
-Extensible variants are open-ended, so the compiler will not be able to exhaustively pattern match all available cases. You will always need to provide a default `_` case for every `switch` expression.
-
-
-
-
-
-```res
-let print = v =>
- switch v {
- | Point(x, y) => Console.log2("Point", (x, y))
- | Line(ax, ay, bx, by) => Console.log2("Line", (ax, ay, bx, by))
- | Other
- | _ => Console.log("Other")
- }
-```
-```js
-function print(v) {
- if (v.RE_EXN_ID === Point) {
- console.log("Point", [v._1, v._2]);
- } else if (v.RE_EXN_ID === Line) {
- console.log("Line", [v._1, v._2, v._3, v._4]);
- } else {
- console.log("Other");
- }
-}
-```
-
-
-
-## Tips & Tricks
-
-**Fun fact:** In ReScript, [exceptions](./exception) are actually extensible variants under the hood, so `exception UserError(string)` is equivalent to `type exn += UserError(string)`. It's one of the very few use-case where extensible variants make sense.
-
-We usually recommend sticking with common [variants](./variant) as much as possible to reap the benefits of exhaustive pattern matching.
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/external.mdx b/pages/docs/manual/v12.0.0/external.mdx
deleted file mode 100644
index 829da3879..000000000
--- a/pages/docs/manual/v12.0.0/external.mdx
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: "External (Bind to Any JS Library)"
-description: "The external keyword"
-canonical: "/docs/manual/v12.0.0/external"
----
-
-# External (Bind to Any JS Library)
-
-`external` is the primary ReScript feature for bringing in and using JavaScript values.
-
-`external` is like a let binding, but:
-- The right side of `=` isn't a value; it's the name of the JS value you're referring to.
-- The type for the binding is mandatory, since we need to know what the type of that JS value is.
-- Can only exist at the top level of a file or module.
-
-
-
-```res example
-@val external setTimeout: (unit => unit, int) => float = "setTimeout"
-```
-```js
-// Empty output
-```
-
-
-
-There are several kinds of `external`s, differentiated and/or augmented through the [attribute](attribute.md) they carry. This page deals with the general, shared mechanism behind most `external`s. The different `external`s are documented in their respective pages later. A few notable ones:
-
-- `@val`, `@scope`: [bind to global JS values](bind-to-global-js-values).
-- `@module`: [bind to JS imported/exported values](import-from-export-to-js).
-- `@send`: [bind to JS methods](bind-to-js-function).
-
-You can also use our [Syntax Lookup](/syntax-lookup) tool to find them.
-
-Related: see also our [list of external decorators](interop-cheatsheet#list-of-decorators).
-
-## Usage
-
-Once declared, you can use an `external` as a normal value, just like a let binding.
-
-## Tips & Tricks
-
-`external` + ReScript objects are a wonderful combination for quick prototyping. Check the JS output tab:
-
-
-
-```res example
-// The type of document is just some random type 'a
-// that we won't bother to specify
-@val external document: 'a = "document"
-
-// call a method
-document["addEventListener"]("mouseup", _event => {
- Console.log("clicked!")
-})
-
-// get a property
-let loc = document["location"]
-
-// set a property
-document["location"]["href"] = "rescript-lang.org"
-```
-```js
-document.addEventListener("mouseup", function(_event) {
- console.log("clicked!");
-});
-
-var loc = document.location;
-
-document.location.href = "rescript-lang.org";
-```
-
-
-
-We've specified `document`'s type as `'a`, aka a placeholder type that's polymorphic. Any value can be passed there, so you're not getting much type safety (except the inferences at various call sites). However, this is excellent for quickly getting started using a JavaScript library in ReScript **without needing the equivalent of a repository of typed bindings** like TypeScript's `DefinitelyTyped` repo.
-
-However, if you want to more rigidly bind to the JavaScript library you want, keep reading the next few interop pages.
-
-## Performance & Output Readability
-
-`external`s declarations are inlined into their callers during compilation, **and completely disappear from the JS output**. This means any time you use one, you can be sure that you're not incurring extra JavaScript \<-> ReScript conversion cost.
-
-Additionally, no extra ReScript-specific runtime is better for output readability.
-
-> **Note:** do also use `external`s and the `@blabla` attributes in the interface files. Otherwise the inlining won't happen.
-
-## Design Decisions
-
-ReScript takes interoperating with existing code very seriously. Our type system has very strong guarantees. However, such strong feature also means that, without a great interop system, it'd be very hard to gradually convert a codebase over to ReScript. Fortunately, our interop are comprehensive and cooperate very well with most existing JavaScript code.
-
-The combination of a sound type system + great interop means that we get the benefits of a traditional gradual type system regarding incremental codebase coverage & conversion, without the downside of such gradual type system: complex features to support existing patterns, slow analysis, diminishing return in terms of type coverage, etc.
diff --git a/pages/docs/manual/v12.0.0/function.mdx b/pages/docs/manual/v12.0.0/function.mdx
deleted file mode 100644
index 8138b32a7..000000000
--- a/pages/docs/manual/v12.0.0/function.mdx
+++ /dev/null
@@ -1,620 +0,0 @@
----
-title: "Function"
-description: "Function syntax in ReScript"
-canonical: "/docs/manual/v12.0.0/function"
----
-
-# Function
-
-_Cheat sheet for the full function syntax at the end_.
-
-ReScript functions are declared with an arrow and return an expression, just like JS functions. They compile to clean JS functions too.
-
-
-
-```res prelude
-let greet = (name) => "Hello " ++ name
-```
-```js
-function greet(name) {
- return "Hello " + name;
-}
-```
-
-
-
-This declares a function and assigns to it the name `greet`, which you can call like so:
-
-
-
-```res example
-greet("world!") // "Hello world!"
-```
-```js
-greet("world!");
-```
-
-
-
-Multi-arguments functions have arguments separated by comma:
-
-
-
-```res example
-let add = (x, y, z) => x + y + z
-add(1, 2, 3) // 6
-```
-```js
-function add(x, y, z) {
- return (x + y | 0) + z | 0;
-}
-```
-
-
-
-For longer functions, you'd surround the body with a block:
-
-
-
-```res example
-let greetMore = (name) => {
- let part1 = "Hello"
- part1 ++ " " ++ name
-}
-```
-```js
-function greetMore(name) {
- return "Hello " + name;
-}
-```
-
-
-
-If your function has no argument, just write `let greetMore = () => {...}`.
-
-## Labeled Arguments
-
-Multi-arguments functions, especially those whose arguments are of the same type, can be confusing to call.
-
-
-
-```res
-let addCoordinates = (x, y) => {
- // use x and y here
-}
-// ...
-addCoordinates(5, 6) // which is x, which is y?
-```
-```js
-function addCoordinates(x, y) {
- // use x and y here
-}
-
-addCoordinates(5, 6);
-```
-
-
-
-You can attach labels to an argument by prefixing the name with the `~` symbol:
-
-
-
-```res
-let addCoordinates = (~x, ~y) => {
- // use x and y here
-}
-// ...
-addCoordinates(~x=5, ~y=6)
-```
-```js
-function addCoordinates(x, y) {
- // use x and y here
-}
-
-addCoordinates(5, 6);
-```
-
-
-
-You can provide the arguments in **any order**:
-
-
-
-```res
-addCoordinates(~y=6, ~x=5)
-```
-```js
-addCoordinates(5, 6);
-```
-
-
-
-The `~x` part in the declaration means the function accepts an argument labeled `x` and can refer to it in the function body by the same name. You can also refer to the arguments inside the function body by a different name for conciseness:
-
-
-
-```res
-let drawCircle = (~radius as r, ~color as c) => {
- setColor(c)
- startAt(r, r)
- // ...
-}
-
-drawCircle(~radius=10, ~color="red")
-```
-```js
-function drawCircle(r, c) {
- setColor(c);
- return startAt(r, r);
-}
-
-drawCircle(10, "red");
-```
-
-
-
-As a matter of fact, `(~radius)` is just a shorthand for `(~radius as radius)`.
-
-Here's the syntax for typing the arguments:
-
-
-
-```res
-let drawCircle = (~radius as r: int, ~color as c: string) => {
- // code here
-}
-```
-```js
-function drawCircle(r, c) {
- // code here
-}
-```
-
-
-
-## Optional Labeled Arguments
-
-Labeled function arguments can be made optional during declaration. You can then omit them when calling the function.
-
-
-
-```res
-// radius can be omitted
-let drawCircle = (~color, ~radius=?) => {
- setColor(color)
- switch radius {
- | None => startAt(1, 1)
- | Some(r_) => startAt(r_, r_)
- }
-}
-```
-```js
-var Caml_option = require("./stdlib/caml_option.js");
-
-function drawCircle(color, radius) {
- setColor(color);
- if (radius === undefined) {
- return startAt(1, 1);
- }
- var r_ = Caml_option.valFromOption(radius);
- return startAt(r_, r_);
-}
-```
-
-
-
-When given in this syntax, `radius` is **wrapped** in the standard library's `option` type, defaulting to `None`. If provided, it'll be wrapped with a `Some`. So `radius`'s type value is `None | Some(int)` here.
-
-More on `option` type [here](null-undefined-option.md).
-
-### Signatures and Type Annotations
-
-Functions with optional labeled arguments can be confusing when it comes to signature and type annotations. Indeed, the type of an optional labeled argument looks different depending on whether you're calling the function, or working inside the function body. Outside the function, a raw value is either passed in (`int`, for example), or left off entirely. Inside the function, the parameter is always there, but its value is an option (`option`). This means that the type signature is different, depending on whether you're writing out the function type, or the parameter type annotation. The first being a raw value, and the second being an option.
-
-If we get back to our previous example and both add a signature and type annotations to its argument, we get this:
-
-
-
-```res
-let drawCircle: (~color: color, ~radius: int=?) => unit =
- (~color: color, ~radius: option=?) => {
- setColor(color)
- switch radius {
- | None => startAt(1, 1)
- | Some(r_) => startAt(r_, r_)
- }
- }
-```
-```js
-function drawCircle(color, radius) {
- setColor(color);
- if (radius !== undefined) {
- return startAt(radius, radius);
- } else {
- return startAt(1, 1);
- }
-}
-```
-
-
-
-The first line is the function's signature, we would define it like that in an interface file (see [Signatures](module.md#signatures)). The function's signature describes the types that the **outside world** interacts with, hence the type `int` for `radius` because it indeed expects an `int` when called.
-
-In the second line, we annotate the arguments to help us remember the types of the arguments when we use them **inside** the function's body, here indeed `radius` will be an `option` inside the function.
-
-So if you happen to struggle when writing the signature of a function with optional labeled arguments, try to remember this!
-
-### Explicitly Passed Optional
-
-Sometimes, you might want to forward a value to a function without knowing whether the value is `None` or `Some(a)`. Naively, you'd do:
-
-
-
-```res
-let result =
- switch payloadRadius {
- | None => drawCircle(~color)
- | Some(r) => drawCircle(~color, ~radius=r)
- }
-```
-```js
-var r = payloadRadius;
-
-var result = r !== undefined
- ? drawCircle(color, Caml_option.valFromOption(r))
- : drawCircle(color);
-```
-
-
-
-This quickly gets tedious. We provide a shortcut:
-
-
-
-```res
-let result = drawCircle(~color, ~radius=?payloadRadius)
-```
-```js
-var result = drawCircle(1, undefined);
-```
-
-
-
-This means "I understand `radius` is optional, and that when I pass it a value it needs to be an `int`, but I don't know whether the value I'm passing is `None` or `Some(val)`, so I'll pass you the whole `option` wrapper".
-
-### Optional with Default Value
-
-Optional labeled arguments can also be provided a default value. In this case, they aren't wrapped in an `option` type.
-
-
-
-```res
-let drawCircle = (~radius=1, ~color) => {
- setColor(color)
- startAt(radius, radius)
-}
-```
-```js
-function drawCircle(radiusOpt, color) {
- var radius = radiusOpt !== undefined ? radiusOpt : 1;
- setColor(color);
- return startAt(radius, radius);
-}
-```
-
-
-
-## Recursive Functions
-
-ReScript chooses the sane default of preventing a function to be called recursively within itself. To make a function recursive, add the `rec` keyword after the `let`:
-
-
-
-```res example
-let rec neverTerminate = () => neverTerminate()
-```
-```js
-function neverTerminate(_param) {
- while(true) {
- _param = undefined;
- continue ;
- };
-}
-```
-
-
-
-A simple recursive function may look like this:
-
-
-
-```res example
-// Recursively check every item on the list until one equals the `item`
-// argument. If a match is found, return `true`, otherwise return `false`
-let rec listHas = (list, item) =>
- switch list {
- | list{} => false
- | list{a, ...rest} => a === item || listHas(rest, item)
- }
-```
-```js
-function listHas(_list, item) {
- while(true) {
- var list = _list;
- if (!list) {
- return false;
- }
- if (list.hd === item) {
- return true;
- }
- _list = list.tl;
- continue ;
- };
-}
-```
-
-
-
-Recursively calling a function is bad for performance and the call stack. However, ReScript intelligently compiles [tail recursion](https://stackoverflow.com/questions/33923/what-is-tail-recursion) into a fast JavaScript loop. Try checking the JS output of the above code!
-
-### Mutually Recursive Functions
-
-Mutually recursive functions start like a single recursive function using the
-`rec` keyword, and then are chained together with `and`:
-
-
-
-```res example
-let rec callSecond = () => callFirst()
-and callFirst = () => callSecond()
-```
-```js
-function callSecond(_param) {
- while(true) {
- _param = undefined;
- continue ;
- };
-}
-
-function callFirst(_param) {
- while(true) {
- _param = undefined;
- continue ;
- };
-}
-```
-
-
-
-## Partial Application
-
-**Since 11.0**
-
-To partially apply a function, use the explicit `...` syntax.
-
-
-```res
-let add = (a, b) => a + b
-let addFive = add(5, ...)
-```
-
-```js
-function add(a, b) {
- return a + b | 0;
-}
-
-function addFive(extra) {
- return 5 + extra | 0;
-}
-```
-
-
-## Async/Await
-
-Just as in JS, an async function can be declared by adding `async` before the definition, and `await` can be used in the body of such functions.
-The output looks like idiomatic JS:
-
-
-
-```res example
-let getUserName = async (userId) => userId
-
-let greetUser = async (userId) => {
- let name = await getUserName(userId)
- "Hello " ++ name ++ "!"
-}
-```
-```js
-async function greetUser(userId) {
- var name = await getUserName(userId);
- return "Hello " + name + "!";
-}
-```
-
-
-The return type of `getUser` is inferred to be `promise`.
-Similarly, `await getUserName(userId)` returns a `string` when the function returns `promise`.
-Using `await` outside of an `async` function (including in a non-async callback to an async function) is an error.
-
-### Ergonomic error handling
-
-Error handling is done by simply using `try`/`catch`, or a switch with an `exception` case, just as in functions that are not async.
-Both JS exceptions and exceptions defined in ReScript can be caught. The compiler takes care of packaging JS exceptions into the builtin `JsError` exception:
-
-
-
-```res example
-exception SomeReScriptException
-
-let somethingThatMightThrow = async () => throw(SomeReScriptException)
-
-let someAsyncFn = async () => {
- switch await somethingThatMightThrow() {
- | data => Some(data)
- | exception JsError(_) => None
- | exception SomeReScriptException => None
- }
-}
-```
-```js
-var SomeReScriptException = /* @__PURE__ */Caml_exceptions.create("Example.SomeReScriptException");
-
-async function someAsyncFn(param) {
- var data;
- try {
- data = await somethingThatMightThrow(undefined);
- }
- catch (raw_exn){
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
- if (exn.RE_EXN_ID === "JsError") {
- return ;
- }
- if (exn.RE_EXN_ID === SomeReScriptException) {
- return ;
- }
- throw exn;
- }
- return data;
-}
-```
-
-
-
-
-## The ignore() Function
-
-Occasionally you may want to ignore the return value of a function. ReScript provides an `ignore()` function that discards the value of its argument and returns `()`:
-
-
-
-```res
-mySideEffect()->Promise.catch(handleError)->ignore
-
-setTimeout(myFunc, 1000)->ignore
-```
-
-```js
-$$Promise.$$catch(mySideEffect(), function (prim) {
- return handleError(prim);
-});
-
-setTimeout(function (prim) {
- myFunc();
-}, 1000);
-```
-
-
-
-## Tips & Tricks
-
-Cheat sheet for the function syntaxes:
-
-### Declaration
-
-```res
-// anonymous function
-(x, y) => 1
-// bind to a name
-let add = (x, y) => 1
-
-// labeled
-let add = (~first as x, ~second as y) => x + y
-// with punning sugar
-let add = (~first, ~second) => first + second
-
-// labeled with default value
-let add = (~first as x=1, ~second as y=2) => x + y
-// with punning
-let add = (~first=1, ~second=2) => first + second
-
-// optional
-let add = (~first as x=?, ~second as y=?) => switch x {...}
-// with punning
-let add = (~first=?, ~second=?) => switch first {...}
-```
-
-#### With Type Annotation
-
-```res
-// anonymous function
-(x: int, y: int): int => 1
-// bind to a name
-let add = (x: int, y: int): int => 1
-
-// labeled
-let add = (~first as x: int, ~second as y: int) : int => x + y
-// with punning sugar
-let add = (~first: int, ~second: int) : int => first + second
-
-// labeled with default value
-let add = (~first as x: int=1, ~second as y: int=2) : int => x + y
-// with punning sugar
-let add = (~first: int=1, ~second: int=2) : int => first + second
-
-// optional
-let add = (~first as x: option=?, ~second as y: option=?) : int => switch x {...}
-// with punning sugar
-// note that the caller would pass an `int`, not `option`
-// Inside the function, `first` and `second` are `option`.
-let add = (~first: option=?, ~second: option=?) : int => switch first {...}
-```
-
-### Application
-
-```res
-add(x, y)
-
-// labeled
-add(~first=1, ~second=2)
-// with punning sugar
-add(~first, ~second)
-
-// application with default value. Same as normal application
-add(~first=1, ~second=2)
-
-// explicit optional application
-add(~first=?Some(1), ~second=?Some(2))
-// with punning
-add(~first?, ~second?)
-```
-
-#### With Type Annotation
-
-```res
-// labeled
-add(~first=1: int, ~second=2: int)
-// with punning sugar
-add(~first: int, ~second: int)
-
-// application with default value. Same as normal application
-add(~first=1: int, ~second=2: int)
-
-// explicit optional application
-add(~first=?Some(1): option, ~second=?Some(2): option)
-// no punning sugar when you want to type annotate
-```
-
-### Standalone Type Signature
-
-```res
-// first arg type, second arg type, return type
-type add = (int, int) => int
-
-// labeled
-type add = (~first: int, ~second: int) => int
-
-// labeled
-type add = (~first: int=?, ~second: int=?, unit) => int
-```
-
-#### In Interface Files
-
-To annotate a function from the implementation file (`.res`) in your interface file (`.resi`):
-
-```res sig
-let add: (int, int) => int
-```
-
-The type annotation part is the same as the previous section on With Type Annotation.
-
-**Don't** confuse `let add: myType` with `type add = myType`. When used in `.resi` interface files, the former exports the binding `add` while annotating it as type `myType`. The latter exports the type `add`, whose value is the type `myType`.
diff --git a/pages/docs/manual/v12.0.0/generate-converters-accessors.mdx b/pages/docs/manual/v12.0.0/generate-converters-accessors.mdx
deleted file mode 100644
index a066c4421..000000000
--- a/pages/docs/manual/v12.0.0/generate-converters-accessors.mdx
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: "Generate Converters & Helpers"
-description: "All about the @deriving decorator, and how to generate code from types"
-canonical: "/docs/manual/v12.0.0/generate-converters-accessors"
----
-
-# Generate Converters & Helpers
-
-**Note**: if you're looking for:
-- `@deriving(jsConverter)` for records
-- `@deriving({jsConverter: newType})` for records
-- `@deriving(abstract)` for records
-- `@deriving(jsConverter)` for plain and polymorphic variants
-
-These particular ones are no longer needed. Select a doc version lower than `9.0` in the sidebar to see their old docs.
-
-
-
-When using ReScript, you will sometimes come into situations where you want to
-
-- Automatically generate functions that convert between ReScript's internal and JS runtime values (e.g. variants).
-- Convert a record type into an abstract type with generated creation, accessor and method functions.
-- Generate some other helper functions, such as functions from record attribute names.
-
-You can use the `@deriving` decorator for different code generation scenarios. All different options and configurations will be discussed on this page.
-
-**Note:** Please be aware that extensive use of code generation might make it harder to understand your programs (since the code being generated is not visible in the source code, and you just need to know what kind of functions / values a decorator generates).
-
-## Generate Functions & Plain Values for Variants
-
-Use `@deriving(accessors)` on a variant type to create accessor functions for its constructors.
-
-
-
-```res
-@deriving(accessors)
-type action =
- | Click
- | Submit(string)
- | Cancel;
-```
-
-```js
-function submit(param_0) {
- return /* Submit */[param_0];
-}
-
-var click = /* Click */0;
-
-var cancel = /* Cancel */1;
-
-exports.click = click;
-exports.submit = submit;
-exports.cancel = cancel;
-```
-
-
-
-Variants constructors with payloads generate functions, payload-less constructors generate plain integers (the internal representation of variants).
-
-**Note**:
-- The generated accessors are lower-cased.
-- You can now use these helpers on the JavaScript side! But don't rely on their actual values please.
-
-### Usage
-
-```res
-let s = submit("hello"); /* gives Submit("hello") */
-```
-
-This is useful:
-
-- When you're passing the accessor function as a higher-order function (which plain variant constructors aren't).
-- When you'd like the JS side to use these values & functions opaquely and pass you back a variant constructor (since JS has no such thing).
-
-Please note that in case you just want to _pipe a payload into a constructor_, you don't need to generate functions for that. Use the `->` syntax instead, e.g. `"test"->Submit`.
-
-## Generate Field Accessors for Records
-
-Use `@deriving(accessors)` on a record type to create accessors for its record field names.
-
-
-
-
-```res
-@deriving(accessors)
-type pet = {name: string}
-
-let pets = [{name: "bob"}, {name: "bob2"}]
-
-pets
- ->Array.map(name)
- ->Array.joinWith("&")
- ->Console.log
-```
-
-```js
-function name(param) {
- return param.name;
-}
-
-var pets = [
- {
- name: "bob"
- },
- {
- name: "bob2"
- }
-];
-
-console.log(Belt_Array.map(pets, name).join("&"));
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/import-export.mdx b/pages/docs/manual/v12.0.0/import-export.mdx
deleted file mode 100644
index 213d779e0..000000000
--- a/pages/docs/manual/v12.0.0/import-export.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: "Import & Export"
-description: "Importing / exporting in ReScript modules"
-canonical: "/docs/manual/v12.0.0/import-export"
----
-
-# Import & Export
-
-## Import a Module/File
-
-Unlike JavaScript, ReScript doesn't have or need import statements:
-
-
-
-```res
-// Inside School.res
-let studentMessage = Student.message
-```
-```js
-var Student = require("./Student.res.js");
-var studentMessage = Student.message
-```
-
-
-
-The above code refers to the `message` binding in the file `Student.res`. Every ReScript file is also a module, so accessing another file's content is the same as accessing another module's content!
-
-A ReScript project's file names need to be unique.
-
-## Export Stuff
-
-By default, every file's type declaration, binding and module is exported, aka publicly usable by another file. **This also means those values, once compiled into JS, are immediately usable by your JS code**.
-
-To only export a few selected things, use a `.resi` [interface file](module.md#signatures).
-
-## Work with JavaScript Import & Export
-
-To see how to import JS modules and export stuff for JS consumption, see the JavaScript Interop section's [Import from/Export to JS](import-from-export-to-js.md).
diff --git a/pages/docs/manual/v12.0.0/import-from-export-to-js.mdx b/pages/docs/manual/v12.0.0/import-from-export-to-js.mdx
deleted file mode 100644
index 520ab5f0e..000000000
--- a/pages/docs/manual/v12.0.0/import-from-export-to-js.mdx
+++ /dev/null
@@ -1,244 +0,0 @@
----
-title: "Import from / Export to JS"
-description: "Importing / exporting JS module content in ReScript"
-canonical: "/docs/manual/v12.0.0/import-from-export-to-js"
----
-
-# Import from/Export to JS
-
-You've seen how ReScript's idiomatic [Import & Export](import-export.md) works. This section describes how we work with importing stuff from JavaScript and exporting stuff for JavaScript consumption.
-
-If you're looking for react-specific interop guidance, check out the [React JS Interop guide](../../react/latest/import-export-reactjs.mdx).
-
-**Note**: due to JS ecosystem's module compatibility issues, our advice of keeping your ReScript file's compiled JS output open in a tab applies here **more than ever**, as you don't want to subtly output the wrong JS module import/export code, on top of having to deal with Babel/Webpack/Jest/Node's CommonJS \<-> JavaScript module compatibility shims.
-
-In short: **make sure your bindings below output what you'd have manually written in JS**.
-
-## Output Format
-
-We support 2 JavaScript import/export formats:
-
-- JavaScript module: `import * from 'MyReScriptFile'` and `export let ...`.
-- CommonJS: `require('myFile')` and `module.exports = ...`.
-
-The format is [configurable in via `rescript.json`](build-configuration.md#package-specs).
-
-## Import From JavaScript
-
-### Import a JavaScript Module's Named Export
-
-Use the `module` [external](external.md):
-
-
-
-```res example
-// Import nodejs' path.dirname
-@module("path") external dirname: string => string = "dirname"
-let root = dirname("/User/github") // returns "User"
-```
-```js
-import * as Path from "path";
-var root = Path.dirname("/User/github");
-```
-```js
-var Path = require("path");
-var root = Path.dirname("/User/github");
-```
-
-
-
-Here's what the `external` does:
-
-- `@module("path")`: pass the name of the JS module; in this case, `"path"`. The string can be anything: `"./src/myJsFile"`, `"@myNpmNamespace/myLib"`, etc.
-- `external`: the general keyword for declaring a value that exists on the JS side.
-- `dirname`: the binding name you'll use on the ReScript side.
-- `string => string`: the type signature of `dirname`. Mandatory for `external`s.
-- `= "dirname"`: the name of the variable inside the `path` JS module. There's repetition in writing the first and second `dirname`, because sometime the binding name you want to use on the ReScript side is different than the variable name the JS module exported.
-
-### Import a JavaScript Module As a Single Value
-
-By omitting the string argument to `module`, you bind to the whole JS module:
-
-
-
-```res example
-@module external leftPad: (string, int) => string = "./leftPad"
-let paddedResult = leftPad("hi", 5)
-```
-```js
-import * as LeftPad from "./leftPad";
-var paddedResult = LeftPad("hi", 5);
-```
-```js
-var LeftPad = require("./leftPad");
-var paddedResult = LeftPad("hi", 5);
-```
-
-
-
-Depending on whether you're compiling ReScript to JavaScript module or CommonJS, **this feature will generate subtly different code**. Please check both output tabs to see the difference. The JavaScript module output here would be wrong!
-
-### Import an `default` Export
-
-Use the value `default` on the right hand side:
-
-
-
-```res example
-@module("./student") external studentName: string = "default"
-Console.log(studentName)
-```
-```js
-import Student from "./student";
-var studentName = Student;
-```
-
-
-
-### Use Import Attributes
-
-**Since 11.1**
-
-[Import attributes](https://github.com/tc39/proposal-import-attributes) can be used in ReScript, as long as ReScript is configured to output JavaScript module. You do that by passing configuration to the `@module` attribute:
-
-
-```rescript
-@module({from: "./myJson.json", with: {type_: "json", \"some-exotic-identifier": "someValue"}})
-external myJson: JSON.t = "default"
-
-Console.log(myJson)
-```
-
-```javascript
-import MyJsonJson from "./myJson.json" with {"type": "json", "some-exotic-identifier": "someValue"};
-
-var myJson = MyJsonJson;
-
-console.log(myJson);
-```
-
-
-This above imports the local `./myJson.json` file, adding import attributes.
-
-This is how it works:
-1. Instead of passing a string or tuple to `@module`, pass a record.
-2. This record should have a `from` key. The value of that is where you want the module to be imported from (just like the regular string to `@module` is).
-3. It should also have a `with` key, with another record where you put all the import attributes you want emitted.
-
-Notice `\"some-exotic-identifier"` - you'll need to escape any key that's not a valid ReScript record key.
-Also notice `type_`. Since `type` is a reserved keyword in ReScript, you can use `type_` instead. It will be output as `type` in the JavaScript code.
-
-## Dynamic Import
-Leveraging JavaScript's [dynamic `import`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import) to reduce bundle size and lazy load code as needed is easy in ReScript. It's also a little bit more convenient than in regular JavaScript because you don't need to keep track of file paths manually with ReScript's module system.
-
-### Dynamically Importing Parts of a Module
-Use the `import` function to dynamically import a specific part of a module. Put whatever `let` binding you want to import in there, and you'll get a `promise` back resolving to that specific binding.
-
-Let's look at an example. Imagine the following file `MathUtils.res`:
-
-```rescript
-let add = (a, b) => a + b
-let sub = (a, b) => a - b
-```
-
-Now let's dynamically import the add function in another module, e.g. `App.res`:
-
-
-```rescript
-// App.res
-let main = async () => {
- let add = await import(MathUtils.add)
- let onePlusOne = add(1, 1)
-
- Console.log(onePlusOne)
-}
-```
-```javascript
-async function main() {
- var add = await import("./MathUtils.mjs").then(function(m) {
- return m.add;
- });
-
- var onePlusOne = add(1, 1);
- console.log(onePlusOne);
-}
-```
-
-
-### Dynamically Importing an Entire Module
-The syntax for importing a whole module looks a little different, since we are operating on the module syntax level; instead of using `import`, you may simply `await` the module itself:
-
-```rescript
-// App.res
-let main = async () => {
- module Utils = await MathUtils
-
- let twoPlusTwo = Utils.add(2, 2)
- Console.log(twoPlusTwo)
-}
-```
-```javascript
-async function main() {
- var Utils = await import("./MathUtils.mjs");
-
- var twoPlusTwo = Utils.add(2, 2);
- console.log(twoPlusTwo);
-}
-```
-
-
-## Export To JavaScript
-
-### Export a Named Value
-
-As mentioned in ReScript's idiomatic [Import & Export](import-export.md), every let binding and module is exported by default to other ReScript modules (unless you use a `.resi` [interface file](module#signatures)). If you open up the compiled JS file, you'll see that these values can also directly be used by a _JavaScript_ file too.
-
-### Export a `default` Value
-
-If your JS project uses JavaScript module, you're likely exporting & importing some default values:
-
-```js
-// student.js
-export default name = "Al";
-```
-
-```js
-// teacher.js
-import studentName from 'student.js';
-```
-
-A JavaScript default export is really just syntax sugar for a named export implicitly called `default` (now you know!). So to export a default value from ReScript, you can just do:
-
-
-
-```res example
-// ReScriptStudent.res
-let default = "Bob"
-```
-```js
-var $$default = "Bob";
-
-exports.$$default = $$default;
-exports.default = $$default;
-// informal transpiler-compatible marker of a default export compiled from JavaScript module
-exports.__esModule = true;
-```
-```js
-var $$default = "Bob";
-
-export {
- $$default,
- $$default as default,
-}
-```
-
-
-
-You can then import this default export as usual on the JS side:
-
-```js
-// teacher2.js
-import studentName from 'ReScriptStudent.js';
-```
-
-If your JavaScript's default import is transpiled by Babel/Webpack/Jest into CommonJS `require`s, we've taken care of that too! See the CommonJS output tab for `__esModule`.
diff --git a/pages/docs/manual/v12.0.0/inlining-constants.mdx b/pages/docs/manual/v12.0.0/inlining-constants.mdx
deleted file mode 100644
index c9e9dea31..000000000
--- a/pages/docs/manual/v12.0.0/inlining-constants.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: "Inlining Constants"
-description: "Inlining constants"
-canonical: "/docs/manual/v12.0.0/inlining-constants"
----
-
-# Inlining Constants
-
-Sometimes, in the JavaScript output, you might want a certain value to be forcefully inlined. For example:
-
-```js
-if (process.env.mode === 'development') {
- console.log("Dev-only code here!")
-}
-```
-
-The reason is that your JavaScript bundler (e.g. Webpack) might turn that into:
-
-```js
-if ('production' === 'development') {
- console.log("Dev-only code here!")
-}
-```
-
-Then your subsequent Uglifyjs optimization would remove that entire `if` block. This is how projects like ReactJS provide a development mode code with plenty of dev warnings, while ensuring that the uglified (minified) production code is free of those expensive blocks.
-
-So, in ReScript, producing that example `if (process.env.mode === 'development')` output is important. This first try doesn't work:
-
-
-
-```res example
-@val external process: 'a = "process"
-
-let mode = "development"
-
-if (process["env"]["mode"] === mode) {
- Console.log("Dev-only code here!")
-}
-```
-```js
-var mode = "development";
-
-if (process.env.mode === mode) {
- console.log("Dev-only code here!");
-}
-```
-
-
-
-The JS output shows `if (process.env.mode === mode)`, which isn't what we wanted. To inline `mode`'s value, use `@inline`:
-
-
-
-```res example
-@val external process: 'a = "process"
-
-@inline
-let mode = "development"
-
-if (process["env"]["mode"] === mode) {
- Console.log("Dev-only code here!")
-}
-```
-```js
-if (process.env.mode === "development") {
- console.log("Dev-only code here!");
-}
-```
-
-
-
-Now your resulting JS code can pass through Webpack and Uglifyjs like the rest of your JavaScript code, and that whole `console.log` can be removed.
-
-The inlining currently only works for **string, float and boolean**.
-
-## Tips & Tricks
-
-This is **not** an optimization. This is an edge-case feature for folks who absolutely need particular values inlined for a JavaScript post-processing step, like conditional compilation. Beside the difference in code that the conditional compilation might end up outputting, there's no performance difference between inlining and not inlining simple values in the eyes of a JavaScript engine.
diff --git a/pages/docs/manual/v12.0.0/installation.mdx b/pages/docs/manual/v12.0.0/installation.mdx
deleted file mode 100644
index baa53d270..000000000
--- a/pages/docs/manual/v12.0.0/installation.mdx
+++ /dev/null
@@ -1,148 +0,0 @@
----
-title: "Installation"
-description: "ReScript installation and setup instructions"
-canonical: "/docs/manual/v12.0.0/installation"
----
-
-# Installation
-## Prerequisites
-
-- [Node.js](https://nodejs.org/) version >= 20
-- One of the following package managers:
- - [npm](https://docs.npmjs.com/cli/) (comes with Node.js)
- - [yarn](https://yarnpkg.com/)
- - yarn versions >1 need to set `nodeLinker: node-modules` in `.yarnrc.yml`
- - [pnpm](https://pnpm.io/)
- - [bun](https://bun.sh/)
- - [deno](http://deno.com/)
- - Configure `"nodeModulesDir": "auto"` in `deno.json`
-
-## New Project
-
-The fastest and easiest way to spin up a new ReScript project is with the [create-rescript-app](https://github.com/rescript-lang/create-rescript-app) project generator. This will get you started with a fresh Next.js or Vite app with React and Tailwind CSS.
-
-You can start it with any of the aforementioned package managers or `npx`.
-
-
-
-```sh example
-npm create rescript-app@latest
-```
-```sh
-npx create-rescript-app
-```
-```sh
-yarn create rescript-app
-```
-```sh
-pnpm create rescript-app
-```
-```sh
-bun create rescript-app
-```
-
-
-- Follow the steps of the setup.
-- Trigger a ReScript build:
- ```sh
- npm run res:build
- ```
-- If you selected the "basic" template, simply run it with:
- ```sh
- node src/Demo.res.mjs
- ```
-
-That compiles your ReScript into JavaScript, then uses Node.js to run said JavaScript.
-
-**When taking your first steps with ReScript, we recommend you use our unique workflow of keeping a tab open for the generated JS file** (`.res.js`/`.res.mjs`), so that you can learn how ReScript transforms into JavaScript. Not many languages output clean JavaScript code you can inspect and learn from! With our [VS Code extension](https://marketplace.visualstudio.com/items?itemName=chenglou92.rescript-vscode), use the command "ReScript: Open the compiled JS file for this implementation file" to open the generated JS file for the currently active ReScript source file.
-
-During development, instead of running `npm run res:build` each time to compile, use `npm run res:dev` to start a watcher that recompiles automatically after file changes.
-
-## Integrate Into an Existing JS Project
-
-If you already have a JavaScript project into which you'd like to add ReScript you can do that in the following ways:
-
-### Quick Setup
-
-In the root directory of your project, execute:
-
-
-```sh
-npm create rescript-app@latest
-```
-```sh
-npx create-rescript-app
-```
-```sh
-yarn create rescript-app
-```
-```sh
-pnpm create rescript-app
-```
-```sh
-bun create rescript-app
-```
-
-
-`create-rescript-app` will tell you that a `package.json` file has been detected and ask you if it should install ReScript into your project. Just follow the steps accordingly.
-
-### Manual Setup
-- Install ReScript locally:
-
-
- ```sh
- npm install rescript
- ```
- ```sh
- yarn add rescript
- ```
- ```sh
- pnpm install rescript
- ```
- ```sh
- bun install rescript
- ```
- ```sh
- // you will need deno configured to have a node_modules folder
- deno install npm:rescript --allow-scripts
- ```
-
-- Create a ReScript build configuration file (called `rescript.json`) at the root:
- ```json
- {
- "name": "your-project-name",
- "sources": [
- {
- "dir": "src", // update this to wherever you're putting ReScript files
- "subdirs": true
- }
- ],
- "package-specs": [
- {
- "module": "esmodule",
- "in-source": true
- }
- ],
- "suffix": ".res.js"
- }
- ```
- See [Build Configuration](build-configuration) for more details on `rescript.json`.
-- Add convenience `npm` scripts to `package.json`:
- ```json
- "scripts": {
- "res:build": "rescript",
- "res:dev": "rescript -w"
- }
- ```
-
-Since ReScript compiles to clean readable JS files, the rest of your existing toolchain (e.g. Vite, Rspack, Rollup) should just work!
-
-Helpful guides:
-
-- [Converting from JS](converting-from-js).
-- [Shared Data Types](shared-data-types).
-- [Import from/Export to JS](import-from-export-to-js).
-
-### Integrate with a ReactJS Project
-
-To start a [rescript-react](/docs/react/latest/introduction) app, or to integrate ReScript into an existing ReactJS app, follow the instructions [here](/docs/react/latest/installation).
diff --git a/pages/docs/manual/v12.0.0/interop-cheatsheet.mdx b/pages/docs/manual/v12.0.0/interop-cheatsheet.mdx
deleted file mode 100644
index 2a17a8023..000000000
--- a/pages/docs/manual/v12.0.0/interop-cheatsheet.mdx
+++ /dev/null
@@ -1,274 +0,0 @@
----
-title: "Interop Cheatsheet"
-description: "Cheatsheet for various interop scenarios in ReScript"
-canonical: "/docs/manual/v12.0.0/interop-cheatsheet"
----
-
-# Interop Cheatsheet
-
-This is a glossary with examples. All the features are described by later pages.
-
-## List of Decorators
-
-> **Note:** In ReScript < 8.3, all our attributes started with the `bs.` prefix. This is no longer needed and our formatter automatically removes them in newer ReScript versions.
-
-
-
-### Attributes
-
-- `@as`: [here](attribute#usage), [here](bind-to-js-function#fixed-arguments), [here](bind-to-js-function#constrain-arguments-better) and [here](generate-converters-accessors#usage-3)
-- [`@deriving`](generate-converters-accessors#generate-functions--plain-values-for-variants)
-- [`@get`](bind-to-js-object#bind-using-special-bs-getters--setters)
-- [`@get_index`](bind-to-js-object#bind-using-special-bs-getters--setters)
-
-- [`@inline`](inlining-constants)
-- [`@int`](bind-to-js-function#constrain-arguments-better)
-
-- [`@module`](import-from-export-to-js#import-a-javascript-modules-content)
-- [`@new`](bind-to-js-object#bind-to-a-js-object-thats-a-class)
-- [`@optional`](generate-converters-accessors#optional-labels)
-- [`@return`](bind-to-js-function#function-nullable-return-value-wrapping)
-- `@send`: [here](bind-to-js-function#object-method) and [here](pipe#js-method-chaining)
-- [`@scope`](bind-to-global-js-values#global-modules)
-- [`@set`](bind-to-js-object#bind-using-special-bs-getters--setters)
-- [`@set_index`](bind-to-js-object#bind-using-special-bs-getters--setters)
-- [`@variadic`](bind-to-js-function#variadic-function-arguments)
-- [`@string`](bind-to-js-function#constrain-arguments-better)
-- [`@this`](bind-to-js-function#modeling-this-based-callbacks)
-- [`@uncurry`](bind-to-js-function#extra-solution)
-- [`@unwrap`](bind-to-js-function#trick-2-polymorphic-variant--bsunwrap)
-- [`@val`](bind-to-global-js-values#global-modules)
-- [`@taggedTemplate`](bind-to-js-function#tagged_template-functions)
-
-- [`@deprecated`](attribute#usage)
-- [`genType`](https://github.com/reason-association/genType)
-- [`@JSX`](jsx)
-- `@react.component`: [here](/docs/react/latest/introduction) and [here](https://github.com/reasonml/reason-react)
-- [`@warning`](attribute#usage)
-- [`@unboxed`](variant#untagged-variants)
-
-### Extension Points
-
-- [`%debugger`](embed-raw-javascript#debugger)
-- [`%external`](bind-to-global-js-values#special-global-values)
-- [`%raw`](embed-raw-javascript#paste-raw-js-code)
-- [`%re`](primitive-types#regular-expression)
-- [`%todo`](/syntax-lookup#todo)
-
-## Raw JS
-
-
-
-```res example
-let add = %raw("(a, b) => a + b")
-%%raw("const a = 1")
-```
-```js
-var add = ((a, b) => a + b);
-const a = 1
-```
-
-
-
-## Global Value
-
-
-
-```res example
-@val external setTimeout: (unit => unit, int) => float = "setTimeout"
-```
-```js
-// Empty output
-```
-
-
-
-## Global Module's Value
-
-
-
-```res example
-@val @scope("Math")
-external random: unit => float = "random"
-
-let someNumber = random()
-
-@val @scope(("window", "location", "ancestorOrigins"))
-external length: int = "length"
-```
-```js
-var someNumber = Math.random();
-```
-
-
-
-## Nullable
-
-
-
-```res example
-let a = Some(5) // compiles to 5
-let b = None // compiles to undefined
-```
-```js
-var a = 5;
-var b;
-```
-
-
-
-Handling a value that can be `undefined` and `null`, by ditching the `option` type and using `Nullable.t`:
-
-
-
-```res example
-let jsNull = Nullable.null
-let jsUndefined = Nullable.undefined
-let result1: Nullable.t = Nullable.make("hello")
-let result2: Nullable.t = Nullable.fromOption(Some(10))
-let result3: option = Nullable.toOption(Nullable.make(10))
-```
-```js
-import * as Caml_option from "./stdlib/caml_option.js";
-import * as Core__Nullable from "./stdlib/core__Nullable.js";
-
-var result2 = Core__Nullable.fromOption(10);
-
-var jsNull = null;
-
-var jsUndefined;
-
-var result1 = "hello";
-
-var result3 = Caml_option.nullable_to_opt(10);
-```
-
-
-
-## JS Object
-
-- [Bind to a JS object as a ReScript record](bind-to-js-object#bind-to-record-like-js-objects).
-- [Bind to a JS object that acts like a hash map](bind-to-js-object#bind-to-hash-map-like-js-object).
-- [Bind to a JS object that's a class](bind-to-js-object#bind-to-a-js-object-thats-a-class).
-
-## Function
-
-### Object Method & Chaining
-
-
-
-```res example
-@send external map: (array<'a>, 'a => 'b) => array<'b> = "map"
-@send external filter: (array<'a>, 'a => 'b) => array<'b> = "filter"
-[1, 2, 3]
- ->map(a => a + 1)
- ->filter(a => mod(a, 2) == 0)
- ->Console.log
-```
-```js
-console.log(
- [1, 2, 3]
- .map(function (a) {
- return (a + 1) | 0;
- })
- .filter(function (a) {
- return a % 2 === 0;
- })
-);
-```
-
-
-
-### Variadic Arguments
-
-
-
-```res example
-@module("path") @variadic
-external join: array => string = "join"
-```
-```js
-// Empty output
-```
-
-
-
-### Tagged template functions
-
-
-
-```res example
-// see https://bun.sh/docs/runtime/shell
-type result = {exitCode: int}
-@module("bun") @taggedTemplate
-external sh: (array, array) => promise = "$"
-
-let filename = "index.res"
-let result = await sh`ls ${filename}`
-```
-
-```js
-import * as $$Bun from "bun";
-var filename = "index.res";
-var result = await $$Bun.$`ls ${filename}`;
-```
-
-
-
-### Polymorphic Function
-
-
-
-```res example
-@module("Drawing") external drawCat: unit => unit = "draw"
-@module("Drawing") external drawDog: (~giveName: string) => unit = "draw"
-```
-```js
-// Empty output
-```
-
-
-
-
-
-```res example
-@val
-external padLeft: (
- string,
- @unwrap [
- | #Str(string)
- | #Int(int)
- ])
- => string = "padLeft"
-
-padLeft("Hello World", #Int(4))
-padLeft("Hello World", #Str("Message from ReScript: "))
-```
-```js
-padLeft("Hello World", 4);
-padLeft("Hello World", "Message from ReScript: ");
-```
-
-
-
-## JS Module Interop
-
-[See here](import-from-export-to-js.md)
-
-## Dangerous Type Cast
-
-Final escape hatch converter. Do not abuse.
-
-
-
-```res example
-external convertToFloat: int => float = "%identity"
-let age = 10
-let gpa = 2.1 +. convertToFloat(age)
-```
-```js
-var age = 10;
-var gpa = 2.1 + 10;
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/interop-with-js-build-systems.mdx b/pages/docs/manual/v12.0.0/interop-with-js-build-systems.mdx
deleted file mode 100644
index 9021275a4..000000000
--- a/pages/docs/manual/v12.0.0/interop-with-js-build-systems.mdx
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: "Interop with JS Build Systems"
-description: "Documentation on how to interact with existing JS build systems"
-canonical: "/docs/manual/v12.0.0/interop-with-js-build-systems"
----
-
-# Interop with JS Build Systems
-
-If you come from JS, chances are that you already have a build system in your existing project. Here's an overview of the role `rescript` would play in your build pipeline, if you want to introduce some ReScript code.
-
-> **Please** try not to wrap `rescript` into your own incremental build framework. ReScript's compilation is very hard to get right, and you'll inevitably run into stale or badly performing builds (therefore erasing much of our value proposition) if you create your own meta layer on top.
-
-## Popular JS Build Systems
-
-The JS ecosystem uses a few build systems: [vite](https://vite.dev/), [browserify](http://browserify.org/), [rollup](https://github.com/rollup/rollup), [webpack](https://webpack.js.org/), etc. The first one is probably the most popular of the four (as of 2025 =P). These build systems do both the compilation and the linking (aka, bundling many files into one or few files).
-
-`rescript` only takes care of the compilation step; it maps one `.res`/`.resi` file into one JS output file. As such, in theory, no build system integration is needed from our side. From e.g. the webpack watcher's perspective, the JS files ReScript generates are almost equivalent to your hand-written JS files. We also recommend **that you initially check in those ReScript-generated JS files**, as this workflow means:
-
-- You can introduce ReScript silently into your codebase without disturbing existing infra.
-- You have a **visual** diff of the performance & correctness of your JS file when you update the `.res` files and the JS artifacts change.
-- You can let teammates hot-patch the JS files in emergency situations, without needing to first start learning ReScript.
-- You can remove ReScript completely from your codebase and things will still work (in case your company decides to stop using us for whatever reason).
-
-For what it's worth, you can also turn `rescript` into an automated step in your build pipeline, e.g. into a Webpack loader; but such approach is error-prone and therefore discouraged.
-
-### Tips & Tricks
-
-You can make ReScript JS files look even more idiomatic through the in-source + bs suffix config in `rescript.json`:
-
-```json
-{
- "package-specs": {
- "module": "commonjs", // or whatever module system your project uses
- "in-source": true
- },
- "suffix": ".res.js"
-}
-```
-
-This will:
-
-- Generate the JS files alongside your ReScript source files.
-- Use the file extension `.res.js`, so that you can require these files on the JS side through `require('./MyFile.res.js')`, without needing a loader.
-
-## Use Loaders on ReScript Side
-
-"What if my build system uses a CSS/png/whatever loader and I'd like to use it in ReScript?"
-
-Loaders are indeed troublesome; in the meantime, please use e.g. `%raw("require('./myStyles.css')")` at the top of your file. This just uses [`raw`](embed-raw-javascript.md) to compile the snippet into an actual JS require.
-
-## Getting Project's Dependencies
-
-`rescript` generates one `MyFile.d` file per `MyFile` source file; you'll find them in `lib/bs`. These are human readable, machine-friendly list of the dependencies of said `MyFile`. You can read into them for your purpose (though mind the IO overhead). Use these files instead of creating your own dependency graph; we did the hard work of tracking the dependencies as best as possible (including inner modules, `open`s, module names overlap, etc).
-
-## Run Script Per File Built
-
-See [js-post-build](build-configuration#js-post-build). Though please use it sparingly; if you hook up a node.js script after each file built, you'll incur the node startup time per file!
diff --git a/pages/docs/manual/v12.0.0/introduction.mdx b/pages/docs/manual/v12.0.0/introduction.mdx
deleted file mode 100644
index 147fb1a60..000000000
--- a/pages/docs/manual/v12.0.0/introduction.mdx
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: "Introduction"
-description: "Introduction to the ReScript programming language"
-canonical: "/docs/manual/v12.0.0/introduction"
----
-
-# ReScript
-
-ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript. It comes with a lightning fast compiler toolchain that scales to any codebase size.
-
-## Part of the JavaScript ecosystem
-ReScript looks like JS, acts like JS, and compiles to the highest quality of clean, readable and performant JS, directly runnable in browsers and Node. This means you can pick up ReScript and access the vast JavaScript ecosystem and tooling as if you've known ReScript for a long time!
-
-You don't need to learn new package managers, bundlers, frameworks, or testing libraries. All of the knowledge you have about doing web development with JavaScript can be applied to building applications with Rescript.
-
-ReScript code can be [imported into JavaScript code](/docs/manual/latest/import-from-export-to-js#export-to-javascript), can [generate types for TypeScript](/docs/manual/latest/typescript-integration), and ReScript can [import code written in JavaScript or TypeScript](/docs/manual/latest/import-from-export-to-js#import-from-javascript).
-
-## Type System
- - Is deliberately curated to be a simple subset most folks will have an easier time to use.
- - Has **no** pitfalls, aka the type system is "sound" (the types will always be correct). E.g. If a type isn't marked as nullable, its value will never lie and let through some `undefined` value silently. **ReScript code has no null/undefined errors**.
- - Is the same for everyone. No knobs, no bikeshedding opportunity.
- - Runs extremely fast precisely thanks to its simplicity and curation. It's one of the fastest compiler & build system toolchains for JavaScript development.
- - **Doesn't need type annotations**. Annotate as much or as little as you'd like. The types are inferred by the language (and, again, are guaranteed correct).
-
-## Compiler
-### Compiles to Optimized JavaScript
-
-JavaScript's been aggressively optimized by talented engineers over a long span. Unfortunately, even for seasoned JS devs, it can be hard to know how to properly leverage JS's performance. ReScript's type system and compiler naturally guides you toward writing code that's very often performant by default, with good leverage of various Just-In-Time optimizations (hidden classes, inline caching, avoiding deopts, etc).
-
-A widespread adage to write fast JavaScript code is to write as if there's a type system (in order to trigger JS engines' good optimization heuristics); ReScript gives you a real one and generates code that's friendly to optimizations by default.
-
-### Tiny JS Output
-
-A `Hello world` ReScript program generates **20 bytes** of JS code. Additionally, the standard library pieces you require in are only included when needed.
-
-### Fast Iteration Loop
-
-ReScript's build time is **one or two orders of magnitude** faster than alternatives. In its watcher mode, the build system usually finishes before you switch screen from the editor to the terminal tab (two digits of milliseconds). A fast iteration cycle reduces the need of keeping one's mental state around longer; this in turn allows one to stay in the flow longer and more often.
-
-### Readable Output
-
-ReScript's JS output is very readable. This is especially important while learning, where users might want to understand how the code's compiled, and to audit for bugs.
-
-This characteristic, combined with a fully-featured JS interop system, allows ReScript code to be inserted into an existing JavaScript codebase almost unnoticed.
-
-### Preservation of Code Structure
-
-ReScript maps one source file to one JavaScript output file. This eases the integration of existing tools such as bundlers and test runners. You can even start writing a single file without much change to your build setup. Each file's code structure is approximately preserved, too.
-
-### High Quality Dead Code Elimination
-
-The JavaScript ecosystem is very reliant on dependencies. Shipping the final product inevitably drags in a huge amount of code, lots of which the project doesn't actually use. These regions of dead code impact loading, parsing and interpretation speed. ReScript provides powerful dead code elimination at all levels:
-
-- Function- and module-level code elimination is facilitated by the well-engineered type system and purity analysis.
-- At the global level, ReScript generates code that is naturally friendly to dead code elimination done by bundling tools such as [Rollup](https://github.com/rollup/rollup) and [Closure Compiler](https://developers.google.com/closure/compiler/), after its own sophisticated elimination pass.
-- The same applies for ReScript's own tiny runtime (which is written in ReScript itself).
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/json.mdx b/pages/docs/manual/v12.0.0/json.mdx
deleted file mode 100644
index 7b500b560..000000000
--- a/pages/docs/manual/v12.0.0/json.mdx
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: "JSON"
-description: "Interacting with JSON in ReScript"
-canonical: "/docs/manual/v12.0.0/json"
----
-
-# JSON
-
-## Parse
-
-Bind to JavaScript's `JSON.parse` and type the return value as the type you're expecting:
-
-
-
-```res example
-// declare the shape of the json you're binding to
-type data = {names: array}
-
-// bind to JS' JSON.parse
-@scope("JSON") @val
-external parseIntoMyData: string => data = "parse"
-
-let result = parseIntoMyData(`{"names": ["Luke", "Christine"]}`)
-let name1 = result.names[0]
-```
-```js
-var result = JSON.parse("{\"names\": [\"Luke\", \"Christine\"]}");
-var name1 = result.names[0];
-```
-
-
-
-Where `data` can be any type you assume the JSON is. As you can see, this compiles to a straightforward `JSON.parse` call. As with regular JS, this is convenient, but has no guarantee that e.g. the data is correctly shaped, or even syntactically valid. Slightly dangerous.
-
-## Stringify
-
-Use [`JSON.stringify`](api/core/json#value-stringify) if your data is of type `JSON.t` or [`JSON.stringifyAny`](api/core/json#value-stringifyAny) if it is not.
-
-
-
-```res example
-Console.log(JSON.stringifyAny(["Amy", "Joe"]))
-```
-```js
-console.log(JSON.stringify([
- "Amy",
- "Joe"
-]));
-```
-
-
-
-## Import a JSON file
-
-Use the `@module` attribute to import JSON files directly.
-
-
-
-```res example
-@module external studentNames: JSON.t = "./students.json"
-Console.log(studentNames)
-```
-```js
-import * as StudentsJson from "./students.json";
-
-var studentNames = StudentsJson;
-
-console.log(studentNames);
-```
-```js
-var StudentsJson = require("./students.json");
-
-var studentNames = StudentsJson;
-
-console.log(studentNames);
-```
-
-
-
-## Advanced
-
-Thanks to untagged variants, JSON can be encoded and decoded idiomatically. Check it out on [the variants page](variant#decoding-and-encoding-json-idiomatically).
diff --git a/pages/docs/manual/v12.0.0/jsx.mdx b/pages/docs/manual/v12.0.0/jsx.mdx
deleted file mode 100644
index eefc78691..000000000
--- a/pages/docs/manual/v12.0.0/jsx.mdx
+++ /dev/null
@@ -1,383 +0,0 @@
----
-title: "JSX"
-description: "JSX syntax in ReScript and React"
-canonical: "/docs/manual/v12.0.0/jsx"
----
-
-# JSX
-
-Would you like some HTML syntax in your ReScript? If not, quickly skip over this section and pretend you didn't see anything!
-
-ReScript supports the JSX syntax, with some slight differences compared to the one in [ReactJS](https://facebook.github.io/react/docs/introducing-jsx.html). ReScript JSX isn't tied to ReactJS; they translate to normal function calls:
-
-**Note** for [ReScriptReact](https://rescript-lang.org/docs/react/latest/introduction) readers: this isn't what ReScriptReact turns JSX into, in the end. See Usage section for more info.
-
-## Capitalized
-
-
-
-```res
-
-```
-```js
-React.createElement(MyComponent, {
- name: "ReScript",
-});
-```
-
-
-
-becomes
-
-
-
-```res
-MyComponent.createElement(~name="ReScript", ~children=list{}, ())
-```
-```js
-React.createElement(MyComponent, {
- name: "ReScript",
-});
-```
-
-
-
-## Uncapitalized
-
-
-
-```res
-
child1 child2
-```
-```js
-React.createElement("div", {
- onClick: handler
-}, child1, child2);
-```
-
-
-
-becomes
-
-
-
-```res
-div(~onClick=handler, ~children=list{child1, child2}, ())
-```
-```js
-React.createElement("div", {
- onClick: handler
-}, child1, child2);
-```
-
-
-
-## Fragment
-
-
-
-```res
-<> child1 child2 >
-```
-```js
-React.createElement(React.Fragment, undefined, child1, child2);
-```
-
-
-
-becomes
-
-
-
-```res
-list{child1, child2}
-```
-```js
-React.createElement(React.Fragment, undefined, child1, child2);
-```
-
-
-
-### Children
-
-
-
-```res
- child1 child2
-```
-```js
-React.createElement(MyComponent, { children: null }, child1, child2);
-```
-
-
-
-This is the syntax for passing a list of two items, `child1` and `child2`, to the children position. It transforms to a list containing `child1` and `child2`:
-
-
-
-```res
-MyComponent.createElement(~children=list{child1, child2}, ())
-```
-```js
-React.createElement(MyComponent.make, MyComponent.makeProps(null, undefined), child1, child2);
-```
-
-
-
-**Note** again that this isn't the transform for ReScriptReact; ReScriptReact turns the final list into an array. But the idea still applies.
-
-So naturally, ` myChild ` is transformed to `MyComponent.createElement(~children=list{myChild}, ())`. I.e. whatever you do, the arguments passed to the children position will be wrapped in a list.
-
-## Usage
-
-See [ReScriptReact Elements & JSX](https://rescript-lang.org/docs/react/latest/elements-and-jsx) for an example application of JSX, which transforms the above calls into a ReScriptReact-specific call.
-
-Here's a JSX tag that shows most of the features.
-
-
-
-```res
-
-
{React.string("hello")}
-
-```
-```js
-React.createElement(MyComponent, {
- children: React.createElement("div", undefined, "hello"),
- booleanAttribute: true,
- stringAttribute: "string",
- intAttribute: 1,
- forcedOptional: "hello",
- onClick: handleClick
-});
-```
-
-
-
-## Departures From JS JSX
-
-- Attributes and children don't mandate `{}`, but we show them anyway for ease of learning. Once you format your file, some of them go away and some turn into parentheses.
-- Props spread is supported, but there are some restrictions (see below).
-- Punning!
-- Props and tag names have to follow ReScript's restrictions on identifiers at the exception of hyphens for lowercase tags ([see below](#hyphens-in-tag-names)).
-
-### Spread Props
-
-**Since 10.1**
-
-JSX props spread is supported now, but in a stricter way than in JS.
-
-
-
-```res
-
-```
-```js
-React.createElement(Comp, {
- a: "a",
- b: "b"
-});
-```
-
-
-
-Multiple spreads are not allowed:
-
-
-
-```res
-
-```
-
-
-
-The spread must be at the first position, followed by other props:
-
-
-
-```res
-
-```
-
-
-
-### Punning
-
-"Punning" refers to the syntax shorthand for when a label and a value are the same. For example, in JavaScript, instead of doing `return {name: name}`, you can do `return {name}`.
-
-JSX supports punning. `` is just a shorthand for ``. The formatter will help you format to the punned syntax whenever possible. This is convenient in the cases where there are lots of props to pass down:
-
-
-
-```res
-
-```
-```js
-React.createElement(MyComponent, {
- isLoading: true,
- text: text,
- onClick: onClick
-});
-```
-
-
-
-Consequently, a JSX component can cram in a few more props before reaching for extra libraries solutions that avoids props passing.
-
-**Note** that this is a departure from ReactJS JSX, which does **not** have punning. ReactJS' `` desugars to ``, in order to conform to DOM's idioms and for backward compatibility.
-
-### Hyphens in tag names
-
-**Since 11.1**
-
-JSX now supports lowercase tags with hyphens in their name. This allows to bind
-to web components.
-
-Note though that props names can't have hyphens, you should use `@as` to bind to
-such props in your custom `JsxDOM.domProps` type ([see generic JSX transform](#generic-jsx-transform-jsx-beyond-react-experimental)).
-
-
-
-```res
-
-```
-```js
-React.createElement("model-viewer", {
- "touch-actions": "pan-y",
- src: src
-});
-```
-
-
-
-## Generic JSX transform: JSX beyond React (experimental)
-
-**Since 11.1**
-
-While ReScript comes with first class support for JSX in React, it's also possible to have ReScript delegate JSX to other frameworks. You do that by configuring a _generic JSX transform_.
-
-This is what you need to do to use a generic JSX transform:
-1. Make sure you have a ReScript module that [implements the functions and types necessary for the JSX transform](#implementing-a-generic-jsx-transform-module).
-2. Configure `rescript.json` to delegated JSX to that module.
-
-That's it really. We'll expand on each point below.
-
-### Configuration
-You configure a generic JSX transform by putting any module name in the `module` config of JSX in `rescript.json`. This can be _any valid module name_. Example part from `rescript.json`:
-
-```json
-"jsx": {
- "module": "Preact"
- },
-```
-
-This will now put the `Preact` module in control of the generated JSX calls. The `Preact` module can be defined by anyone - locally in your project, or by a package. As long a it's available in the global scope. The JSX transform will delegate any JSX related code to `Preact`.
-
-#### What about `@react.component` for components?
-
-`@react.component` will still be available, and so is a generic `@jsx.component` notation. Both work the same way.
-
-### Usage Example
-Here's a quick usage example (the actual definition of `Preact.res` comes below):
-
-First, configure `rescript.json`:
-```json
-"jsx": {
- "module": "Preact"
- },
-```
-
-Now you can build Preact components:
-```rescript
-// Name.res
-@jsx.component // or @react.component if you want
-let make = (~name) => Preact.string(`Hello ${name}!`)
-```
-
-And you can use them just like normal with JSX:
-```rescript
-let name =
-```
-
-#### File level configuration
-You can configure what JSX transform is used at the file level via `@@jsxConfig`, just like before. Like:
-```rescript
-@@jsxConfig({module_: "Preact"})
-```
-
-This can be convenient if you're mixing different JSX frameworks in the same project.
-
-### Implementing a generic JSX transform module
-Below is a full list of everything you need in a generic JSX transform module, including code comments to clarify. It's an example implementation of a `Preact` transform, so when doing this for other frameworks you'd of course adapt what you import from, and so on.
-
-> You can easily copy-paste-and-adapt this to your needs if you're creating bindings to a JSX framework. Most often, all you'll need to change is what the `@module("") external` points to, so the runtime calls point to the correct JS module.
-
-```rescript
-// Preact.res
-/* Below is a number of aliases to the common `Jsx` module */
-type element = Jsx.element
-
-type component<'props> = Jsx.component<'props>
-
-type componentLike<'props, 'return> = Jsx.componentLike<'props, 'return>
-
-@module("preact")
-external jsx: (component<'props>, 'props) => element = "jsx"
-
-@module("preact")
-external jsxKeyed: (component<'props>, 'props, ~key: string=?, @ignore unit) => element = "jsx"
-
-@module("preact")
-external jsxs: (component<'props>, 'props) => element = "jsxs"
-
-@module("preact")
-external jsxsKeyed: (component<'props>, 'props, ~key: string=?, @ignore unit) => element = "jsxs"
-
-/* These identity functions and static values below are optional, but lets
-you move things easily to the `element` type. The only required thing to
-define though is `array`, which the JSX transform will output. */
-external array: array => element = "%identity"
-@val external null: element = "null"
-
-external float: float => element = "%identity"
-external int: int => element = "%identity"
-external string: string => element = "%identity"
-
-/* These are needed for Fragment (<> >) support */
-type fragmentProps = {children?: element}
-
-@module("preact") external jsxFragment: component = "Fragment"
-
-/* The Elements module is the equivalent to the ReactDOM module in React. This holds things relevant to _lowercase_ JSX elements. */
-module Elements = {
- /* Here you can control what props lowercase JSX elements should have.
- A base that the React JSX transform uses is provided via JsxDOM.domProps,
- but you can make this anything. The editor tooling will support
- autocompletion etc for your specific type. */
- type props = JsxDOM.domProps
-
- @module("preact")
- external jsx: (string, props) => Jsx.element = "jsx"
-
- @module("preact")
- external div: (string, props) => Jsx.element = "jsx"
-
- @module("preact")
- external jsxKeyed: (string, props, ~key: string=?, @ignore unit) => Jsx.element = "jsx"
-
- @module("preact")
- external jsxs: (string, props) => Jsx.element = "jsxs"
-
- @module("preact")
- external jsxsKeyed: (string, props, ~key: string=?, @ignore unit) => Jsx.element = "jsxs"
-
- external someElement: element => option = "%identity"
-}
-```
-
-As you can see, most of the things you'll want to implement will be copy paste from the above. But do note that **everything needs to be there unless explicitly noted** or the transform will fail at compile time.
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/lazy-values.mdx b/pages/docs/manual/v12.0.0/lazy-values.mdx
deleted file mode 100644
index 9e541f608..000000000
--- a/pages/docs/manual/v12.0.0/lazy-values.mdx
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Lazy Value"
-description: "Data type for deferred computation in ReScript"
-canonical: "/docs/manual/v12.0.0/lazy-values"
----
-
-# Lazy Value
-
-If you have some expensive computations you'd like to **defer and cache** subsequently, you can turn them into *lazy* values:
-
-
-
-```res prelude
-@module("node:fs")
-external readdirSync: string => array = "readdirSync"
-
-// Read the directory, only once
-let expensiveFilesRead = Lazy.make(() => {
- Console.log("Reading dir")
- readdirSync("./pages")
-})
-```
-```js
-import * as Lazy from "./stdlib/Lazy.js";
-import * as Nodefs from "node:fs";
-
-let expensiveFilesRead = Lazy.make(() => {
- console.log("Reading dir");
- return Nodefs.readdirSync("./pages");
-});
-
-```
-
-
-
-**Note**: a lazy value is **not** a [shared data type](shared-data-types.md). Don't rely on its runtime representation in your JavaScript code.
-
-## Execute The Lazy Computation
-
-To actually run the lazy value's computation, use `Lazy.get` from the standard library `Lazy` module:
-
-
-
-```res example
-// First call. The computation happens
-Console.log(Lazy.get(expensiveFilesRead)) // logs "Reading dir" and the directory content
-
-// Second call. Will just return the already calculated result
-Console.log(Lazy.get(expensiveFilesRead)) // logs the directory content
-```
-```js
-console.log(Lazy.get(expensiveFilesRead));
-
-console.log(Lazy.get(expensiveFilesRead));
-```
-
-
-
-The first time `Lazy.get` is called, the expensive computation happens and the result is **cached**. The second time, the cached value is directly used.
-
-**You can't re-trigger the computation after the first `get` call**. Make sure you only use a lazy value with computations whose results don't change (e.g. an expensive server request whose response is always the same).
-
-## Exception Handling
-
-For completeness' sake, our files read example might throw an exception because of `readdirSync`. Here's how you'd handle it:
-
-
-
-```res example
-let result = try {
- Lazy.get(expensiveFilesRead)
-} catch {
-| Not_found => [] // empty array of files
-}
-```
-```js
-let result;
-
-try {
- result = Lazy.get(expensiveFilesRead);
-} catch (raw_exn) {
- let exn = Primitive_exceptions.internalToException(raw_exn);
- if (exn.RE_EXN_ID === "Not_found") {
- result = [];
- } else {
- throw exn;
- }
-}
-```
-
-
-
-Though you should probably handle the exception inside the lazy computation itself.
diff --git a/pages/docs/manual/v12.0.0/let-binding.mdx b/pages/docs/manual/v12.0.0/let-binding.mdx
deleted file mode 100644
index 64d9377f0..000000000
--- a/pages/docs/manual/v12.0.0/let-binding.mdx
+++ /dev/null
@@ -1,185 +0,0 @@
----
-title: "Let Binding"
-description: "Let binding syntax for binding to values in ReScript"
-canonical: "/docs/manual/v12.0.0/let-binding"
----
-
-# Let Binding
-
-A "let binding", in other languages, might be called a "variable declaration". `let` _binds_ values to names. They can be seen and referenced by code that comes _after_ them.
-
-
-
-```res example
-let greeting = "hello!"
-let score = 10
-let newScore = 10 + score
-```
-```js
-var greeting = "hello!";
-var score = 10;
-var newScore = 20;
-```
-
-
-
-## Block Scope
-
-Bindings can be scoped through `{}`.
-
-
-
-```res example
-let message = {
- let part1 = "hello"
- let part2 = "world"
- part1 ++ " " ++ part2
-}
-// `part1` and `part2` not accessible here!
-```
-```js
-var message = "hello world";
-```
-
-
-
-The value of the last line of a scope is implicitly returned.
-
-### Design Decisions
-
-ReScript's `if`, `while` and functions all use the same block scoping mechanism. The code below works **not** because of some special "if scope"; but simply because it's the same scope syntax and feature you just saw:
-
-
-
-```res
-if displayGreeting {
- let message = "Enjoying the docs so far?"
- Console.log(message)
-}
-// `message` not accessible here!
-```
-```js
-if (displayGreeting) {
- console.log("Enjoying the docs so far?");
-}
-```
-
-
-
-## Bindings Are Immutable
-
-Let bindings are "immutable", aka "cannot change". This helps our type system deduce and optimize much more than other languages (and in turn, help you more).
-
-## Binding Shadowing
-
-The above restriction might sound unpractical at first. How would you change a value then? Usually, 2 ways:
-
-The first is to realize that many times, what you want isn't to mutate a variable's value. For example, this JavaScript pattern:
-
-```js
-var result = 0;
-result = calculate(result);
-result = calculateSomeMore(result);
-```
-
-...is really just to comment on intermediate steps. You didn't need to mutate `result` at all! You could have just written this JS:
-
-```js
-var result1 = 0;
-var result2 = calculate(result1);
-var result3 = calculateSomeMore(result2);
-```
-
-In ReScript, this obviously works too:
-
-
-
-```res
-let result1 = 0
-let result2 = calculate(result1)
-let result3 = calculateSomeMore(result2)
-```
-```js
-var result1 = 0;
-var result2 = calculate(0);
-var result3 = calculateSomeMore(result2);
-```
-
-
-
-Additionally, reusing the same let binding name overshadows the previous bindings with the same name. So you can write this too:
-
-
-
-```res
-let result = 0
-let result = calculate(result)
-let result = calculateSomeMore(result)
-```
-```js
-var result = calculate(0);
-var result$1 = calculateSomeMore(result);
-```
-
-
-
-(Though for the sake of clarity, we don't recommend this).
-
-As a matter of fact, even this is valid code:
-
-
-
-```res example
-let result = "hello"
-Console.log(result) // prints "hello"
-let result = 1
-Console.log(result) // prints 1
-```
-```js
-var result = 1;
-console.log("hello");
-console.log(1);
-```
-
-
-
-The binding you refer to is whatever's the closest upward. No mutation here!
-If you need _real_ mutation, e.g. passing a value around, have it modified by many pieces of code, we provide a slightly heavier [mutation feature](mutation.md).
-
-## Private let bindings
-
-Private let bindings are introduced in the release [7.2](https://rescript-lang.org/blog/bucklescript-release-7-2).
-
-In the module system, everything is public by default,
-the only way to hide some values is by providing a separate signature to
-list public fields and their types:
-
-```res
-module A: {
- let b: int
-} = {
- let a = 3
- let b = 4
-}
-```
-`%%private` gives you an option to mark private fields directly
-
-```res
-module A = {
- %%private(let a = 3)
- let b = 4
-}
-```
-
-`%%private` also applies to file level modules, so in some cases,
-users do not need to provide a separate interface file just to hide some particular values.
-
-Note interface files are still recommended as a general best practice since they give you better
-separate compilation units and also they're better for documentation.
-
-Still, `%%private` is useful in the following scenarios:
-
-- **Code generators.** Some code generators want to hide some values but it is sometimes very hard or time consuming for code generators to synthesize the types for public fields.
-
-- **Quick prototyping.** During prototyping, we still want to hide some values, but the interface file is not stable yet. `%%private` provides you such convenience.
-
diff --git a/pages/docs/manual/v12.0.0/libraries.mdx b/pages/docs/manual/v12.0.0/libraries.mdx
deleted file mode 100644
index 54f3ce735..000000000
--- a/pages/docs/manual/v12.0.0/libraries.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: "Libraries & Publishing"
-description: "Install & publish ReScript packages"
-canonical: "/docs/manual/v12.0.0/libraries"
----
-
-# Libraries & Publishing
-
-ReScript libraries are just like JavaScript libraries: published & hosted on [NPM](http://npmjs.com). You can reuse your `npm`, `yarn` and `package.json`-related tools to manage them!
-
-## Tips & Tricks
-
-### Publish
-
-We recommend you to check in your compiled JavaScript output, for its [various benefits](interop-with-js-build-systems.md#popular-js-build-systems). If not, then at least consider publishing the JavaScript output by un-ignoring them in your [npmignore](https://docs.npmjs.com/cli/v7/using-npm/developers#keeping-files-out-of-your-package). This way, your published ReScript package comes with plain JavaScript files that JS users can consume. If your project's good, JS users might not even realize that they've installed a library written in ReScript!
-
-In case your library is only consumed by JS users, you may want to check out our [external stdlib](./build-external-stdlib) configuration as well.
-
-### Find Libraries
-
-Search `rescript`-related packages on NPM, or use our [Package Index](/packages).
-
-If you can't find what you're looking for, remember that **you don't need a wrapper** to use a JS library:
-
-- Most JS data types, such as array and objects, [map over cleanly to ReScript and vice-versa](shared-data-types.md).
-- You also have access to the familiar [Core API](api/core).
-- You can use a JavaScript library without needing to install dedicated binding libraries. Check the [`external`](external) page.
diff --git a/pages/docs/manual/v12.0.0/migrate-to-v11.mdx b/pages/docs/manual/v12.0.0/migrate-to-v11.mdx
deleted file mode 100644
index b1977a59a..000000000
--- a/pages/docs/manual/v12.0.0/migrate-to-v11.mdx
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: "Migrate to v11"
-description: "Instructions on upgrading to ReScript 11"
-canonical: "/docs/manual/v12.0.0/migrate-to-v11"
----
-
-# Migrate to ReScript 11
-
-## Foreword
-
-The ReScript community is proud to introduce ReScript V11 which comes with a ton of new features but also removes a lot of bulk.
-A migration to it can be very straightforward, but it can also take some time, depending on your code style or what dependencies you use.
-
-Please have a look at the full [set of breaking changes](#list-of-all-breaking-changes) below to be able to decide whether this is a task you want to undertake. There is also the possibilty to [opt-out of uncurried mode](#minimal-migration) for now, which is probably the most fundamental change of this release. That and other new and notable features are discussed in the following blogposts:
-
-- [Better interop with customizable variants](/blog/improving-interop)
-- [Enhanced Ergonomics for Record Types](/blog/enhanced-ergonomics-for-record-types)
-- [First-class Dynamic Import Support](/blog/first-class-dynamic-import-support)
-- [Uncurried Mode](/blog/uncurried-mode)
-
-## Recommended Migration
-
-### Uncurried Mode
-
-For uncurried mode to take effect in ReScript 11 there is nothing to configure, it is activated by default.
-
-### Adapt suffix
-
-ReScript 11 now allows having arbitrary suffixes in the generated JavaScript files. However, it is still recommended to stick to using `.res.js`, `.res.mjs` or `.res.cjs`. For more information, read the Build System Configuration about [suffixes](/docs/manual/next/build-configuration#suffix).
-
-### rescript.json
-
-The old configuration filename `bsconfig.json` is deprecated. Rename `bsconfig.json` to `rescript.json` to get rid of the deprecation warning.
-
-### ReScript Core standard library
-
-[ReScript Core](https://github.com/rescript-association/rescript-core) is ReScript's new standard library. It replaces the complete `Js` module as well as some of the more frequently used modules from `Belt` and is recommended to use with uncurried mode.
-
-It will be integrated into the compiler in a future version. In ReScript 11, it still needs to be installed manually:
-
-```console
-$ npm install @rescript/core
-```
-
-Then add `@rescript/core` to your `rescript.json`'s dependencies:
-
-```diff
- {
- "bs-dependencies": [
-+ "@rescript/core"
- ]
- }
-```
-
-Open it so it's available in the global scope.
-
-```diff
- {
- "bsc-flags": [
-+ "-open RescriptCore",
- ]
- }
-```
-
-One major change to be aware of is that array access now returns an `option`.
-
-```res
-let firstItem = myArray[0] // Some("hello")
-```
-
-If you would like to not use an `option`, you can use [`Array.getUnsafe`](api/core/array#value-getUnsafe).
-
-For a detailed explanation on migration to ReScript Core, please refer to its [migration guide](https://github.com/rescript-association/rescript-core#migration). A semi-automated script is available as well.
-
-See ReScript Core API docs [here](api/core).
-
-### Removed bindings
-
-Many Node bindings have been removed from the compiler. Please use [rescript-nodejs](https://github.com/TheSpyder/rescript-nodejs) instead or write your own local bindings.
-
-## Minimal Migration
-
-This guide describes the things to do at least to migrate to ReScript 11.
-
-### Disable uncurried mode
-
-If you use currying extensively and don't want to bother with adapting your code, or have dependencies that just don't work with uncurried mode yet, just set it to false in your `rescript.json`.
-
-```json
-{
- "uncurried": false
-}
-```
-
-For more information, read the Build System Configuration about [uncurried](/docs/manual/next/build-configuration#uncurried).
-
-## List of all breaking changes
-
-Below is an excerpt from the compiler changelog about all the breaking changes of ReScript 11.
-
-### Language and Compiler
-
-- Add smart printer for pipe chains. https://github.com/rescript-lang/rescript-compiler/pull/6411 (the formatter will reformat existing code in certain cases)
-- Parse `assert` as a regular function. `assert` is no longer a unary expression. Example: before `assert 1 == 2` is parsed as `(assert 1) == 2`, now it is parsed as `assert(1 == 2)`. https://github.com/rescript-lang/rescript-compiler/pull/6180
-- Remove support for the legacy Reason syntax. Existing Reason code can be converted to ReScript syntax using ReScript 9 as follows:
- - `npx rescript@9 convert `
-- Curried after uncurried is not fused anymore: `(. x) => y => 3` is not equivalent to `(. x, y) => 3` anymore. It's instead equivalent to `(. x) => { y => 3 }`.
- Also, `(. int) => string => bool` is not equivalen to `(. int, string) => bool` anymore.
- These are only breaking changes for unformatted code.
-- Exponentiation operator `**` is now right-associative. `2. ** 3. ** 2.` now compile to `Math.pow(2, Math.pow(3, 2))` and not anymore `Math.pow(Math.pow(2, 3), 2)`. Parentheses can be used to change precedence.
-- Stop mangling object field names. If you had objects with field names containing "\__" or leading "_", they won't be mangled in the compiled JavaScript and represented as it is without changes. https://github.com/rescript-lang/rescript-compiler/pull/6354
-- `$$default` is no longer exported from the generated JavaScript when using default exports. https://github.com/rescript-lang/rescript-compiler/pull/6328
-- `-bs-super-errors` flag has been deprecated along with Super_errors. https://github.com/rescript-lang/rescript-compiler/pull/6243
-- Remove unsafe `` j`$(a)$(b)` `` interpolation deprecated in compiler version 10 https://github.com/rescript-lang/rescript-compiler/pull/6068
-- `@deriving(jsConverter)` not supported anymore for variant types https://github.com/rescript-lang/rescript-compiler/pull/6088
-- New representation for variants, where the tag is a string instead of a number. https://github.com/rescript-lang/rescript-compiler/pull/6088
-
-### Compiler Libraries
-
-- Fixed name collision between the newly defined Js.Json.t and the variant constructor in the existing Js.Json.kind type. To address this, the usage of the existing Js.Json.kind type can be updated to Js.Json.Kind.t. https://github.com/rescript-lang/rescript-compiler/pull/6317
-- Remove rudimentary node bindings and undocumented `%node` extension. https://github.com/rescript-lang/rescript-compiler/pull/6285
-- `@rescript/react` >= 0.12.0-alpha.2 is now required because of the React.fragment's children type fix. https://github.com/rescript-lang/rescript-compiler/pull/6238
-- Remove deprecated module `Printexc`
-
-### Build System and Tools
-
-- Update watcher rules to recompile only on config and `*.res`/`*.resi`/`*.ml`/`.mli` file changes. Solves the issue of unnecessary recompiles on `.css`, `.ts`, and other unrelated file changes. https://github.com/rescript-lang/rescript-compiler/pull/6420
-- Made pinned dependencies transitive: if _a_ is a pinned dependency of _b_ and _b_ is a pinned dependency of _c_, then _a_ is implicitly a pinned dependency of _c_. This change is only breaking if your build process assumes non-transitivity.
-- Remove obsolete built-in project templates and the "rescript init" functionality. This is replaced by [create-rescript-app](https://github.com/rescript-lang/create-rescript-app) which is maintained separately.
-- Do not attempt to build ReScript from source on npm postinstall for platforms without prebuilt binaries anymore.
-- GenType: removed support for `@genType.as` for records and variants which has become unnecessary. Use the language's `@as` instead to channge the runtime representation without requiring any runtime conversion during FFI. https://github.com/rescript-lang/rescript-compiler/pull/6099 https://github.com/rescript-lang/rescript-compiler/pull/6101
diff --git a/pages/docs/manual/v12.0.0/module.mdx b/pages/docs/manual/v12.0.0/module.mdx
deleted file mode 100644
index a32561bbe..000000000
--- a/pages/docs/manual/v12.0.0/module.mdx
+++ /dev/null
@@ -1,569 +0,0 @@
----
-title: "Module"
-description: "ReScript modules, module signatures and interface files"
-canonical: "/docs/manual/v12.0.0/module"
----
-
-# Module
-
-## Basics
-
-**Modules are like mini files**! They can contain type definitions, `let`
-bindings, nested modules, etc.
-
-### Creation
-
-To create a module, use the `module` keyword. The module name must start with a
-**capital letter**. Whatever you could place in a `.res` file, you may place
-inside a module definition's `{}` block.
-
-
-
-```res example
-module School = {
- type profession = Teacher | Director
-
- let person1 = Teacher
- let getProfession = (person) =>
- switch person {
- | Teacher => "A teacher"
- | Director => "A director"
- }
-}
-```
-```js
-function getProfession(person) {
- if (person) {
- return "A director";
- } else {
- return "A teacher";
- }
-}
-
-var School = {
- person1: /* Teacher */0,
- getProfession: getProfession
-};
-```
-
-
-
-A module's contents (including types!) can be accessed much like a record's,
-using the `.` notation. This demonstrates modules' utility for namespacing.
-
-
-
-```res
-let anotherPerson: School.profession = School.Teacher
-Console.log(School.getProfession(anotherPerson)) /* "A teacher" */
-```
-```js
-var anotherPerson = /* Teacher */0;
-console.log("A teacher");
-```
-
-
-
-Nested modules work too.
-
-
-
-```res example
-module MyModule = {
- module NestedModule = {
- let message = "hello"
- }
-}
-
-let message = MyModule.NestedModule.message
-```
-```js
-var NestedModule = {
- message: message
-};
-
-var MyModule = {
- NestedModule: NestedModule
-};
-
-var message = MyModule.NestedModule.message;
-```
-
-
-
-### `open`ing a module
-
-Constantly referring to a value/type in a module can be tedious. Instead, we can "open" a module and refer to its contents without always prepending them with the
-module's name. Instead of writing:
-
-
-
-```res
-let p = School.getProfession(School.person1)
-```
-```js
-var p = School.getProfession(School.person1);
-```
-
-
-
-We can write:
-
-
-
-```res
-open School
-let p = getProfession(person1)
-```
-```js
-var p = School.getProfession(School.person1);
-```
-
-
-
-The content of `School` module are made visible (**not** copied into the file, but simply made visible!) in scope. `profession`, `getProfession` and `person1` will thus correctly be found.
-
-**Use `open` this sparingly, it's convenient, but makes it hard to know where some values come from**. You should usually use `open` in a local scope:
-
-
-
-```res
-let p = {
- open School
- getProfession(person1)
-}
-/* School's content isn't visible here anymore */
-```
-```js
-var p = School.getProfession(School.person1);
-```
-
-
-
-### Use `open!` to ignore shadow warnings
-
-There are situations where `open` will cause a warning due to existing identifiers (bindings, types) being redefined. Use `open!` to explicitly tell the compiler that this is desired behavior.
-
-```res
-let map = (arr, value) => {
- value
-}
-
-// opening Array would shadow our previously defined `map`
-// `open!` will explicitly turn off the automatic warning
-open! Array
-let arr = map([1,2,3], (a) => { a + 1})
-```
-
-**Note:** Same as with `open`, don't overuse `open!` statements if not necessary. Use (sub)modules to prevent shadowing issues.
-
-### Destructuring modules
-
-**Since 9.0.2**
-
-As an alternative to `open`ing a module, you can also destructure a module's functions and values into separate let bindings (similarly on how we'd destructure an object in JavaScript).
-
-
-
-```res
-module User = {
- let user1 = "Anna"
- let user2 = "Franz"
-}
-
-// Destructure by name
-let {user1, user2} = module(User)
-
-// Destructure with different alias
-let {user1: anna, user2: franz} = module(User)
-```
-
-```js
-var user1 = "Anna";
-
-var user2 = "Franz";
-
-var User = {
- user1: user1,
- user2: user2
-};
-```
-
-
-
-**Note:** You can't extract types with module destructuring — use a type alias instead (`type user = User.myUserType`).
-
-### Extending modules
-
-Using `include` in a module statically "spreads" a module's content into a new one, thus often fulfill the role of "inheritance" or "mixin".
-
-**Note**: this is equivalent to a compiler-level copy paste. **We heavily discourage `include`**. Use it as last resort!
-
-
-
-```res example
-module BaseComponent = {
- let defaultGreeting = "Hello"
- let getAudience = (~excited) => excited ? "world!" : "world"
-}
-
-module ActualComponent = {
- /* the content is copied over */
- include BaseComponent
- /* overrides BaseComponent.defaultGreeting */
- let defaultGreeting = "Hey"
- let render = () => defaultGreeting ++ " " ++ getAudience(~excited=true)
-}
-```
-```js
-function getAudience(excited) {
- if (excited) {
- return "world!";
- } else {
- return "world";
- }
-}
-
-var BaseComponent = {
- defaultGreeting: "Hello",
- getAudience: getAudience
-};
-
-var defaultGreeting = "Hey";
-
-function render(param) {
- return "Hey world!";
-}
-
-var ActualComponent = {
- getAudience: getAudience,
- defaultGreeting: defaultGreeting,
- render: render
-};
-```
-
-
-
-**Note**: `open` and `include` are very different! The former brings a module's content into your current scope, so that you don't have to refer to a value by prefixing it with the module's name every time. The latter **copies over** the definition of a module statically, then also do an `open`.
-
-### Every `.res` file is a module
-
-Every ReScript file is itself compiled to a module of the same name as the file name, capitalized. The file `React.res` implicitly forms a module `React`, which can be seen by other source files.
-
-**Note**: ReScript file names should, by convention, be capitalized so that their casing matches their module name. Uncapitalized file names are not invalid, but will be implicitly transformed into a capitalized module name. I.e. `file.res` will be compiled into the module `File`. To simplify and minimize the disconnect here, the convention is therefore to capitalize file names.
-
-## Signatures
-
-A module's type is called a "signature", and can be written explicitly. If a
-module is like a `.res` (implementation) file, then a module's signature is like
-a `.resi` (interface) file.
-
-### Creation
-
-To create a signature, use the `module type` keyword. The signature name must start with a
-**capital letter**. Whatever you could place in a `.resi` file, you may place
-inside a signature definition's `{}` block.
-
-
-
-```res example
-/* Picking up previous section's example */
-module type EstablishmentType = {
- type profession
- let getProfession: profession => string
-}
-```
-```js
-// Empty output
-```
-
-
-
-A signature defines the list of requirements that a module must satisfy in order
-for that module to match the signature. Those requirements are of the form:
-
-- `let x: int` requires a `let` binding named `x`, of type `int`.
-- `type t = someType` requires a type field `t` to be equal to `someType`.
-- `type t` requires a type field `t`, but without imposing any requirements on the actual, concrete type of `t`. We'd use `t` in other entries in the signature to describe relationships, e.g. `let makePair: t => (t, t)` but we cannot, for example, assume that `t` is an `int`. This gives us great, enforced abstraction abilities.
-
-To illustrate the various kinds of type entries, consider the above signature
-`EstablishmentType` which requires that a module:
-
-- Declare a type named `profession`.
-- Must include a function that takes in a value of the type `profession` and returns a string.
-
-**Note**:
-
-Modules of the type `EstablishmentType` can contain more fields than the
-signature declares, just like the module `School` in the previous section (if we
-choose to assign it the type `EstablishmentType`. Otherwise, `School` exposes
-every field). This effectively makes the `person1` field an enforced
-implementation detail! Outsiders can't access it, since it's not present in the
-signature; the signature **constrained** what others can access.
-
-The type `EstablishmentType.profession` is **abstract**: it doesn't have a
-concrete type; it's saying "I don't care what the actual type is, but it's used
-as input to `getProfession`". This is useful to fit many modules under the same
-interface:
-
-
-
-```res
-module Company: EstablishmentType = {
- type profession = CEO | Designer | Engineer | ...
-
- let getProfession = (person) => ...
- let person1 = ...
- let person2 = ...
-}
-```
-```js
-function getProfession(person) {
- ...
-}
-
-var person1 = ...
-
-var person2 = ...
-
-var Company = {
- getProfession: getProfession,
- person1: person1,
- person2: person2
-};
-```
-
-
-
-It's also useful to hide the underlying type as an implementation detail others
-can't rely on. If you ask what the type of `Company.profession` is, instead of
-exposing the variant, it'll only tell you "it's `Company.profession`".
-
-### Extending module signatures
-
-Like modules themselves, module signatures can also be extended by other module signatures using `include`. Again, **heavily discouraged**:
-
-
-
-```res example
-module type BaseComponent = {
- let defaultGreeting: string
- let getAudience: (~excited: bool) => string
-}
-
-module type ActualComponent = {
- /* the BaseComponent signature is copied over */
- include BaseComponent
- let render: unit => string
-}
-```
-```js
-// Empty output
-```
-
-
-
-**Note**: `BaseComponent` is a module **type**, not an actual module itself!
-
-If you do not have a defined module type, you can extract it from an actual module
-using `include (module type of ActualModuleName)`. For example, we can extend the
-`List` module from the standard library, which does not define a module
-type.
-
-
-
-```res example
-module type MyList = {
- include (module type of List)
- let myListFun: list<'a> => list<'a>
-}
-```
-```js
-// Empty output
-```
-
-
-
-### Every `.resi` file is a signature
-
-Similar to how a `React.res` file implicitly defines a module `React`, a file
-`React.resi` implicitly defines a signature for `React`. If `React.resi` isn't
-provided, the signature of `React.res` defaults to exposing all the fields of the
-module. Because they don't contain implementation files, `.resi` files are used
-in the ecosystem to also document the public API of their corresponding modules.
-
-
-
-```res example
-/* file React.res (implementation. Compiles to module React) */
-type state = int
-let render = (str) => str
-```
-```js
-function render(str) {
- return str;
-}
-```
-
-
-
-```res sig
-/* file React.resi (interface. Compiles to the signature of React.res) */
-type state = int
-let render: string => string
-```
-
-## Module Functions (functors)
-
-Modules can be passed to functions! It would be the equivalent of passing a file
-as a first-class item. However, modules are at a different "layer" of the
-language than other common concepts, so we can't pass them to *regular*
-functions. Instead, we pass them to special functions called "functors".
-
-The syntax for defining and using functors is very much like the syntax
-for defining and using regular functions. The primary differences are:
-
-- Functors use the `module` keyword instead of `let`.
-- Functors take modules as arguments and return a module.
-- Functors *require* annotating arguments.
-- Functors must start with a capital letter (just like modules/signatures).
-
-Here's an example `MakeSet` functor, that takes in a module of the type
-`Comparable` and returns a new set that can contain such comparable items.
-
-
-
-```res prelude
-module type Comparable = {
- type t
- let equal: (t, t) => bool
-}
-
-module MakeSet = (Item: Comparable) => {
- // let's use a list as our naive backing data structure
- type backingType = list
- let empty = list{}
- let add = (currentSet: backingType, newItem: Item.t): backingType =>
- // if item exists
- if currentSet->List.some(x => Item.equal(x, newItem)) {
- currentSet // return the same (immutable) set (a list really)
- } else {
- list{
- newItem,
- ...currentSet // prepend to the set and return it
- }
- }
-}
-```
-```js
-var List = require("./stdlib/list.js");
-
-function MakeSet(Item) {
- var add = function(currentSet, newItem) {
- if (
- List.exists(function(x) {
- return Item.equal(x, newItem);
- }, currentSet)
- ) {
- return currentSet;
- } else {
- return {
- hd: newItem,
- tl: currentSet,
- };
- }
- };
- return {
- empty: /* [] */ 0,
- add: add,
- };
-}
-```
-
-
-
-Functors can be applied using function application syntax. In this case, we're
-creating a set, whose items are pairs of integers.
-
-
-
-```res example
-module IntPair = {
- type t = (int, int)
- let equal = ((x1: int, y1: int), (x2, y2)) => x1 == x2 && y1 == y2
- let create = (x, y) => (x, y)
-}
-
-/* IntPair abides by the Comparable signature required by MakeSet */
-module SetOfIntPairs = MakeSet(IntPair)
-```
-```js
-function equal(param, param$1) {
- if (param[0] === param$1[0]) {
- return param[1] === param$1[1];
- } else {
- return false;
- }
-}
-
-function create(x, y) {
- return [x, y];
-}
-
-var IntPair = {
- equal: equal,
- create: create,
-};
-
-var SetOfIntPairs = {
- empty: /* [] */ 0,
- add: add,
-};
-```
-
-
-
-### Module functions types
-
-Like with module types, functor types also act to constrain and hide what we may
-assume about functors. The syntax for functor types are consistent with those
-for function types, but with types capitalized to represent the signatures of
-modules the functor accepts as arguments and return values. In the
-previous example, we're exposing the backing type of a set; by giving `MakeSet`
-a functor signature, we can hide the underlying data structure!
-
-
-
-```res
-module type Comparable = ...
-
-module type MakeSetType = (Item: Comparable) => {
- type backingType
- let empty: backingType
- let add: (backingType, Item.t) => backingType
-}
-
-module MakeSet: MakeSetType = (Item: Comparable) => {
- ...
-}
-```
-```js
-// Empty output
-```
-
-
-
-## Exotic Module Filenames
-
-**Since 8.3**
-
-It is possible to use non-conventional characters in your filenames (which is sometimes needed for specific JS frameworks). Here are some examples:
-
-- `src/Button.ios.res`
-- `pages/[id].res`
-
-Please note that modules with an exotic filename will not be accessible from other ReScript modules.
-
-## Tips & Tricks
-
-Modules and functors are at a different "layer" of language than the rest (functions, let bindings, data structures, etc.). For example, you can't easily pass them into a tuple or record. Use them judiciously, if ever! Lots of times, just a record or a function is enough.
diff --git a/pages/docs/manual/v12.0.0/mutation.mdx b/pages/docs/manual/v12.0.0/mutation.mdx
deleted file mode 100644
index 8162d8ec0..000000000
--- a/pages/docs/manual/v12.0.0/mutation.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "Mutation"
-description: "Imperative and mutative programming capabilities in ReScript"
-canonical: "/docs/manual/v12.0.0/mutation"
----
-
-# Mutation
-
-ReScript has great traditional imperative & mutative programming capabilities. You should use these features sparingly, but sometimes they allow your code to be more performant and written in a more familiar pattern.
-
-## Mutate Let-binding
-
-Let-bindings are immutable, but you can wrap it with a `ref`, exposed as a record with a single mutable field in the standard library:
-
-
-
-```res prelude
-let myValue = ref(5)
-```
-```js
-var myValue = {
- contents: 5
-};
-```
-
-
-
-## Usage
-
-You can get the actual value of a `ref` box through accessing its `contents` field:
-
-
-
-```res example
-let five = myValue.contents // 5
-```
-```js
-var five = myValue.contents;
-```
-
-
-
-Assign a new value to `myValue` like so:
-
-
-
-```res example
-myValue.contents = 6
-```
-```js
-myValue.contents = 6;
-```
-
-
-
-We provide a syntax sugar for this:
-
-
-
-```res example
-myValue := 6
-```
-```js
-myValue.contents = 6;
-```
-
-
-
-Note that the previous binding `five` stays `5`, since it got the underlying item on the `ref` box, not the `ref` itself.
-
-**Note**: you might see in the JS output tabs above that `ref` allocates an object. Worry not; local, non-exported `ref`s allocations are optimized away.
-
-## Tip & Tricks
-
-Before reaching for `ref`, know that you can achieve lightweight, local "mutations" through [overriding let bindings](let-binding.md#binding-shadowing).
diff --git a/pages/docs/manual/v12.0.0/null-undefined-option.mdx b/pages/docs/manual/v12.0.0/null-undefined-option.mdx
deleted file mode 100644
index 9113030f9..000000000
--- a/pages/docs/manual/v12.0.0/null-undefined-option.mdx
+++ /dev/null
@@ -1,203 +0,0 @@
----
-title: "Null, Undefined and Option"
-description: "JS interop with nullable and optional values in ReScript"
-canonical: "/docs/manual/v12.0.0/null-undefined-option"
----
-
-# Null, Undefined and Option
-
-ReScript itself doesn't have the notion of `null` or `undefined`. This is a _great_ thing, as it wipes out an entire category of bugs. No more `undefined is not a function`, and `cannot access someAttribute of undefined`!
-
-However, the **concept** of a potentially nonexistent value is still useful, and safely exists in our language.
-
-We represent the existence and nonexistence of a value by wrapping it with the `option` type. Here's its definition from the standard library:
-
-
-
-```res example
-type option<'a> = None | Some('a)
-```
-```js
-// Empty output
-```
-
-
-
-It means "a value of type option is either None (representing nothing) or that actual value wrapped in a Some".
-
-**Note** how the `option` type is just a regular [variant](variant.md).
-
-## Example
-
-Here's a normal value:
-
-
-
-```res example
-let licenseNumber = 5
-```
-```js
-var licenseNumber = 5;
-```
-
-
-
-To represent the concept of "maybe null", you'd turn this into an `option` type by wrapping it. For the sake of a more illustrative example, we'll put a condition around it:
-
-
-
-```res
-let licenseNumber =
- if personHasACar {
- Some(5)
- } else {
- None
- }
-```
-```js
-var licenseNumber = personHasACar ? 5 : undefined;
-```
-
-
-
-Later on, when another piece of code receives such value, it'd be forced to handle both cases through [pattern matching](pattern-matching-destructuring.md):
-
-
-
-```res
-switch licenseNumber {
-| None =>
- Console.log("The person doesn't have a car")
-| Some(number) =>
- Console.log("The person's license number is " ++ Int.toString(number))
-}
-```
-```js
-var number = licenseNumber;
-
-if (number !== undefined) {
- console.log("The person's license number is " + number.toString());
-} else {
- console.log("The person doesn't have a car");
-}
-```
-
-
-
-By turning your ordinary number into an `option` type, and by forcing you to handle the `None` case, the language effectively removed the possibility for you to mishandle, or forget to handle, a conceptual `null` value! **A pure ReScript program doesn't have null errors**.
-
-## Interoperate with JavaScript `undefined` and `null`
-
-The `option` type is common enough that we special-case it when compiling to JavaScript:
-
-
-
-```res example
-let x = Some(5)
-```
-```js
-var x = 5;
-```
-
-
-
-simply compiles down to `5`, and
-
-
-
-```res example
-let x = None
-```
-```js
-var x;
-```
-
-
-
-compiles to `undefined`! If you've got e.g. a string in JavaScript that you know might be `undefined`, type it as `option` and you're done! Likewise, you can send a `Some(5)` or `None` to the JS side and expect it to be interpreted correctly =)
-
-### Caveat 1
-
-The option-to-undefined translation isn't perfect, because on our side, `option` values can be composed:
-
-
-
-```res example
-let x = Some(Some(Some(5)))
-```
-```js
-var x = 5;
-```
-
-
-
-This still compiles to `5`, but this gets troublesome:
-
-
-
-```res example
-let x = Some(None)
-```
-```js
-var Caml_option = require("./stdlib/caml_option.js");
-
-var x = Caml_option.some(undefined);
-```
-
-(See output tab).
-
-
-
-What's this `Caml_option.some` thing? Why can't this compile to `undefined`? Long story short, when dealing with a polymorphic `option` type (aka `option<'a>`, for any `'a`), many operations become tricky if we don't mark the value with some special annotation. If this doesn't make sense, don't worry; just remember the following rule:
-
-- **Never, EVER, pass a nested `option` value (e.g. `Some(Some(Some(5)))`) into the JS side.**
-- **Never, EVER, annotate a value coming from JS as `option<'a>`. Always give the concrete, non-polymorphic type.**
-
-### Caveat 2
-
-Unfortunately, lots of times, your JavaScript value might be _both_ `null` or `undefined`. In that case, you unfortunately can't type such value as e.g. `option`, since our `option` type only checks for `undefined` and not `null` when dealing with a `None`.
-
-#### Solution: More Sophisticated `undefined` & `null` Interop
-
-To solve this, we provide access to more elaborate `null` and `undefined` helpers through the [`Nullable`](api/core/nullable) module. This somewhat works like an `option` type, but is different from it.
-
-#### Examples
-
-To create a JS `null`, use the value `Nullable.null`. To create a JS `undefined`, use `Nullable.undefined` (you can naturally use `None` too, but that's not the point here; the `Nullable.*` helpers wouldn't work with it).
-
-If you're receiving, for example, a JS string that can be `null` and `undefined`, type it as:
-
-
-
-```res example
-@module("MyConstant") external myId: Nullable.t = "myId"
-```
-```js
-// Empty output
-```
-
-
-
-To create such a nullable string from our side (presumably to pass it to the JS side, for interop purpose), do:
-
-
-
-```res example
-@module("MyIdValidator") external validate: Nullable.t => bool = "validate"
-let personId: Nullable.t = Nullable.make("abc123")
-
-let result = validate(personId)
-```
-```js
-var MyIdValidator = require("MyIdValidator");
-var personId = "abc123";
-var result = MyIdValidator.validate(personId);
-```
-
-
-
-The `return` part "wraps" a string into a nullable string, to make the type system understand and track the fact that, as you pass this value around, it's not just a string, but a string that can be `null` or `undefined`.
-
-#### Convert to/from `option`
-
-`Nullable.fromOption` converts from a `option` to `Nullable.t`. `Nullable.toOption` does the opposite.
diff --git a/pages/docs/manual/v12.0.0/object.mdx b/pages/docs/manual/v12.0.0/object.mdx
deleted file mode 100644
index abb2011d9..000000000
--- a/pages/docs/manual/v12.0.0/object.mdx
+++ /dev/null
@@ -1,195 +0,0 @@
----
-title: "Object"
-description: "Interoping with JS objects in ReScript"
-canonical: "/docs/manual/v12.0.0/object"
----
-
-# Object
-
-ReScript objects are like [records](record.md), but:
-
-- No type declaration needed.
-- Structural and more polymorphic, [unlike records](record.md#record-types-are-found-by-field-name).
-- Doesn't support updates unless the object comes from the JS side.
-- Doesn't support [pattern matching](pattern-matching-destructuring).
-
-
-
-Although ReScript records compile to clean JavaScript objects, ReScript objects are a better candidate for emulating/binding to JS objects, as you'll see.
-
-## Type Declaration
-
-**Optional**, unlike for records. The type of an object is inferred from the value, so you never really need to write down its type definition. Nevertheless, here's its type declaration syntax:
-
-
-
-```res prelude
-type person = {
- "age": int,
- "name": string
-};
-```
-```js
-// Empty output
-```
-
-
-
-Visually similar to record type's syntax, with the field names quoted.
-
-
-
-## Creation
-
-To create a new object:
-
-
-
-```res example
-let me = {
- "age": 5,
- "name": "Big ReScript"
-}
-```
-```js
-var me = {
- "age": 5,
- "name": "Big ReScript"
-};
-```
-
-
-
-**Note**: as said above, unlike for record, this `me` value does **not** try to find a conforming type declaration with the field `"age"` and `"name"`; rather, the type of `me` is inferred as `{"age": int, "name": string}`. This is convenient, but also means this code passes type checking without errors:
-
-
-
-```res
-type person = {
- "age": int
-};
-
-let me = {
- "age": "hello!" // age is a string. No error.
-}
-```
-```js
-var me = {
- "age": "hello!"
-};
-```
-
-
-
-Since the type checker doesn't try to match `me` with the type `person`. If you ever want to force an object value to be of a predeclared object type, just annotate the value:
-
-```res
-let me: person = {
- "age": "hello!"
-}
-```
-
-Now the type system will error properly.
-
-## Access
-
-
-
-```res
-let age = me["age"]
-```
-```js
-var age = me["age"];
-```
-
-
-
-## Update
-
-Disallowed unless the object is a binding that comes from the JavaScript side. In that case, use `=`
-
-
-
-```res example
-type student = {
- @set "age": int,
- @set "name": string,
-}
-@module("MyJSFile") external student1: student = "student1"
-
-student1["name"] = "Mary"
-```
-```js
-var MyJSFile = require("MyJSFile");
-MyJSFile.student1.name = "Mary";
-```
-
-
-
-## Combine Types
-
-You can spread one object type definition into another using `...`:
-
-
-
-```res example
-type point2d = {
- "x": float,
- "y": float,
-}
-type point3d = {
- ...point2d,
- "z": float,
-}
-
-let myPoint: point3d = {
- "x": 1.0,
- "y": 2.0,
- "z": 3.0,
-}
-```
-```js
-var myPoint = {
- x: 1.0,
- y: 2.0,
- z: 3.0
-};
-```
-
-
-
-This only works with object types, not object values!
-
-## Tips & Tricks
-
-Since objects don't require type declarations, and since ReScript infers all the types for you, you get to very quickly and easily (and dangerously) bind to any JavaScript API. Check the JS output tab:
-
-
-
-```res example
-// The type of document is just some random type 'a
-// that we won't bother to specify
-@val external document: 'a = "document"
-
-// call a method
-document["addEventListener"]("mouseup", _event => {
- Console.log("clicked!")
-})
-
-// get a property
-let loc = document["location"]
-
-// set a property
-document["location"]["href"] = "rescript-lang.org"
-```
-```js
-document.addEventListener("mouseup", function(_event) {
- console.log("clicked!");
-});
-var loc = document.location;
-document.location.href = "rescript-lang.org";
-```
-
-
-
-The `external` feature and the usage of this trick are also documented in the [external](external#tips--tricks) section later. It's an excellent way to start writing some ReScript code without worrying about whether bindings to a particular library exists.
diff --git a/pages/docs/manual/v12.0.0/overview.mdx b/pages/docs/manual/v12.0.0/overview.mdx
deleted file mode 100644
index bb2269eab..000000000
--- a/pages/docs/manual/v12.0.0/overview.mdx
+++ /dev/null
@@ -1,255 +0,0 @@
----
-title: "Overview"
-metaTitle: "Language Features Overview"
-description: "A quick overview on ReScript's syntax"
-canonical: "/docs/manual/v12.0.0/overview"
----
-
-# Overview
-
-## Comparison to JS
-
-### Semicolon
-
-| JavaScript | ReScript |
-| ---------------------------------- | -------------------- |
-| Rules enforced by linter/formatter | No semicolon needed! |
-
-### Comments
-
-| JavaScript | ReScript |
-| -------------------- | -------------------------------- |
-| `// Line comment` | Same |
-| `/* Comment */` | Same |
-| `/** Doc Comment */` | `/** Before Types/Values */` |
-| | `/*** Standalone Doc Comment */` |
-
-### Variable
-
-| JavaScript | ReScript |
-| ----------------------- | ------------------------------------- |
-| `const x = 5;` | `let x = 5` |
-| `var x = y;` | No equivalent (thankfully) |
-| `let x = 5; x = x + 1;` | `let x = ref(5); x := x.contents + 1` |
-
-### String & Character
-
-| JavaScript | ReScript |
-| ---------------------------- | --------------------- |
-| `"Hello world!"` | Same |
-| `'Hello world!'` | Strings must use `"` |
-| `"hello " + "world"` | `"hello " ++ "world"` |
-| `` `hello ${message}` `` | Same |
-| `` sql`select ${fnName};` `` | Same |
-
-### Boolean
-
-| JavaScript | ReScript |
-| ------------------------------------- | ---------------------------------------------- |
-| `true`, `false` | Same |
-| `!true` | Same |
-| `\|\|`, `&&`, `<=`, `>=`, `<`, `>` | Same |
-| `a === b`, `a !== b` | Same |
-| No deep equality (recursive compare) | `a == b`, `a != b` |
-| `a == b` | No equality with implicit casting (thankfully) |
-
-### Number
-
-| JavaScript | ReScript |
-| ----------- | ------------ |
-| `3` | Same \* |
-| `3.1415` | Same |
-| `3 + 4` | Same |
-| `3.0 + 4.5` | `3.0 +. 4.5` |
-| `5 % 3` | `mod(5, 3)` |
-
-\* JS has no distinction between integer and float.
-
-### Object/Record
-
-| JavaScript | ReScript |
-| ------------------- | --------------------------------------- |
-| no types | `type point = {x: int, mutable y: int}` |
-| `{x: 30, y: 20}` | Same |
-| `point.x` | Same |
-| `point.y = 30;` | Same |
-| `{...point, x: 30}` | Same |
-
-### Array
-
-| JavaScript | ReScript |
-| ------------------ | --------------------- |
-| `[1, 2, 3]` | Same |
-| `myArray[1] = 10` | Same |
-| `[1, "Bob", true]` | `(1, "Bob", true)` \* |
-
-\* ReScript does not have heterogenous arrays. Use tuples or [Untagged Variants](variant#untagged-variants) instead.
-
-### Null
-
-| JavaScript | ReScript |
-| ------------------- | --------- |
-| `null`, `undefined` | `None` \* |
-
-\* Again, only a spiritual equivalent; we don't have nulls, nor null bugs! But we do have an `option` type for when you actually need nullability.
-
-### Function
-
-| JavaScript | ReScript |
-| ------------------------------- | ---------------------------- |
-| `arg => retVal` | Same |
-| `function named(arg) {...}` | `let named = (arg) => {...}` |
-| `const f = function(arg) {...}` | `let f = (arg) => {...}` |
-| `add(4, add(5, 6))` | Same |
-
-### Async Function / Await
-
-| JavaScript | ReScript |
-| --------------------------------------- | ----------------------------------------------------- |
-| `async (arg) => {...}` | Same |
-| `async function named(arg) {...}` | `let named = async (arg) => {...}` |
-| `await somePromise` | Same |
-| `async (arg): Promise => {...}` | `async (arg): string => {...}` (note the return type) |
-
-### Blocks
-
-
- ```
- let myFun = (x, y) => {
- let doubleX = x + x
- let doubleY = y + y
- doubleX + doubleY
- }
- ```
-
-
-
-
-
-### If-else
-
-| JavaScript | ReScript |
-| --------------------- | --------------------------------------------------------------------------------- |
-| `if (a) {b} else {c}` | `if a {b} else {c}` \* |
-| `a ? b : c` | Same |
-| `switch` | `switch` but [super-powered pattern matching!](pattern-matching-destructuring.md) |
-
-\* Our conditionals are always expressions! You can write `let result = if a {"hello"} else {"bye"}`
-
-### Destructuring
-
-| JavaScript | ReScript |
-| ----------------------------- | --------------------------- |
-| `const {a, b} = data` | `let {a, b} = data` |
-| `const [a, b] = data` | `let [a, b] = data` \* |
-| `const {a: aa, b: bb} = data` | `let {a: aa, b: bb} = data` |
-
-\* Gives good compiler warning that `data` might not be of length 2.
-
-### Loop
-
-| JavaScript | ReScript |
-| ------------------------------------- | ---------------------------- |
-| `for (let i = 0; i <= 10; i++) {...}` | `for i in 0 to 10 {...}` |
-| `for (let i = 10; i >= 0; i--) {...}` | `for i in 10 downto 0 {...}` |
-| `while (true) {...}` | `while true {...}` |
-
-### JSX
-
-| JavaScript | ReScript |
-| ----------------------------------------- | -------------------------- |
-| `` | Same |
-| `` | `` \* |
-| `` | `` |
-| No children spread | `...children` |
-
-\* Argument punning!
-
-### Exception
-
-| JavaScript | ReScript |
-| ----------------------------------------- | -------------------------------------------- |
-| `throw new SomeError(...)` | `throw(SomeException(...))` |
-| `try {a} catch (err) {...} finally {...}` | `try a catch { \| SomeException(err) => ...}` \* |
-
-\* No finally.
-
-### Blocks
-
-The last expression of a block delimited by `{}` implicitly returns (including function body). In JavaScript, this can only be simulated via an immediately-invoked function expression (since function bodies have their own local scope).
-
-
-
-
-
JavaScript
-
ReScript
-
-
-
-
-
- ```
- let result = (function() {
- const x = 23;
- const y = 34;
- return x + y;
- })();
- ```
-
-
- ```
- let result = {
- let x = 23
- let y = 34
- x + y
- }
- ```
-
-
-
-
-
-## Common Features' JS Output
-
-| Feature | Example | JavaScript Output |
-| ------------------------------- | ------------------------------------ | ------------------------------------------ |
-| String | `"Hello"` | `"Hello"` |
-| String Interpolation | `` `Hello ${message}` `` | `"Hello " + message` |
-| Character (disrecommended) | `'x'` | `120` (char code) |
-| Integer | `23`, `-23` | `23`, `-23` |
-| Float | `23.0`, `-23.0` | `23.0`, `-23.0` |
-| Integer Addition | `23 + 1` | `23 + 1` |
-| Float Addition | `23.0 +. 1.0` | `23.0 + 1.0` |
-| Integer Division/Multiplication | `2 / 23 * 1` | `2 / 23 * 1` |
-| Float Division/Multiplication | `2.0 /. 23.0 *. 1.0` | `2.0 / 23.0 * 1.0` |
-| Float Exponentiation | `2.0 ** 3.0` | `Math.pow(2.0, 3.0)` |
-| String Concatenation | `"Hello " ++ "World"` | `"Hello " + "World"` |
-| Comparison | `>`, `<`, `>=`, `<=` | `>`, `<`, `>=`, `<=` |
-| Boolean operation | `!`, `&&`, `\|\|` | `!`, `&&`, `\|\|` |
-| Shallow and deep Equality | `===`, `==` | `===`, `==` |
-| List (disrecommended) | `list{1, 2, 3}` | `{hd: 1, tl: {hd: 2, tl: {hd: 3, tl: 0}}}` |
-| List Prepend | `list{a1, a2, ...oldList}` | `{hd: a1, tl: {hd: a2, tl: theRest}}` |
-| Array | `[1, 2, 3]` | `[1, 2, 3]` |
-| Record | `type t = {b: int}; let a = {b: 10}` | `var a = {b: 10}` |
-| Multiline Comment | `/* Comment here */` | Not in output |
-| Single line Comment | `// Comment here` | Not in output |
-
-_Note that this is a cleaned-up comparison table; a few examples' JavaScript output are slightly different in reality._
diff --git a/pages/docs/manual/v12.0.0/pattern-matching-destructuring.mdx b/pages/docs/manual/v12.0.0/pattern-matching-destructuring.mdx
deleted file mode 100644
index 9ba00341b..000000000
--- a/pages/docs/manual/v12.0.0/pattern-matching-destructuring.mdx
+++ /dev/null
@@ -1,1081 +0,0 @@
----
-title: "Pattern Matching / Destructuring"
-description: "Pattern matching and destructuring complex data structures in ReScript"
-canonical: "/docs/manual/v12.0.0/pattern-matching-destructuring"
----
-
-# Pattern Matching / Destructuring
-
-One of ReScript's **best** feature is our pattern matching. Pattern matching combines 3 brilliant features into one:
-
-- Destructuring.
-- `switch` based on shape of data.
-- Exhaustiveness check.
-
-We'll dive into each aspect below.
-
-## Destructuring
-
-Even JavaScript has destructuring, which is "opening up" a data structure to extract the parts we want and assign variable names to them:
-
-
-
-```res example
-let coordinates = (10, 20, 30)
-let (x, _, _) = coordinates
-Console.log(x) // 10
-```
-```js
-var coordinates = [10, 20, 30];
-var x = 10;
-console.log(10);
-```
-
-
-
-Destructuring works with most built-in data structures:
-
-
-
-```res
-// Record
-type student = {name: string, age: int}
-let student1 = {name: "John", age: 10}
-let {name} = student1 // "John" assigned to `name`
-
-// Variant
-type result =
- | Success(string)
-let myResult = Success("You did it!")
-let Success(message) = myResult // "You did it!" assigned to `message`
-```
-```js
-var student1 = {
- name: "John",
- age: 10
-};
-var name = "John";
-
-var myResult = /* Success */{
- _0: "You did it!"
-};
-var message = "You did it!"
-
-var myArray = [1, 2, 3];
-if (myArray.length !== 2) {
- throw {
- RE_EXN_ID: "Match_failure",
- _1: [
- "playground.res",
- 14,
- 4
- ],
- Error: new Error()
- };
-}
-var item1 = myArray[0];
-var item2 = myArray[1];
-
-var myList = {
- hd: 1,
- tl: {
- hd: 2,
- tl: {
- hd: 3,
- tl: /* [] */0
- }
- }
-};
-// ...
-```
-
-
-
-You can also use destructuring anywhere you'd usually put a binding:
-
-
-
-```res example
-type result =
- | Success(string)
-let displayMessage = (Success(m)) => {
- // we've directly extracted the success message
- // string by destructuring the parameter
- Console.log(m)
-}
-displayMessage(Success("You did it!"))
-```
-```js
-function displayMessage(m) {
- console.log(m._0);
-}
-
-displayMessage(/* Success */{
- _0: "You did it!"
-});
-```
-
-
-
-For a record, you can rename the field while destructuring:
-
-
-
-```res
-let {name: n} = student1 // "John" assigned to `n`
-```
-```js
-var n = "John";
-```
-
-
-
-You _can_ in theory destructure array and list at the top level too:
-
-```res
-let myArray = [1, 2, 3]
-let [item1, item2, _] = myArray
-// 1 assigned to `item1`, 2 assigned to `item2`, 3rd item ignored
-
-let myList = list{1, 2, 3}
-let list{head, ...tail} = myList
-// 1 assigned to `head`, `list{2, 3}` assigned to tail
-```
-
-But the array example is **highly disrecommended** (use tuple instead) and the list example will error on you. They're only there for completeness' sake. As you'll see below, the proper way of using destructuring array and list is using `switch`.
-
-## `switch` Based on Shape of Data
-
-While the destructuring aspect of pattern matching is nice, it doesn't really change the way you think about structuring your code. One paradigm-changing way of thinking about your code is to execute some code based on the shape of the data.
-
-Consider a variant:
-
-
-
-```res prelude
-type payload =
- | BadResult(int)
- | GoodResult(string)
- | NoResult
-```
-```js
-// Empty output
-```
-
-
-
-We'd like to handle each of the 3 cases differently. For example, print a success message if the value is `GoodResult(...)`, do something else when the value is `NoResult`, etc.
-
-In other languages, you'd end up with a series of if-elses that are hard to read and error-prone. In ReScript, you can instead use the supercharged `switch` pattern matching facility to destructure the value while calling the right code based on what you destructured:
-
-
-
-```res example
-let data = GoodResult("Product shipped!")
-switch data {
-| GoodResult(theMessage) =>
- Console.log("Success! " ++ theMessage)
-| BadResult(errorCode) =>
- Console.log("Something's wrong. The error code is: " ++ Int.toString(errorCode))
-| NoResult =>
- Console.log("Bah.")
-}
-```
-```js
-var data = {
- TAG: "GoodResult",
- _0: "Product shipped!"
-};
-
-if (typeof data !== "object") {
- console.log("Bah.");
-} else if (data.TAG === "BadResult") {
- console.log("Something's wrong. The error code is: " + "Product shipped!".toString());
-} else {
- console.log("Success! Product shipped!");
-}
-```
-
-
-
-In this case, `message` will have the value `"Success! Product shipped!"`.
-
-Suddenly, your if-elses that messily checks some structure of the value got turned into a clean, compiler-verified, linear list of code to execute based on exactly the shape of the value.
-
-### Complex Examples
-
-Here's a real-world scenario that'd be a headache to code in other languages. Given this data structure:
-
-
-
-```res prelude
-type status = Vacations(int) | Sabbatical(int) | Sick | Present
-type reportCard = {passing: bool, gpa: float}
-type student = {name: string, status: status, reportCard: reportCard}
-type person =
- | Teacher({name: string, age: int})
- | Student(student)
-```
-```js
-// Empty output
-```
-
-
-
-Imagine this requirement:
-
-- Informally greet a person who's a teacher and if his name is Mary or Joe.
-- Greet other teachers formally.
-- If the person's a student, congratulate him/her score if they passed the semester.
-- If the student has a gpa of 0 and is on vacations or sabbatical, display a different message.
-- A catch-all message for a student.
-
-ReScript can do this easily!
-
-
-
-```res prelude
-let person1 = Teacher({name: "Jane", age: 35})
-
-let message = switch person1 {
-| Teacher({name: "Mary" | "Joe"}) =>
- `Hey, still going to the party on Saturday?`
-| Teacher({name}) =>
- // this is matched only if `name` isn't "Mary" or "Joe"
- `Hello ${name}.`
-| Student({name, reportCard: {passing: true, gpa}}) =>
- `Congrats ${name}, nice GPA of ${Float.toString(gpa)} you got there!`
-| Student({
- reportCard: {gpa: 0.0},
- status: Vacations(daysLeft) | Sabbatical(daysLeft)
- }) =>
- `Come back in ${Int.toString(daysLeft)} days!`
-| Student({status: Sick}) =>
- `How are you feeling?`
-| Student({name}) =>
- `Good luck next semester ${name}!`
-}
-```
-```js
-var person1 = {
- TAG: "Teacher",
- name: "Jane",
- age: 35
-};
-
-var message;
-
-if (person1.TAG === "Teacher") {
- message = "Hello Jane.";
-} else {
- var match = "Jane";
- var match$1 = match.status;
- var name = match.name;
- var match$2 = match.reportCard;
- if (match$2.passing) {
- message = "Congrats " + name + ", nice GPA of " + match$2.gpa.toString() + " you got there!";
- } else {
- var exit = 0;
- if (typeof match$1 !== "object") {
- message = match$1 === "Sick" ? "How are you feeling?" : "Good luck next semester " + name + "!";
- } else {
- exit = 1;
- }
- if (exit === 1) {
- message = match.reportCard.gpa !== 0.0 ? "Good luck next semester " + name + "!" : "Come back in " + match$1._0.toString() + " days!";
- }
-
- }
-}
-```
-
-
-
-**Note** how we've:
-- drilled deep down into the value concisely
-- using a **nested pattern check** `"Mary" | "Joe"` and `Vacations | Sabbatical`
-- while extracting the `daysLeft` number from the latter case
-- and assigned the greeting to the binding `message`.
-
-Here's another example of pattern matching, this time on an inline tuple.
-
-
-
-```res
-type animal = Dog | Cat | Bird
-let categoryId = switch (isBig, myAnimal) {
-| (true, Dog) => 1
-| (true, Cat) => 2
-| (true, Bird) => 3
-| (false, Dog | Cat) => 4
-| (false, Bird) => 5
-}
-```
-```js
-var categoryId = isBig ? (myAnimal + 1) | 0 : myAnimal >= 2 ? 5 : 4;
-```
-
-
-
-**Note** how pattern matching on a tuple is equivalent to a 2D table:
-
-isBig \ myAnimal | Dog | Cat | Bird
------------------|-----|-----|------
-true | 1 | 2 | 3
-false | 4 | 4 | 5
-
-### Fall-Through Patterns
-
-The nested pattern check, demonstrated in the earlier `person` example, also works at the top level of a `switch`:
-
-
-
-```res prelude
-let myStatus = Vacations(10)
-
-switch myStatus {
-| Vacations(days)
-| Sabbatical(days) => Console.log(`Come back in ${Int.toString(days)} days!`)
-| Sick
-| Present => Console.log("Hey! How are you?")
-}
-```
-```js
-var myStatus = {
- TAG: /* Vacations */0,
- _0: 10
-};
-
-if (typeof myStatus === "number") {
- console.log("Hey! How are you?");
-} else {
- console.log("Come back in " + (10).toString() + " days!");
-}
-```
-
-
-
-Having multiple cases fall into the same handling can clean up certain types of logic.
-
-### Ignore Part of a Value
-
-If you have a value like `Teacher(payload)` where you just want to pattern match on the `Teacher` part and ignore the `payload` completely, you can use the `_` wildcard like this:
-
-
-
-```res example
-switch person1 {
-| Teacher(_) => Console.log("Hi teacher")
-| Student(_) => Console.log("Hey student")
-}
-```
-```js
-if (person1.TAG === "Teacher") {
- console.log("Hi teacher");
-} else {
- console.log("Hey student");
-}
-```
-
-
-
-`_` also works at the top level of the `switch`, serving as a catch-all condition:
-
-
-
-```res example
-switch myStatus {
-| Vacations(_) => Console.log("Have fun!")
-| _ => Console.log("Ok.")
-}
-```
-```js
-if (typeof myStatus !== "object" || myStatus.TAG !== "Vacations") {
- console.log("Ok.");
-} else {
- console.log("Have fun!");
-}
-```
-
-
-
-**Do not** abuse a top-level catch-all condition. Instead, prefer writing out all the cases:
-
-
-
-```res example
-switch myStatus {
-| Vacations(_) => Console.log("Have fun!")
-| Sabbatical(_) | Sick | Present => Console.log("Ok.")
-}
-```
-```js
-if (typeof myStatus !== "object" || myStatus.TAG !== "Vacations") {
- console.log("Ok.");
-} else {
- console.log("Have fun!");
-}
-```
-
-
-
-Slightly more verbose, but a one-time writing effort. This helps when you add a new variant case e.g. `Quarantined` to the `status` type and need to update the places that pattern match on it. A top-level wildcard here would have accidentally and silently continued working, potentially causing bugs.
-
-### If Clause
-
-Sometime, you want to check more than the shape of a value. You want to also run some arbitrary check on it. You might be tempted to write this:
-
-
-
-```res example
-switch person1 {
-| Teacher(_) => () // do nothing
-| Student({reportCard: {gpa}}) =>
- if gpa < 0.5 {
- Console.log("What's happening")
- } else {
- Console.log("Heyo")
- }
-}
-```
-```js
-if (person1.TAG !== "Teacher") {
- if ("Jane".reportCard.gpa < 0.5) {
- console.log("What's happening");
- } else {
- console.log("Heyo");
- }
-}
-```
-
-
-
-`switch` patterns support a shortcut for the arbitrary `if` check, to keep your pattern linear-looking:
-
-
-
-```res example
-switch person1 {
-| Teacher(_) => () // do nothing
-| Student({reportCard: {gpa}}) if gpa < 0.5 =>
- Console.log("What's happening")
-| Student(_) =>
- // fall-through, catch-all case
- Console.log("Heyo")
-}
-```
-```js
-if (person1.TAG) {
- if (person1.reportCard.gpa < 0.5) {
- console.log("What's happening");
- } else {
- console.log("Heyo");
- }
-}
-```
-
-
-
-**Note:** Rescript versions < 9.0 had a `when` clause, not an `if` clause. Rescript 9.0 changed `when` to `if`. (`when` may still work, but is deprecated.)
-
-### Match on subtype variants
-You can refine a variant A to variant B using the [variant type spread syntax](variant.md#variant-type-spreads) in pattern matching. This is possible if variant B [is a subtype of](variant.md#coercion) variant A.
-
-Let's look at an example:
-
-
-
-```res
-type pets = Cat | Dog
-type fish = Cod | Salmon
-type animals = | ...pets | ...fish
-
-let greetPet = (pet: pets) => {
- switch pet {
- | Cat => Console.log("Hello kitty!")
- | Dog => Console.log("Woof woof doggie!")
- }
-}
-
-let greetFish = (fish: fish) => {
- switch fish {
- | Cod => Console.log("Blub blub..")
- | Salmon => Console.log("Blub blub blub blub..")
- }
-}
-
-let greetAnimal = (animal: animals) => {
- switch animal {
- | ...pets as pet => greetPet(pet)
- | ...fish as fish => greetFish(fish)
- }
-}
-```
-```js
-function greetPet(pet) {
- if (pet === "Cat") {
- console.log("Hello kitty!");
- return;
- }
- console.log("Woof woof doggie!");
-}
-
-function greetFish(fish) {
- if (fish === "Cod") {
- console.log("Blub blub..");
- return;
- }
- console.log("Blub blub blub blub..");
-}
-
-function greetAnimal(animal) {
- switch (animal) {
- case "Cat" :
- case "Dog" :
- return greetPet(animal);
- case "Cod" :
- case "Salmon" :
- return greetFish(animal);
- }
-}
-```
-
-
-Let's break down what we did:
-* Defined two different variants for pets and for fish
-* Wrote a dedicated function per animal type to greet that particular type of animal
-* Combined `pets` and `fish` into a main variant for `animals`
-* Wrote a function that can greet any animal by _spreading_ each sub variant on its own branch, aliasing that spread to a variable, and passing that variable to the dedicated greet function for that specific type
-
-Notice how we're able to match on parts of the main variant, as long as the variants are compatible.
-
-The example above aliases the variant type spread to a variable so we can use it in our branch. But, you can just as easily match without aliasing if you don't care about the value:
-
-
-```res
-let isPet = (animal: animals) => {
- switch animal {
- | ...pets => Console.log("A pet!")
- | _ => Console.log("Not a pet...")
- }
-}
-
-```
-```js
-function isPet(animal) {
- switch (animal) {
- case "Cat" :
- case "Dog" :
- console.log("A pet!");
- return;
- case "Cod" :
- case "Salmon" :
- console.log("Not a pet...");
- return;
- }
-}
-```
-
-
-Similarily, if you want to get advanced, you can even pull out a single variant constructor. This works with and without aliases. Example:
-
-
-
-```res
-type dog = Dog
-type pets = Cat | ...dog
-type fish = Cod | Salmon
-type animals = | ...pets | ...fish
-
-let isPet = (animal: animals) => {
- switch animal {
- | ...dog => Console.log("A dog!")
- | _ => Console.log("Not a dog...")
- }
-}
-
-```
-```js
-function isPet(animal) {
- if (animal === "Dog") {
- console.log("A dog!");
- return;
- }
- console.log("Not a dog...");
-}
-```
-
-
-And, thanks to the rules of subtyping, the `Dog` constructor wouldn't _really_ need to be spread inside of the `pets` variant for this to work:
-
-
-
-```res
-type pets = Cat | Dog
-type fish = Cod | Salmon
-type animals = | ...pets | ...fish
-
-// Notice `dog` isn't spread into the `pets` variant,
-// but this still work due to subtyping.
-type dog = Dog
-
-let isPet = (animal: animals) => {
- switch animal {
- | ...dog => Console.log("A dog!")
- | _ => Console.log("Not a dog...")
- }
-}
-
-```
-```js
-function isPet(animal) {
- if (animal === "Dog") {
- console.log("A dog!");
- return;
- }
- console.log("Not a dog...");
-}
-```
-
-
-### Match on Exceptions
-
-If the function throws an exception (covered later), you can also match on _that_, in addition to the function's normally returned values.
-
-
-
-```res
-switch List.find(i => i === theItem, myItems) {
-| item => Console.log(item)
-| exception Not_found => Console.log("No such item found!")
-}
-```
-```js
-var exit = 0;
-
-var item;
-
-try {
- item = List.find(function(i) {
- return i === theItem;
- }, myItems);
- exit = 1;
-}
-catch (raw_exn){
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
- if (exn.RE_EXN_ID === "Not_found") {
- console.log("No such item found!");
- } else {
- throw exn;
- }
-}
-
-if (exit === 1) {
- console.log(item);
-}
-```
-
-
-
-### Match on Array
-
-
-
-```res example
-let students = ["Jane", "Harvey", "Patrick"]
-switch students {
-| [] => Console.log("There are no students")
-| [student1] =>
- Console.log("There's a single student here: " ++ student1)
-| manyStudents =>
- // display the array of names
- Console.log2("The students are: ", manyStudents)
-}
-```
-```js
-var students = ["Jane", "Harvey", "Patrick"];
-
-var len = students.length;
-
-if (len !== 1) {
- if (len !== 0) {
- console.log("The students are: ", students);
- } else {
- console.log("There are no students");
- }
-} else {
- var student1 = students[0];
- console.log("There's a single student here: " + student1);
-}
-```
-
-
-
-### Match on List
-
-Pattern matching on list is similar to array, but with the extra feature of extracting the tail of a list (all elements except the first one):
-
-
-
-```res example
-let rec printStudents = (students) => {
- switch students {
- | list{} => () // done
- | list{student} => Console.log("Last student: " ++ student)
- | list{student1, ...otherStudents} =>
- Console.log(student1)
- printStudents(otherStudents)
- }
-}
-printStudents(list{"Jane", "Harvey", "Patrick"})
-```
-```js
-function printStudents(_students) {
- while(true) {
- var students = _students;
- if (!students) {
- return;
- }
- var otherStudents = students.tl;
- var student = students.hd;
- if (otherStudents) {
- console.log(student);
- _students = otherStudents;
- continue;
- }
- console.log("Last student: " + student);
- return;
- };
-}
-
-printStudents({
- hd: "Jane",
- tl: {
- hd: "Harvey",
- tl: {
- hd: "Patrick",
- tl: /* [] */0
- }
- }
-});
-```
-
-
-
-### Match on Dictionaries
-
-You can pattern match on dictionaries just like you can on other ReScript data structures.
-
-When pattern matching on a dictionary it's assumed by default that you're expecting the keys you match on to exist in the dictionary. Example:
-
-
-```res prelude
-let d = dict{"A": 5, "B": 6}
-
-// We're expecting the `B` key to exist below, and `b` will be `int` in the match branch
-let b = switch d {
-| dict{"B": b} => Some(b)
-| _ => None
-}
-```
-
-```js
-let d = {
- A: 5,
- B: 6
-};
-
-let b = d.B;
-
-let b$1 = b !== undefined ? b : undefined;
-```
-
-
-
-However, there are situations where you want to pull out the value of a key as an option. You can do that using the `?` optional syntax in the pattern match:
-
-
-
-```res prelude
-let d = dict{"A": 5, "B": 6}
-
-// We're pulling out `B` regardless of if it has a value or not, and therefore get `b` as `option`
-let b = switch d {
-| dict{"B": ?b} => b
-}
-```
-
-```js
-let d = {
- A: 5,
- B: 6
-};
-
-let b = d.B;
-```
-
-
-
-Notice how in the first case, when not using `?`, we had to supply a catch-all case `_`. That's because the pattern match _expects_ `B` to exist in the first case, for the pattern to match. If `B` doesn't exist, the match falls through to the next branch, and therefore we need to catch it to be exhaustive in our matching.
-
-However, in the second case, we don't need a catch-all case. That's because the first branch will _always_ match the dictionary - either `B` exists or it doesn't, but it doesn't matter because we're pulling it out as an optional value.
-
-### Small Pitfall
-
-**Note**: you can only pass literals (i.e. concrete values) as a pattern, not let-binding names or other things. The following doesn't work as expected:
-
-
-
-```res example
-let coordinates = (10, 20, 30)
-let centerY = 20
-switch coordinates {
-| (x, _centerY, _) => Console.log(x)
-}
-```
-```js
-var coordinates = [10, 20, 30];
-var centerY = 20;
-
-console.log(10);
-```
-
-
-
-A first time ReScript user might accidentally write that code, assuming that it's matching on `coordinates` when the second value is of the same value as `centerY`. In reality, this is interpreted as matching on coordinates and assigning the second value of the tuple to the name `centerY`, which isn't what's intended.
-
-## Exhaustiveness Check
-
-As if the above features aren't enough, ReScript also provides arguably the most important pattern matching feature: **compile-time check of missing patterns**.
-
-Let's revisit one of the above examples:
-
-
-
-```res
-let message = switch person1 {
-| Teacher({name: "Mary" | "Joe"}) =>
- `Hey, still going to the party on Saturday?`
-| Student({name, reportCard: {passing: true, gpa}}) =>
- `Congrats ${name}, nice GPA of ${Float.toString(gpa)} you got there!`
-| Student({
- reportCard: {gpa: 0.0},
- status: Vacations(daysLeft) | Sabbatical(daysLeft)
- }) =>
- `Come back in ${Int.toString(daysLeft)} days!`
-| Student({status: Sick}) =>
- `How are you feeling?`
-| Student({name}) =>
- `Good luck next semester ${name}!`
-}
-```
-```js
-if (person1.TAG) {
- var match$1 = person1.status;
- var name = person1.name;
- var match$2 = person1.reportCard;
- if (match$2.passing) {
- "Congrats " + name + ", nice GPA of " + match$2.gpa.toString() + " you got there!";
- } else if (typeof match$1 === "number") {
- if (match$1 !== 0) {
- "Good luck next semester " + name + "!";
- } else {
- "How are you feeling?";
- }
- } else if (person1.reportCard.gpa !== 0.0) {
- "Good luck next semester " + name + "!";
- } else {
- "Come back in " + match$1._0.toString() + " days!";
- }
-} else {
- switch (person1.name) {
- case "Joe":
- case "Mary":
- break;
- default:
- throw {
- RE_EXN_ID: "Match_failure",
- _1: [
- "playground.res",
- 13,
- 0
- ],
- Error: new Error()
- };
- }
-}
-```
-
-
-
-Did you see what we removed? This time, we've omitted the handling of the case where `person1` is `Teacher({name})` when `name` isn't Mary or Joe.
-
-Failing to handle every scenario of a value likely constitutes the majority of program bugs out there. This happens very often when you refactor a piece of code someone else wrote. Fortunately for ReScript, the compiler will tell you so:
-
-```
-Warning 8: this pattern-matching is not exhaustive.
-Here is an example of a value that is not matched:
-Some({name: ""})
-```
-
-**BAM**! You've just erased an entire category of important bugs before you even ran the code. In fact, this is how most of nullable values is handled:
-
-
-
-```res example
-let myNullableValue = Some(5)
-
-switch myNullableValue {
-| Some(_v) => Console.log("value is present")
-| None => Console.log("value is absent")
-}
-```
-```js
-var myNullableValue = 5;
-
-if (myNullableValue !== undefined) {
- console.log("value is present");
-} else {
- console.log("value is absent");
-}
-```
-
-
-
-If you don't handle the `None` case, the compiler warns. No more `undefined` bugs in your code!
-
-## Conclusion & Tips & Tricks
-
-Hopefully you can see how pattern matching is a game changer for writing correct code, through the concise destructuring syntax, the proper conditions handling of `switch`, and the static exhaustiveness check.
-
-Below is some advice:
-
-Avoid using the wildcard `_` unnecessarily. Using the wildcard `_` will bypass the compiler's exhaustiveness check. Consequently, the compiler will not be able to notify you of probable errors when you add a new case to a variant. Try only using `_` against infinite possibilities, e.g. string, int, etc.
-
-Use the `if` clause sparingly.
-
-**Flatten your pattern-match whenever you can**. This is a real bug remover. Here's a series of examples, from worst to best:
-
-
-
-```res example
-let optionBoolToBool = opt => {
- if opt == None {
- false
- } else if opt === Some(true) {
- true
- } else {
- false
- }
-}
-```
-```js
-function optionBoolToBool(opt) {
- if (opt === undefined) {
- return false;
- } else {
- return opt === true;
- }
-}
-```
-
-
-
-Now that's just silly =). Let's turn it into pattern-matching:
-
-
-
-```res example
-let optionBoolToBool = opt => {
- switch opt {
- | None => false
- | Some(a) => a ? true : false
- }
-}
-```
-```js
-function optionBoolToBool(opt) {
- if (opt !== undefined && opt) {
- return true;
- } else {
- return false;
- }
-}
-```
-
-
-
-Slightly better, but still nested. Pattern-matching allows you to do this:
-
-
-
-```res example
-let optionBoolToBool = opt => {
- switch opt {
- | None => false
- | Some(true) => true
- | Some(false) => false
- }
-}
-```
-```js
-function optionBoolToBool(opt) {
- if (opt !== undefined && opt) {
- return true;
- } else {
- return false;
- }
-}
-```
-
-
-
-Much more linear-looking! Now, you might be tempted to do this:
-
-
-
-```res example
-let optionBoolToBool = opt => {
- switch opt {
- | Some(true) => true
- | _ => false
- }
-}
-```
-```js
-function optionBoolToBool(opt) {
- if (opt !== undefined && opt) {
- return true;
- } else {
- return false;
- }
-}
-```
-
-
-
-Which is much more concise, but kills the exhaustiveness check mentioned above; refrain from using that. This is the best:
-
-
-
-```res example
-let optionBoolToBool = opt => {
- switch opt {
- | Some(trueOrFalse) => trueOrFalse
- | None => false
- }
-}
-```
-```js
-function optionBoolToBool(opt) {
- if (opt !== undefined) {
- return opt;
- } else {
- return false;
- }
-}
-```
-
-
-
-Pretty darn hard to make a mistake in this code at this point! Whenever you'd like to use an if-else with many branches, prefer pattern matching instead. It's more concise and [performant](variant#design-decisions) too.
diff --git a/pages/docs/manual/v12.0.0/pipe.mdx b/pages/docs/manual/v12.0.0/pipe.mdx
deleted file mode 100644
index c78d33e5b..000000000
--- a/pages/docs/manual/v12.0.0/pipe.mdx
+++ /dev/null
@@ -1,244 +0,0 @@
----
-title: "Pipe"
-description: "The Pipe operator (->)"
-canonical: "/docs/manual/v12.0.0/pipe"
----
-
-# Pipe
-
-ReScript provides a tiny but surprisingly useful operator `->`, called the "pipe", that allows you to "flip" your code inside-out. `a(b)` becomes `b->a`. It's a simple piece of syntax that doesn't have any runtime cost.
-
-Why would you use it? Imagine you have the following:
-
-
-
-```res
-validateAge(getAge(parseData(person)))
-```
-```js
-validateAge(getAge(parseData(person)));
-```
-
-
-
-This is slightly hard to read, since you need to read the code from the innermost part, to the outer parts. Use pipe to streamline it:
-
-
-
-```res
-person
- ->parseData
- ->getAge
- ->validateAge
-```
-```js
-validateAge(getAge(parseData(person)));
-```
-
-
-
-Basically, `parseData(person)` is transformed into `person->parseData`, and `getAge(person->parseData)` is transformed into `person->parseData->getAge`, etc.
-
-**This works when the function takes more than one argument too**.
-
-
-
-```res
-a(one, two, three)
-```
-```js
-a(one, two, three);
-```
-
-
-
-is the same as
-
-
-
-```res
-one->a(two, three)
-```
-```js
-a(one, two, three);
-```
-
-
-
-This also works with labeled arguments.
-
-Pipes are used to emulate object-oriented programming. For example, `myStudent.getName` in other languages like Java would be `myStudent->getName` in ReScript (equivalent to `getName(myStudent)`). This allows us to have the readability of OOP without the downside of dragging in a huge class system just to call a function on a piece of data.
-
-## Tips & Tricks
-
-Do **not** abuse pipes; they're a means to an end. Inexperienced engineers sometimes shape a library's API to take advantage of the pipe. This is backwards.
-
-## JS Method Chaining
-
-_This section requires understanding of [our binding API](bind-to-js-function.md#object-method)_.
-
-JavaScript's APIs are often attached to objects, and are often chainable, like so:
-
-```js
-const result = [1, 2, 3].map(a => a + 1).filter(a => a % 2 === 0);
-
-asyncRequest()
- .setWaitDuration(4000)
- .send();
-```
-
-Assuming we don't need the chaining behavior above, we'd bind to each case of this using [`@send`](/syntax-lookup#send-decorator) from the aforementioned binding API page:
-
-
-
-```res prelude
-type request
-@val external asyncRequest: unit => request = "asyncRequest"
-@send external setWaitDuration: (request, int) => request = "setWaitDuration"
-@send external send: request => unit = "send"
-```
-```js
-// Empty output
-```
-
-
-
-You'd use them like this:
-
-
-
-```res example
-let result = Array.filter(
- Array.map([1, 2, 3], a => a + 1),
- a => mod(a, 2) == 0
-)
-
-send(setWaitDuration(asyncRequest(), 4000))
-```
-```js
-var result = [1, 2, 3].map(function(a) {
- return a + 1 | 0;
-}).filter(function(a) {
- return a % 2 === 0;
-});
-
-asyncRequest().setWaitDuration(4000).send();
-```
-
-
-
-This looks much worse than the JS counterpart! Clean it up visually with pipe:
-
-
-
-```res example
-let result = [1, 2, 3]
- ->Array.map(a => a + 1)
- ->Array.filter(a => mod(a, 2) == 0)
-
-asyncRequest()->setWaitDuration(4000)->send
-```
-```js
-var result = [1, 2, 3].map(function(a) {
- return a + 1 | 0;
-}).filter(function(a) {
- return a % 2 === 0;
-});
-
-asyncRequest().setWaitDuration(4000).send();
-```
-
-
-
-## Pipe Into Variants
-
-You can pipe into a variant's constructor as if it was a function:
-
-
-
-```res
-let result = name->preprocess->Some
-```
-```js
-var result = preprocess(name);
-```
-
-
-
-We turn this into:
-
-
-
-```res
-let result = Some(preprocess(name))
-```
-```js
-var result = preprocess(name);
-```
-
-
-
-**Note** that using a variant constructor as a function wouldn't work anywhere else beside here.
-
-## Pipe Placeholders
-
-A placeholder is written as an underscore and it tells ReScript that you want to fill in an argument of a function later. These two have equivalent meaning:
-
-```res
-let addTo7 = (x) => add3(3, x, 4)
-let addTo7 = add3(3, _, 4)
-```
-
-Sometimes you don't want to pipe the value you have into the first position. In these cases you can mark a placeholder value to show which argument you would like to pipe into.
-
-Let's say you have a function `namePerson`, which takes a `person` then a `name` argument. If you are transforming a person then pipe will work as-is:
-
-
-
-```res
-makePerson(~age=47)
- ->namePerson("Jane")
-```
-```js
-namePerson(makePerson(47), "Jane");
-```
-
-
-
-If you have a name that you want to apply to a person object, you can use a placeholder:
-
-
-
-```res
-getName(input)
- ->namePerson(personDetails, _)
-```
-```js
-var __x = getName(input);
-namePerson(personDetails, __x);
-```
-
-
-
-This allows you to pipe into any positional argument. It also works for named arguments:
-
-
-
-```res
-getName(input)
- ->namePerson(~person=personDetails, ~name=_)
-```
-```js
-var __x = getName(input);
-namePerson(personDetails, __x);
-```
-
-
-
-## Triangle Pipe (Deprecated)
-
-You might see usages of another pipe, `|>`, in some codebases. These are deprecated.
-
-Unlike `->` pipe, the `|>` pipe puts the subject as the last (not first) argument of the function. `a |> f(b)` turns into `f(b, a)`.
-
-For a more thorough discussion on the rationale and differences between the two operators, please refer to the [Data-first and Data-last comparison by Javier Chávarri](https://www.javierchavarri.com/data-first-and-data-last-a-comparison/)
diff --git a/pages/docs/manual/v12.0.0/polymorphic-variant.mdx b/pages/docs/manual/v12.0.0/polymorphic-variant.mdx
deleted file mode 100644
index f2f2167b5..000000000
--- a/pages/docs/manual/v12.0.0/polymorphic-variant.mdx
+++ /dev/null
@@ -1,433 +0,0 @@
----
-title: "Polymorphic Variant"
-description: "The Polymorphic Variant data structure in ReScript"
-canonical: "/docs/manual/v12.0.0/polymorphic-variant"
----
-
-# Polymorphic Variant
-
-Polymorphic variants (or poly variant) are a cousin of [variant](variant). With these differences:
-
-- They start with a `#` and the constructor name doesn't need to be capitalized.
-- They don't require an explicit type definition. The type is inferred from usage.
-- Values of different poly variant types can share the constructors they have in common (aka, poly variants are "structurally" typed, as opposed to ["nominally" typed](variant#variant-types-are-found-by-field-name)).
-
-They're a convenient and useful alternative to regular variants, but should **not** be abused. See the drawbacks at the end of this page.
-
-## Creation
-
-We provide 3 syntaxes for a poly variant's constructor:
-
-
-
-```res
-let myColor = #red
-let myLabel = #"aria-hidden"
-let myNumber = #7
-```
-
-```js
-var myColor = "red";
-var myLabel = "aria-hidden";
-var myNumber = 7;
-```
-
-
-
-**Take a look at the output**. Poly variants are _great_ for JavaScript interop. For example, you can use it to model JavaScript string and number enums like TypeScript, but without confusing their accidental usage with regular strings and numbers.
-
-`myColor` uses the common syntax. The second and third syntaxes are to support expressing strings and numbers more conveniently. We allow the second one because otherwise it'd be invalid syntax since symbols like `-` and others are usually reserved.
-
-## Type Declaration
-
-Although **optional**, you can still pre-declare a poly variant type:
-
-```res
-// Note the surrounding square brackets, and # for constructors
-type color = [#red | #green | #blue]
-```
-
-These types can also be inlined, unlike for regular variant:
-
-
-
-```res
-let render = (myColor: [#red | #green | #blue]) => {
- switch myColor {
- | #blue => Console.log("Hello blue!")
- | #red
- | #green => Console.log("Hello other colors")
- }
-}
-```
-
-```js
-function render(myColor) {
- if (myColor === "green" || myColor === "red") {
- console.log("Hello other colors");
- } else {
- console.log("Hello blue!");
- }
-}
-```
-
-
-
-**Note**: because a poly variant value's type definition is **inferred** and not searched in the scope, the following snippet won't error:
-
-
-
-```res
-type color = [#red | #green | #blue]
-
-let render = myColor => {
- switch myColor {
- | #blue => Console.log("Hello blue!")
- | #green => Console.log("Hello green!")
- // works!
- | #yellow => Console.log("Hello yellow!")
- }
-}
-```
-
-```js
-function render(myColor) {
- if (myColor === "yellow") {
- console.log("Hello yellow!");
- } else if (myColor === "green") {
- console.log("Hello green!");
- } else {
- console.log("Hello blue!");
- }
-}
-```
-
-
-
-That `myColor` parameter's type is inferred to be `#red`, `#green` or `#yellow`, and is unrelated to the `color` type. If you intended `myColor` to be of type `color`, annotate it as `myColor: color` in any of the places.
-
-## Constructor Arguments
-
-This is similar to a regular variant's [constructor arguments](variant#constructor-arguments):
-
-
-
-```res
-type account = [
- | #Anonymous
- | #Instagram(string)
- | #Facebook(string, int)
-]
-
-let me: account = #Instagram("Jenny")
-let him: account = #Facebook("Josh", 26)
-```
-
-```js
-var me = {
- NAME: "Instagram",
- VAL: "Jenny"
-};
-
-var him = {
- NAME: "Facebook",
- VAL: [
- "Josh",
- 26
- ]
-};
-```
-
-
-
-### Combine Types and Pattern Match
-
-You can use poly variant types within other poly variant types to create a sum of all constructors:
-
-
-
-```res
-type red = [#Ruby | #Redwood | #Rust]
-type blue = [#Sapphire | #Neon | #Navy]
-
-// Contains all constructors of red and blue.
-// Also adds #Papayawhip
-type color = [red | blue | #Papayawhip]
-
-let myColor: color = #Ruby
-```
-
-```js
-var myColor = "Ruby";
-```
-
-
-
-There's also some special [pattern matching](./pattern-matching-destructuring) syntax to match on constructors defined in a specific poly variant type:
-
-
-
-```res
-// Continuing the previous example above...
-
-switch myColor {
-| #...blue => Console.log("This blue-ish")
-| #...red => Console.log("This red-ish")
-| other => Console.log2("Other color than red and blue: ", other)
-}
-```
-
-```js
-var other = myColor;
-
-if (other === "Neon" || other === "Navy" || other === "Sapphire") {
- console.log("This is blue-ish");
-} else if (other === "Rust" || other === "Ruby" || other === "Redwood") {
- console.log("This is red-ish");
-} else {
- console.log("Other color than red and blue: ", other);
-}
-```
-
-
-
-This is a shorter version of:
-
-```res
-switch myColor {
-| #Sapphire | #Neon | #Navy => Console.log("This is blue-ish")
-| #Ruby | #Redwood | #Rust => Console.log("This is red-ish")
-| other => Console.log2("Other color than red and blue: ", other)
-}
-```
-
-## Structural Sharing
-
-Since poly variants value don't have a source of truth for their type, you can write such code:
-
-
-
-```res
-type preferredColors = [#white | #blue]
-
-let myColor: preferredColors = #blue
-
-let displayColor = v => {
- switch v {
- | #red => "Hello red"
- | #green => "Hello green"
- | #white => "Hey white!"
- | #blue => "Hey blue!"
- }
-}
-
-Console.log(displayColor(myColor))
-```
-
-```js
-var myColor = "blue";
-
-function displayColor(v) {
- if (v === "white") {
- return "Hey white!";
- } else if (v === "red") {
- return "Hello red";
- } else if (v === "green") {
- return "Hello green";
- } else {
- return "Hey blue!";
- }
-}
-
-console.log(displayColor("blue"));
-```
-
-
-
-With a regular variant, the line `displayColor(myColor)` would fail, since it'd complain that the type of `myColor` doesn't match the type of `v`. No problem with poly variant.
-
-## JavaScript Output
-
-Poly variants are great for JavaScript interop! You can share their values to JS code, or model incoming JS values as poly variants.
-
-- `#red` and `#"I am red 😃"` compile to JavaScipt `"red"` and `"I am red 😃"`.
-- `#1` compiles to JavaScript `1`.
-- Poly variant constructor with 1 argument, like `Instagram("Jenny")` compile to a straightforward `{NAME: "Instagram", VAL: "Jenny"}`. 2 or more arguments like `#Facebook("Josh", 26)` compile to a similar object, but with `VAL` being an array of the arguments.
-
-### Bind to Functions
-
-For example, let's assume we want to bind to `Intl.NumberFormat` and want to make sure that our users only pass valid locales, we could define an external binding like this:
-
-
-
-```res
-type t
-
-@scope("Intl") @val
-external makeNumberFormat: ([#"de-DE" | #"en-GB" | #"en-US"]) => t = "NumberFormat"
-
-let intl = makeNumberFormat(#"de-DE")
-```
-
-```js
-var intl = Intl.NumberFormat("de-DE");
-```
-
-
-
-The JS output is identical to handwritten JS, but we also get to enjoy type errors if we accidentally write `makeNumberFormat(#"de-DR")`.
-
-More advanced usage examples for poly variant interop can be found in [Bind to JS Function](bind-to-js-function#constrain-arguments-better).
-
-### Bind to String Enums
-
-Let's assume we have a TypeScript module that expresses following enum export:
-
-```js
-// direction.js
-enum Direction {
- Up = "UP",
- Down = "DOWN",
- Left = "LEFT",
- Right = "RIGHT",
-}
-
-export const myDirection = Direction.Up
-```
-
-For this particular example, we can also inline poly variant type definitions to design the type for the imported `myDirection` value:
-
-
-
-
-```res
-type direction = [ #UP | #DOWN | #LEFT | #RIGHT ]
-@module("./direction.js") external myDirection: direction = "myDirection"
-```
-
-```js
-var DirectionJs = require("./direction.js");
-
-var myDirection = DirectionJs.myDirection;
-```
-
-
-
-Again: since we were using poly variants, the JS Output is practically zero-cost and doesn't add any extra code!
-
-## Extra Constraints on Types
-
-The previous poly variant type annotations we've looked at are the regular "closed" kind. However, there's a way to express "I want at least these constructors" (lower bound) and "I want at most these constructors" (upper bound):
-
-```res
-// Only #Red allowed. Closed.
-let basic: [#Red] = #Red
-
-// May contain #Red, or any other value. Open
-// here, foreground will actually be inferred as [> #Red | #Green]
-let foreground: [> #Red] = #Green
-
-// The value must be, at most, one of #Red or #Blue
-// Only #Red and #Blue are valid values
-let background: [< #Red | #Blue] = #Red
-```
-
-**Note:** We added this info for educational purposes. In most cases you will not want to use any of this stuff, since it makes your APIs pretty unreadable / hard to use.
-
-### Closed `[`
-
-This is the simplest poly variant definition, and also the most practical one. Like a common variant type, this one defines an exact set of constructors.
-
-```res
-type rgb = [ #Red | #Green | #Blue ]
-
-let color: rgb = #Green
-```
-
-In the example above, `color` will only allow one of the three constructors that are defined in the `rgb` type. This is usually the way how poly variants should be defined.
-
-In case you want to define a type that is extensible, you'll need to use the lower / upper bound syntax.
-
-### Lower Bound `[>`
-
-A lower bound defines the minimum set of constructors a poly variant type is aware of. It is also considered an "open poly variant type", because it doesn't restrict any additional values.
-
-Here is an example on how to make a minimum set of `basicBlueTones` extensible for a new `color` type:
-
-```res
-type basicBlueTone<'a> = [> #Blue | #DeepBlue | #LightBlue ] as 'a
-type color = basicBlueTone<[#Blue | #DeepBlue | #LightBlue | #Purple]>
-
-let color: color = #Purple
-
-// This will fail due to missing minimum constructors:
-type notWorking = basicBlueTone<[#Purple]>
-```
-
-Here, the compiler will enforce the user to define `#Blue | #DeepBlue | #LightBlue` as the minimum set of constructors when trying to extend `basicBlueTone<'a>`.
-
-**Note:** Since we want to define an extensible poly variant, we need to provide a type placeholder `<'a>`, and also add `as 'a` after the poly variant declaration, which essentially means: "Given type `'a` is constraint to the minimum set of constructors (`#Blue | #DeepBlue | #LightBlue`) defined in `basicBlueTone`".
-
-### Upper Bound `[<`
-
-The upper bound works in the opposite way than a lower bound: the extending type may only use constructors that are stated in the upper bound constraint.
-
-Here another example, but with red colors:
-
-```res
-type validRed<'a> = [< #Fire | #Crimson | #Ash] as 'a
-type myReds = validRed<[#Ash]>
-
-// This will fail due to unlisted constructor not defined by the lower bound
-type notWorking = validRed<[#Purple]>
-```
-
-## Coercion
-
-You can convert a poly variant to a `string` or `int` at no cost:
-
-
-
-```res
-type company = [#Apple | #Facebook]
-let theCompany: company = #Apple
-
-let message = "Hello " ++ (theCompany :> string)
-```
-
-```js
-var theCompany = "Apple";
-var message = "Hello " + theCompany;
-```
-
-
-
-**Note**: for the coercion to work, the poly variant type needs to be closed; you'd need to annotate it, since otherwise, `theCompany` would be inferred as `[> #Apple]`.
-
-## Tips & Tricks
-
-### Variant vs Polymorphic Variant
-
-One might think that polymorphic variants are superior to regular [variants](./variant). As always, there are trade-offs:
-
-- Due to their "structural" nature, poly variant's type errors might be more confusing. If you accidentally write `#blur` instead of `#blue`, ReScript will still error but can't indicate the correct source as easily. Regular variants' source of truth is the type definition, so the error can't go wrong.
-- It's also harder to refactor poly variants. Consider this:
- ```res
- let myFruit = #Apple
- let mySecondFruit = #Apple
- let myCompany = #Apple
- ```
- Refactoring the first one to `#Orange` doesn't mean we should refactor the third one. Therefore, the editor plugin can't touch the second one either. Regular variant doesn't have such problem, as these 2 values presumably come from different variant type definitions.
-
-- You might lose some nice pattern match checks from the compiler:
- ```res
- let myColor = #red
-
- switch myColor {
- | #red => Console.log("Hello red!")
- | #blue => Console.log("Hello blue!")
- }
- ```
- Because there's no poly variant definition, it's hard to know whether the `#blue` case can be safely removed.
-
-In most scenarios, we'd recommend to use regular variants over polymorphic variants, especially when you are writing plain ReScript code. In case you want to write zero-cost interop bindings or generate clean JS output, poly variants are oftentimes a better option.
diff --git a/pages/docs/manual/v12.0.0/primitive-types.mdx b/pages/docs/manual/v12.0.0/primitive-types.mdx
deleted file mode 100644
index d48d7956e..000000000
--- a/pages/docs/manual/v12.0.0/primitive-types.mdx
+++ /dev/null
@@ -1,272 +0,0 @@
----
-title: "Primitive Types"
-description: "Primitive Data Types in ReScript"
-canonical: "/docs/manual/v12.0.0/primitive-types"
----
-
-# Primitive Types
-
-ReScript comes with the familiar primitive types like `string`, `int`, `float`, etc.
-
-
-
-## String
-
-ReScript `string`s are delimited using **double** quotes (single quotes are reserved for the character type below).
-
-
-
-```res example
-let greeting = "Hello world!"
-let multilineGreeting = "Hello
- world!"
-```
-```js
-var greeting = "Hello world!";
-var multilineGreeting = "Hello\n world!";
-```
-
-
-
-To concatenate strings, use `++`:
-
-
-
-```res example
-let greetings = "Hello " ++ "world!"
-```
-```js
-var greetings = "Hello world!";
-```
-
-
-
-### String Interpolation
-
-There's a special syntax for string that allows
-
-- multiline string just like before
-- no special character escaping
-- Interpolation
-
-
-
-```res example
-let name = "Joe"
-
-let greeting = `Hello
-World
-👋
-${name}
-`
-```
-```js
-var name = "Joe";
-
-var greeting = "Hello\nWorld\n👋\n" + name + "\n";
-```
-
-
-
-This is just like JavaScript's backtick string interpolation, except without needing to escape special characters.
-
-### Usage
-
-See the familiar `String` API in the [API docs](api/core/string). Since a ReScript string maps to a JavaScript string, you can mix & match the string operations in all standard libraries.
-
-### Tips & Tricks
-
-**You have a good type system now!** In an untyped language, you'd often overload the meaning of string by using it as:
-
-- a unique id: `var BLUE_COLOR = "blue"`
-- an identifier into a data structure: `var BLUE = "blue" var RED = "red" var colors = [BLUE, RED]`
-- the name of an object field: `person["age"] = 24`
-- an enum: `if (audio.canPlayType() === 'probably') {...}` [(ಠ_ಠ)](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canPlayType#Return_value)
-- other crazy patterns you'll soon find horrible, after getting used to ReScript's alternatives.
-
-The more you overload the poor string type, the less the type system (or a teammate) can help you! ReScript provides concise, fast and maintainable types & data structures alternatives to the use-cases above (e.g. variants, in a later section).
-
-## Char
-
-ReScript has a type for a string with a single letter:
-
-
-
-```res example
-let firstLetterOfAlphabet = 'a'
-```
-```js
-var firstLetterOfAlphabet = /* "a" */97;
-```
-
-
-
-**Note**: Char doesn't support Unicode or UTF-8 and is therefore not recommended.
-
-To convert a String to a Char, use `String.get("a", 0)`. To convert a Char to a String, use `String.make(1, 'a')`.
-
-## Regular Expression
-
-ReScript regular expressions compile cleanly to their JavaScript counterpart:
-
-
-
-```res example
-let r = /b/g
-```
-```js
-let r = /b/g;
-```
-
-
-
-A regular expression like the above has the type `RegExp.t`. The [RegExp](api/core/regexp) module contains the regular expression helpers you have seen in JS.
-
-## Boolean
-
-A ReScript boolean has the type `bool` and can be either `true` or `false`. Common operations:
-
-- `&&`: logical and.
-- `||`: logical or.
-- `!`: logical not.
-- `<=`, `>=`, `<`, `>`
-- `==`: structural equal, compares data structures deeply. `(1, 2) == (1, 2)` is `true`. Convenient, but use with caution.
-- `===`: referential equal, compares shallowly. `(1, 2) === (1, 2)` is `false`. `let myTuple = (1, 2); myTuple === myTuple` is `true`.
-- `!=`: structural unequal.
-- `!==`: referential unequal.
-
-ReScript's `true/false` compiles into a JavaScript `true/false`.
-
-## Integers
-
-32-bits, truncated when necessary. We provide the usual operations on them: `+`, `-`, `*`, `/`, etc. See [Int](api/core/int) for helper functions.
-
-**Be careful when you bind to JavaScript numbers!** Since ReScript integers have a much smaller range than JavaScript numbers, data might get lost when dealing with large numbers. In those cases it’s much safer to bind the numbers as **float**. Be extra mindful of this when binding to JavaScript Dates and their epoch time.
-
-To improve readability, you may place underscores in the middle of numeric literals such as `1_000_000`. Note that underscores can be placed anywhere within a number, not just every three digits.
-
-## Floats
-
-Float requires other operators: `+.`, `-.`, `*.`, `/.`, etc. Like `0.5 +. 0.6`. See [Float](api/core/float) for helper functions.
-
-As with integers, you may use underscores within literals to improve readability.
-
-### Int-to-Float Coercion
-
-`int` values can be coerced to `float` with the `:>` (type coercion) operator.
-
-
-
-```res example
-let result = (1 :> float) +. 2.
-```
-```js
-var result = 1 + 2;
-```
-
-
-
-## Big Integers (experimental)
-
-**Since 11.1**
-
-For values which are too large to be represented by Int or Float, there is the `bigint` primitive type.
-We provide the usual operations on them: `+`, `-`, `*`, `/`, etc. See [BigInt](api/core/bigint) for helper functions.
-
-A `bigint` number is denoted by a trailing `n` like so: `42n`.
-
-As `bigint` is a different data type than `int`, it's necessary to open the corresponding module to overload the operators.
-
-
-
-```res example
-open! BigInt
-
-let a = 9007199254740991n + 9007199254740991n
-let b = 2n ** 2n
-```
-```js
-var a = 9007199254740991n + 9007199254740991n;
-
-var p = 2n ** 2n;
-```
-
-
-
-It also supports all the bitwise operations, except unsigned shift right (`>>>`), which is not supported by JS itself for `bigint`s.
-
-
-
-```res example
-open! BigInt
-
-let a = land(1n, 1n)
-let b = lor(1n, 1n)
-let c = lxor(1n, 1n)
-let d = lnot(1n)
-let e = lsl(1n, 1n)
-let f = asr(1n, 1n)
-```
-```js
-var Js_bigint = require("./stdlib/js_bigint.js");
-
-var a = 1n & 1n;
-
-var b = 1n | 1n;
-
-var c = 1n ^ 1n;
-
-var d = Js_bigint.lnot(1n);
-
-var e = (1n << 1n);
-
-var f = (1n >> 1n);
-```
-
-
-
-It can also be pattern-matched.
-
-
-
-```res example
-let bigintValue = 1n
-
-switch bigintValue {
-| 1n => Console.log("Small bigint")
-| 100n => Console.log("Larger bigint")
-| _ => Console.log("Other bigint")
-}
-```
-```js
-if (1n !== 1n) {
- if (1n !== 100n) {
- console.log("Other bigint");
- } else {
- console.log("Larger bigint");
- }
-} else {
- console.log("Small bigint");
-}
-
-var bigintValue = 1n;
-```
-
-
-
-
-## Unit
-
-The `unit` type indicates the absence of a specific value. It has only a single value, `()`, which acts as a placeholder when no other value exists or is needed. It compiles to JavaScript's `undefined` and resembles the `void` type in languages such as C++. What's the point of such a type?
-
-Consider the `Math.random` function. Its type signature is `unit => float`, which means it receives a `unit` as input and calculates a random `float` as output. You use the function like this - `let x = Math.random()`. Notice `()` as the first and only function argument.
-
-Imagine a simplified `Console.log` function that prints a message. Its type signature is `string => unit` and you'd use it like this `Console.log("Hello!")`. It takes a string as input, prints it, and then returns nothing useful. When `unit` is the output of a function it means the function performs some kind of side-effect.
-
-## Unknown
-
-The `unknown` type represents values with contents that are a mystery or are not 100% guaranteed to be what you think they are. It provides type-safety when interacting with data received from an untrusted source. For example, suppose an external function is supposed to return a `string`. It might. But if the documentation is not accurate or the code has bugs, the function could return `null`, an `array`, or something else you weren't expecting.
-
-The ReScript type system helps you avoid run-time crashes and unpredicatable behavior by preventing you from using `unknown` in places that expect a `string` or `int` or some other type. The ReScript core libraries also provide utility functions to help you inspect `unknown` values and access their contents. In some cases you may need a JSON parsing library to convert `unknown` values to types you can safely use.
-
-Consider using `unknown` when receiving data from [external JavaScript functions](/docs/manual/next/bind-to-js-function)
diff --git a/pages/docs/manual/v12.0.0/project-structure.mdx b/pages/docs/manual/v12.0.0/project-structure.mdx
deleted file mode 100644
index 82235ef99..000000000
--- a/pages/docs/manual/v12.0.0/project-structure.mdx
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: "Project Structure"
-description: "Notes on project structure and other rough ReScript guidelines"
-canonical: "/docs/manual/v12.0.0/project-structure"
----
-
-# Project Structure
-
-These are the existing, non-codified community practices that are currently propagated through informal agreement. We might remove some of them at one point, and enforce some others. Right now, they're just recommendations for ease of newcomers.
-
-## File Casing
-
-Capitalized file names (aka first letter upper-cased).
-
-**Justification**: Module names can only be capitalized. Newcomers often ask how a file maps to a module, and why `draw.res` maps to the module `Draw`, and sometimes try to refer to a module through uncapitalized identifiers. Using `Draw.res` makes this mapping more straightforward. It also helps certain file names that'd be awkward in uncapitalized form: `uRI.res`.
-
-## Ignore `.merlin` File
-
-This is generated by the build system and you should not have to manually edit it. Don't check it into the repo.
-
-**Justification**: `.merlin` is for editor tooling. The file contains absolute paths, which are also not cross-platform (e.g. Windows paths are different).
-
-## Folders
-
-Try not to have too many nested folders. Keep your project flat, and have fewer files (reminder: you can use nested modules).
-
-**Justification**: The file system is a _tree_, but your code's dependencies are a _graph_. Because of that, any file & folder organization is usually imperfect. While it's still valuable to group related files together in a folder, the time wasted debating & getting decision paralysis over these far outweight their benefits. We'll always recommend you to Get Work Done instead of debating about these issues.
-
-## Third-party Dependencies
-
-Keep them to a minimum.
-
-**Justification**: A compiled, statically typed language cannot model its dependencies easily by muddling along like in a dynamic language, especially when we're still piggy-backing on NPM/Yarn (to reduce learning overhead in the medium-term). Keeping dependencies simple & lean helps reduce possibility of conflicts (e.g. two diamond dependencies, or clashing interfaces).
-
-## Documentation
-
-Have them. Spend more effort making them great (examples, pitfalls) and professional rather than _just_ fancy-looking. Do use examples, and avoid using names such as `foo` and `bar`. There's always more concrete names (it's an example, no need to be abstract/generalized just yet. The API docs will do this plentily). For blog posts, don't repeat the docs themselves, describe the _transition_ from old to new, and why (e.g. "it was a component, now it's a function, because ...").
-
-**Justification**: It's hard for newcomers to distinguish between a simple/decent library and one that's fancy-looking. For the sake of the community, don't try too hard to one-up each other's libraries. Do spread the words, but use your judgement too.
-
-## PPX & Other Meta-tools
-
-Keep them to a minimum. PPX, unless used in renown cases (printer, accessors and serializer/deserializer generation), can cause big learning churn for newcomers; on top of the syntax, semantics, types, build tool & FFI that they already have to learn, learning per-library custom transformations of the code is an extra step. More invasive macros makes the code itself less semantically meaningful too, since the essence would be hiding somewhere else.
-
-## Paradigm
-
-Don't abuse overly fancy features. Do leave some breathing room for future APIs but don't over-architect things.
-
-**Justification**: Simple code helps newcomers understand and potentially contribute to your code. Contributing is the best way for them to learn. The extra help you receive might also surpass the gain of using a slightly more clever language trick. But do try new language tricks in some of more casual projects! You might discover new ways of architecting code.
-
-## Publishing
-
-If it's a wrapper for a JS library, don't publish the JS artifacts. If it's a legit library, publish the artifacts in lib/js if you think JS consumers might use it. This is especially the case when you gradually convert a JS lib to ReScript while not breaking existing JS consumers.
-
-Do put the keywords `"rescript"` in your package.json `keywords` field. This allows us to find the library much more easily for future purposes.
-
-**Justification**: Be nice to JS consumers of your library. They're your future ReScripters.
diff --git a/pages/docs/manual/v12.0.0/promise.mdx b/pages/docs/manual/v12.0.0/promise.mdx
deleted file mode 100644
index 0c8bc2032..000000000
--- a/pages/docs/manual/v12.0.0/promise.mdx
+++ /dev/null
@@ -1,182 +0,0 @@
----
-title: "Promises"
-description: "JS Promise handling in ReScript"
-canonical: "/docs/manual/v12.0.0/promise"
----
-
-# Promise
-
-> **Note:** Starting from ReScript 10.1 and above, we recommend using [async / await](./async-await) when interacting with Promises.
-
-## `promise` type
-
-**Since 10.1**
-
-In ReScript, every JS promise is represented with the globally available `promise<'a>` type. For ReScript versions < 10.1, use its original alias `Js.Promise.t<'a>` instead.
-
-Here's a usage example in a function signature:
-
-```resi
-// User.resi file
-
-type user = {name: string}
-
-let fetchUser: string => promise
-```
-
-To work with promise values (instead of using `async` / `await`) you may want to use the built-in `Promise` module.
-
-## Promise
-
-A builtin module to create, chain and manipulate promises.
-
-### Creating a promise
-
-```res
-let p1 = Promise.make((resolve, reject) => {
- // We use uncurried functions for resolve / reject
- // for cleaner JS output without unintended curry calls
- resolve("hello world")
-})
-
-let p2 = Promise.resolve("some value")
-
-// You can only reject `exn` values for streamlined catch handling
-exception MyOwnError(string)
-let p3 = Promise.reject(MyOwnError("some rejection"))
-```
-
-### Access the contents and transform a promise
-
-```res
-let logAsyncMessage = () => {
- open Promise
- Promise.resolve("hello world")
- ->then(msg => {
- // then callbacks require the result to be resolved explicitly
- resolve("Message: " ++ msg)
- })
- ->then(msg => {
- Console.log(msg)
-
- // Even if there is no result, we need to use resolve() to return a promise
- resolve()
- })
- ->ignore // Requires ignoring due to unhandled return value
-}
-```
-
-For comparison, the `async` / `await` version of the same code would look like this:
-
-```res
-let logAsyncMessage = async () => {
- let msg = await Promise.resolve("hello world")
- Console.log(`Message: ${msg}`)
-}
-```
-
-Needless to say, the async / await version offers better ergonomics and less opportunities to run into type issues.
-
-### Handling Rejected Promises
-
-You can handle a rejected promise using the [`Promise.catch()`](./api/core/promise#value-catch) method, which allows you to catch and manage errors effectively.
-
-### Run multiple promises in parallel
-
-In case you want to launch multiple promises in parallel, use `Promise.all`:
-
-
-
-
-```res
-@val
-external fetchMessage: string => promise = "global.fetchMessage"
-
-let logAsyncMessage = async () => {
- let messages = await Promise.all([fetchMessage("message1"), fetchMessage("message2")])
-
- Console.log(messages->Array.joinWith(", "))
-}
-```
-
-```js
-async function logAsyncMessage(param) {
- var messages = await Promise.all([
- global.fetchMessage("message1"),
- global.fetchMessage("message2")
- ]);
- console.log(messages.join(", "));
-}
-
-export {
- logAsyncMessage ,
-}
-```
-
-
-
-## Js.Promise module (legacy - do not use)
-
-> **Note:** The `Js.Promise` bindings are following the outdated data-last convention from a few years ago. We kept those APIs for backwards compatibility. Either use [`Promise`](api/core/promise) or a third-party promise binding instead.
-
-ReScript has built-in support for [JavaScript promises](api/js/promise). The 3 functions you generally need are:
-
-- `Js.Promise.resolve: 'a => Js.Promise.t<'a>`
-- `Js.Promise.then_: ('a => Js.Promise.t<'b>, Js.Promise.t<'a>) => Js.Promise.t<'b>`
-- `Js.Promise.catch: (Js.Promise.error => Js.Promise.t<'a>, Js.Promise.t<'a>) => Js.Promise.t<'a>`
-
-Additionally, here's the type signature for creating a promise on the ReScript side:
-
-```res
-Js.Promise.make: (
- (
- ~resolve: (. 'a) => unit,
- ~reject: (. exn) => unit
- ) => unit
-) => Js.Promise.t<'a>
-```
-
-This type signature means that `make` takes a callback that takes 2 named arguments, `resolve` and `reject`. Both arguments are themselves [uncurried callbacks](
-function.md#uncurried-function) (with a dot). `make` returns the created promise.
-
-### Usage
-
-Using the [pipe operator](pipe.md):
-
-
-
-```res example
-let myPromise = Js.Promise.make((~resolve, ~reject) => resolve(. 2))
-
-myPromise->Js.Promise.then_(value => {
- Console.log(value)
- Js.Promise.resolve(value + 2)
-}, _)->Js.Promise.then_(value => {
- Console.log(value)
- Js.Promise.resolve(value + 3)
-}, _)->Js.Promise.catch(err => {
- Console.log2("Failure!!", err)
- Js.Promise.resolve(-2)
-}, _)
-```
-```js
-var myPromise = new Promise(function (resolve, reject) {
- return resolve(2);
-});
-
-myPromise
- .then(function (value) {
- console.log(value);
- return Promise.resolve((value + 2) | 0);
- })
- .then(function (value) {
- console.log(value);
- return Promise.resolve((value + 3) | 0);
- })
- .catch(function (err) {
- console.log("Failure!!", err);
- return Promise.resolve(-2);
- });
-```
-
-
diff --git a/pages/docs/manual/v12.0.0/record.mdx b/pages/docs/manual/v12.0.0/record.mdx
deleted file mode 100644
index 8879aa14c..000000000
--- a/pages/docs/manual/v12.0.0/record.mdx
+++ /dev/null
@@ -1,639 +0,0 @@
----
-title: "Record"
-description: "Record types in ReScript"
-canonical: "/docs/manual/v12.0.0/record"
----
-
-# Record
-
-Records are like JavaScript objects but:
-
-- are immutable by default
-- have fixed fields (not extensible)
-
-## Type Declaration
-
-A record needs a mandatory type declaration:
-
-
-
-```res prelude
-type person = {
- age: int,
- name: string,
-}
-```
-```js
-// Empty output
-```
-
-
-
-You can also nest definitions of records.
-
-
-
-```res prelude
-type person = {
- age: int,
- name: string,
- notificationSettings: {
- sendEmails: bool,
- allowPasswordLogin: bool,
- },
-}
-
-let person = {
- age: 90,
- name: "Test Person",
- notificationSettings: {
- sendEmails: true,
- allowPasswordLogin: false,
- },
-}
-
-```
-```js
-let person = {
- age: 90,
- name: "Test Person",
- notificationSettings: {
- sendEmails: true,
- allowPasswordLogin: false
- }
-};
-```
-
-
-
-Nesting record definitions is a nice way to group records that are part of the same structure, and won't be referenced from the outside.
-
-If you end up needing to refer to a nested record type explicitly, you should make it an explicit definition instead of a nested one. This is mainly for 2 reasons:
-- The records that are automatically generated for the nested record definitions are named in a way that would require you to use escaped identifiers to reference them. The nested record at `notificationSettings` above would be named `\"person.notificationSettings"` for instance
-- For the sake of clarity (and caring about your co-workers), having an explicit and named definition to look at and refer to is much easier than scanning a potentially large record definition for the nested record you're looking for
-
-So if we in the example above ended up needing to refer to `person.notificationSettings` nested record from the outside, we should instead make it explicit, just like how we normally define records:
-
-
-
-```res prelude
-type personNotificationSettings = {
- sendEmails: bool,
- allowPasswordLogin: bool,
-}
-
-type person = {
- age: int,
- name: string,
- notificationSettings: personNotificationSettings
-}
-
-let person = {
- age: 90,
- name: "Test Person",
- notificationSettings: {
- sendEmails: true,
- allowPasswordLogin: false,
- },
-}
-
-```
-```js
-let person = {
- age: 90,
- name: "Test Person",
- notificationSettings: {
- sendEmails: true,
- allowPasswordLogin: false
- }
-};
-```
-
-
-
-## Creation
-
-To create a `person` record (declared above):
-
-
-
-```res prelude
-let me = {
- age: 5,
- name: "Big ReScript"
-}
-```
-```js
-var me = {
- age: 5,
- name: "Big ReScript"
-};
-```
-
-
-
-When you create a new record value, ReScript tries to find a record type declaration that conforms to the shape of the value. So the `me` value here is inferred as of type `person`.
-
-The type is found by looking above the `me` value. **Note**: if the type instead resides in another file or module, you need to explicitly indicate which file or module it is:
-
-
-
-```res example
-// School.res
-type person = {age: int, name: string}
-```
-```js
-// Empty output
-```
-
-
-
-
-
-```res
-// Example.res
-
-let me: School.person = {age: 20, name: "Big ReScript"}
-/* or */
-let me2 = {School.age: 20, name: "Big ReScript"}
-```
-```js
-var me = {
- age: 20,
- name: "Big ReScript"
-};
-var me2 = {
- age: 20,
- name: "Big ReScript"
-};
-```
-
-
-
-In both `me` and `me2` the record definition from `School` is found. The first one, `me` with the regular type annotation, is preferred.
-
-## Access
-
-Use the familiar dot notation:
-
-
-
-```res example
-let name = me.name
-```
-```js
-var name = "Big ReScript";
-```
-
-
-
-## Immutable Update
-
-New records can be created from old records with the `...` spread operator. The original record isn't mutated.
-
-
-
-```res example
-let meNextYear = {...me, age: me.age + 1}
-```
-```js
-var meNextYear = {
- age: 21,
- name: "Big ReScript"
-};
-```
-
-
-
-**Note**: spread cannot add new fields to the record value, as a record's shape is fixed by its type.
-
-## Mutable Update
-
-Record fields can optionally be mutable. This allows you to efficiently update those fields in-place with the `=` operator.
-
-
-
-```res example
-type person = {
- name: string,
- mutable age: int
-}
-
-let baby = {name: "Baby ReScript", age: 5}
-baby.age = baby.age + 1 // `baby.age` is now 6. Happy birthday!
-```
-```js
-var baby = {
- name: "Baby ReScript",
- age: 5
-};
-
-baby.age = baby.age + 1 | 0;
-```
-
-
-
-Fields not marked with `mutable` in the type declaration cannot be mutated.
-
-## JavaScript Output
-
-ReScript records compile to straightforward JavaScript objects; see the various JS output tabs above.
-
-## Optional Record Fields
-ReScript [`v10`](/blog/release-10-0-0#experimental-optional-record-fields) introduced optional record fields. This means that you can define fields that can be omitted when creating the record. It looks like this:
-
-
-
-```res example
-type person = {
- age: int,
- name?: string
-}
-```
-```js
-// Empty output
-```
-
-
-
-Notice how `name` has a suffixed `?`. That means that the field itself is _optional_.
-
-### Creation
-You can omit any optional fields when creating a record. Not setting an optional field will default the field's value to `None`:
-
-
-
-```res example
-type person = {
- age: int,
- name?: string
-}
-
-let me = {
- age: 5,
- name: "Big ReScript"
-}
-
-let friend = {
- age: 7
-}
-```
-```js
-var me = {
- age: 5,
- name: "Big ReScript"
-};
-
-var friend = {
- age: 7
-};
-```
-
-
-
-This has consequences for pattern matching, which we'll expand a bit on soon.
-
-## Immutable Update
-Updating an optional field via an immutable update above lets you set that field value without needing to care whether it's optional or not.
-
-
-
-```res example
-type person = {
- age: int,
- name?: string
-}
-
-let me = {
- age: 123,
- name: "Hello"
-}
-
-let withoutName = {
- ...me,
- name: "New Name"
-}
-```
-```js
-import * as Caml_obj from "./stdlib/caml_obj.js";
-
-var me = {
- age: 123,
- name: "Hello"
-};
-
-var newrecord = Caml_obj.obj_dup(me);
-
-newrecord.name = "New Name";
-
-var withoutName = newrecord;
-```
-
-
-
-
-However, if you want to set the field to an optional value, you prefix that value with `?`:
-
-
-
-```res example
-type person = {
- age: int,
- name?: string
-}
-
-let me = {
- age: 123,
- name: "Hello"
-}
-
-let maybeName = Some("My Name")
-
-let withoutName = {
- ...me,
- name: ?maybeName
-}
-```
-```js
-import * as Caml_obj from "./stdlib/caml_obj.js";
-
-var me = {
- age: 123,
- name: "Hello"
-};
-
-var maybeName = "My Name";
-
-var newrecord = Caml_obj.obj_dup(me);
-
-newrecord.name = maybeName;
-
-var withoutName = newrecord;
-```
-
-
-
-You can unset an optional field's value via that same mechanism by setting it to `?None`.
-
-### Pattern Matching on Optional Fields
-[Pattern matching](pattern-matching-destructuring), one of ReScript's most important features, has two caveats when you deal with optional fields.
-
-When matching on the value directly, it's an `option`. Example:
-
-
-
-```res
-type person = {
- age: int,
- name?: string,
-}
-
-let me = {
- age: 123,
- name: "Hello",
-}
-
-let isRescript = switch me.name {
-| Some("ReScript") => true
-| Some(_) | None => false
-}
-```
-```js
-var isRescript;
-
-isRescript = "Hello" === "ReScript" ? true : false;
-
-var me = {
- age: 123,
- name: "Hello"
-};
-```
-
-
-
-But, when matching on the field as part of the general record structure, it's treated as the underlying, non-optional value:
-
-
-
-```res
-type person = {
- age: int,
- name?: string,
-}
-
-let me = {
- age: 123,
- name: "Hello",
-}
-
-let isRescript = switch me {
-| {name: "ReScript"} => true
-| _ => false
-}
-
-```
-```js
-var isRescript;
-
-isRescript = "Hello" === "ReScript" ? true : false;
-
-var me = {
- age: 123,
- name: "Hello"
-};
-```
-
-
-
-Sometimes you _do_ want to know whether the field was set or not. You can tell the pattern matching engine about that by prefixing your option match with `?`, like this:
-
-
-
-```res
-type person = {
- age: int,
- name?: string,
-}
-
-let me = {
- age: 123,
- name: "Hello",
-}
-
-let nameWasSet = switch me {
-| {name: ?None} => false
-| {name: ?Some(_)} => true
-}
-```
-```js
-var nameWasSet = true;
-
-var me = {
- age: 123,
- name: "Hello"
-};
-```
-
-
-
-## Record Type Spread
-
-In ReScript v11, you can now spread one or more record types into a new record type. It looks like this:
-
-```rescript
-type a = {
- id: string,
- name: string,
-}
-
-type b = {
- age: int
-}
-
-type c = {
- ...a,
- ...b,
- active: bool
-}
-```
-
-`type c` will now be:
-
-```rescript
-type c = {
- id: string,
- name: string,
- age: int,
- active: bool,
-}
-```
-
-Record type spreads act as a 'copy-paste' mechanism for fields from one or more records into a new record. This operation inlines the fields from the spread records directly into the new record definition, while preserving their original properties, such as whether they are optional or mandatory. It's important to note that duplicate field names are not allowed across the records being spread, even if the fields have the same type.
-
-## Record Type Coercion
-
-Record type coercion gives us more flexibility when passing around records in our application code. In other words, we can now coerce a record `a` to be treated as a record `b` at the type level, as long as the original record `a` contains the same set of fields in `b`. Here's an example:
-
-```rescript
-type a = {
- name: string,
- age: int,
-}
-
-type b = {
- name: string,
- age: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- name: "Name",
- age: 35,
-}
-
-let name = nameFromB(a :> b)
-```
-
-Notice how we _coerced_ the value `a` to type `b` using the coercion operator `:>`. This works because they have the same record fields. This is purely at the type level, and does not involve any runtime operations.
-
-Additionally, we can also coerce records from `a` to `b` whenever `a` is a super-set of `b` (i.e. `a` containing all the fields of `b`, and more). The same example as above, slightly altered:
-
-```rescript
-type a = {
- id: string,
- name: string,
- age: int,
- active: bool,
-}
-
-type b = {
- name: string,
- age: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- id: "1",
- name: "Name",
- age: 35,
- active: true,
-}
-
-let name = nameFromB(a :> b)
-```
-
-Notice how `a` now has more fields than `b`, but we can still coerce `a` to `b` because `b` has a subset of the fields of `a`.
-
-In combination with [optional record fields](/docs/manual/next/record#optional-record-fields), one may coerce a mandatory field of an `option` type to an optional field:
-
-```rescript
-type a = {
- name: string,
-
- // mandatory, but explicitly typed as option
- age: option,
-}
-
-type b = {
- name: string,
- // optional field
- age?: int,
-}
-
-let nameFromB = (b: b) => b.name
-
-let a: a = {
- name: "Name",
- age: Some(35),
-}
-
-let name = nameFromB(a :> b)
-```
-
-## Tips & Tricks
-
-### Record Types Are Found By Field Name
-With records, you **cannot** say "I'd like this function to take any record type, as long as they have the field `age`". The following **won't work as intended**:
-
-
-
-```res
-type person = {age: int, name: string}
-type monster = {age: int, hasTentacles: bool}
-
-let getAge = (entity) => entity.age
-```
-```js
-function getAge(entity) {
- return entity.age;
-}
-```
-
-
-
-Instead, `getAge` will infer that the parameter `entity` must be of type `monster`, the closest record type with the field `age`. The following code's last line fails:
-
-```res
-let kraken = {age: 9999, hasTentacles: true}
-let me = {age: 5, name: "Baby ReScript"}
-
-getAge(kraken)
-getAge(me) // type error!
-```
-
-The type system will complain that `me` is a `person`, and that `getAge` only works on `monster`. If you need such capability, use ReScript objects, described [here](object.md).
-
-### Optional Fields in Records Can Be Useful for Bindings
-Many JavaScript APIs tend to have large configuration objects that can be a bit annoying to model as records, since you previously always needed to specify all record fields when creating a record.
-
-Optional record fields, introduced in [`v10`](/blog/release-10-0-0#experimental-optional-record-fields), is intended to help with this. Optional fields will let you avoid having to specify all fields, and let you just specify the one's you care about. A significant improvement in ergonomics for bindings and other APIs with for example large configuration objects.
-
-## Design Decisions
-
-After reading the constraints in the previous sections, and if you're coming from a dynamic language background, you might be wondering why one would bother with record in the first place instead of straight using object, since the former needs explicit typing and doesn't allow different records with the same field name to be passed to the same function, etc.
-
-1. The truth is that most of the times in your app, your data's shape is actually fixed, and if it's not, it can potentially be better represented as a combination of variant (introduced next) + record instead.
-2. Since a record type is resolved through finding that single explicit type declaration (we call this "nominal typing"), the type error messages end up better than the counterpart ("structural typing", like for tuples). This makes refactoring easier; changing a record type's fields naturally allows the compiler to know that it's still the same record, just misused in some places. Otherwise, under structural typing, it might get hard to tell whether the definition site or the usage site is wrong.
-
diff --git a/pages/docs/manual/v12.0.0/reserved-keywords.mdx b/pages/docs/manual/v12.0.0/reserved-keywords.mdx
deleted file mode 100644
index 3d5295cac..000000000
--- a/pages/docs/manual/v12.0.0/reserved-keywords.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: "Reserved Keywords"
-description: "All reserved keywords in ReScript"
-canonical: "/docs/manual/v12.0.0/reserved-keywords"
----
-
-# Reserved Keywords
-
-> **Note**: Some of these words are reserved purely for backward compatibility.
->
-> If you _need_ to use one of these names as binding and/or field name, see [Use Illegal Identifier Names](use-illegal-identifier-names.md).
-
-- `and`
-- `as`
-- `assert`
-
-
-
-
-
-- `constraint`
-
-
-
-
-- `else`
-
-
-- `exception`
-- `external`
-
-* `false`
-* `for`
-
-
-
-
-- `if`
-- `in`
-- `include`
-
-
-
-* `lazy`
-* `let`
-
-- `module`
-- `mutable`
-
-
-
-
-
-
-- `of`
-- `open`
-
-
-
-
-
-- `rec`
-
-
-
-
-- `switch`
-
-
-
-- `true`
-- `try`
-- `type`
-
-
-
-
-- `when`
-- `while`
-- `with`
diff --git a/pages/docs/manual/v12.0.0/scoped-polymorphic-types.mdx b/pages/docs/manual/v12.0.0/scoped-polymorphic-types.mdx
deleted file mode 100644
index e0c1a3d23..000000000
--- a/pages/docs/manual/v12.0.0/scoped-polymorphic-types.mdx
+++ /dev/null
@@ -1,100 +0,0 @@
----
-title: "Scoped Polymorphic Types"
-description: "Scoped Polymorphic Types in ReScript"
-canonical: "/docs/manual/v12.0.0/scoped-polymorphic-types"
----
-
-# Scoped Polymorphic Types
-
-Scoped Polymorphic Types in ReScript are functions with the capability to handle arguments of any type within a specific scope. This feature is particularly valuable when working with JavaScript APIs, as it allows your functions to accommodate diverse data types while preserving ReScript's strong type checking.
-
-## Definition and Usage
-
-Scoped polymorphic types in ReScript offer a flexible and type-safe way to handle diverse data types within specific scopes. This documentation provides an example to illustrate their usage in a JavaScript context.
-
-### Example: Logging API
-
-Consider a logging example within a JavaScript context that processes various data types:
-
-```js
-const logger = {
- log: (data) => {
- if (typeof data === "string") {
- /* handle string */
- } else if (typeof data === "number") {
- /* handle number */
- } else {
- /* handle other types */
- }
- },
-};
-```
-
-In ReScript, we can bind to this function as a record with a scoped polymorphic function type:
-
-```res prelude
-type logger = { log: 'a. 'a => unit }
-
-@module("jsAPI") external getLogger: unit => logger = "getLogger"
-```
-
-The `logger` type represents a record with a single field `log`, which is a scoped polymorphic function type `'a. 'a => unit`. The `'a` indicates a type variable that can be any type within the scope of the `log` function.
-
-Now, we can utilize the function obtained from `getLogger`:
-
-
-
-```res example
-let myLogger = getLogger()
-
-myLogger.log("Hello, ReScript!")
-myLogger.log(42)
-```
-
-```js
-var myLogger = JsAPI.getLogger();
-
-myLogger.log("Hello, ReScript!");
-myLogger.log(42);
-```
-
-
-
-In this example, we create an instance of the logger by calling `getLogger()`, and then we can use the `log` function on the `myLogger` object to handle different data types.
-
-## Limitations of Normal Polymorphic Types
-
-Let's consider the same logging example in ReScript, but this time using normal polymorphic types:
-
-```res
-type logger<'a> = { log: 'a => unit}
-
-@module("jsAPI") external getLogger: unit => logger<'a> = "getLogger"
-```
-
-In this case, the `logger` type is a simple polymorphic function type `'a => unit`. However, when we attempt to use this type in the same way as before, we encounter an issue:
-
-```res
-let myLogger = getLogger()
-
-myLogger.log("Hello, ReScript!")
-myLogger.log(42) // Type error!
-```
-
-The problem arises because the type inference in ReScript assigns a concrete type to the `logger` function based on the first usage. In this example, after the first call to `myLogger`, the compiler infers the type `logger` for `myLogger`. Consequently, when we attempt to pass an argument of type `number` in the next line, a type error occurs because it conflicts with the inferred type `logger`.
-
-In contrast, scoped polymorphic types, such as `'a. 'a => unit`, overcome this limitation by allowing type variables within the scope of the function. They ensure that the type of the argument is preserved consistently within that scope, regardless of the specific value used in the first invocation.
-
-## Limitations of Scoped Polymorphic Types
-
-Scoped polymorphic types work only when they are directly applied to let-bindings or record fields (as demonstrated in the logger example above). They can neither be applied to function bodies, nor to separate type definitions:
-
-```res
-exception Abort
-
-let testExn: 'a. unit => 'a = () => throw(Abort) // Works!
-
-let testExn2 = (): 'a. 'a = throw(Abort) // Syntax error!
-type fn = 'a. 'a => unit // Syntax error!
-```
-
diff --git a/pages/docs/manual/v12.0.0/shared-data-types.mdx b/pages/docs/manual/v12.0.0/shared-data-types.mdx
deleted file mode 100644
index a97914157..000000000
--- a/pages/docs/manual/v12.0.0/shared-data-types.mdx
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: "Shared Data Types"
-description: "Data types that share runtime presentation between JS and ReScript"
-canonical: "/docs/manual/v12.0.0/shared-data-types"
----
-
-# Shared Data Types
-
-ReScript's built-in values of type `string`, `float`, `array` and a few others have a rather interesting property: they compile to the exact same value in JavaScript!
-
-This means that if you're passing e.g. a ReScript string to the JavaScript side, the JS side can directly use it as a native JS string. It also means that you can import a JS string and pretend it's a native ReScript string.
-
-Unlike most compiled-to-js languages, in ReScript, **you don't need to write data converters back and forth for most of our values**!
-
-**Shared, bidirectionally usable types**:
-
-- String. ReScript strings are JavaScript strings, vice-versa. (Caveat: only our backtick string `` `hello 👋 ${personName}` `` supports unicode and interpolation).
-- Float. ReScript floats are JS numbers, vice-versa.
-- Array. In addition to the [Array API](api/core/array), we provide our own [Belt.Array](api/belt/array#set) API too.
-- Tuple. Compiles to a JS array. You can treat a fixed-sized, heterogenous JS array as ReScript tuple too.
-- Boolean.
-- Record. Record compiles to JS object. Therefore you can also treat JS objects as records. If they're too dynamic, consider modeling them on the ReScript side as a hashmap/dictionary [`Dict`](api/core/dict) or a ReScript object.
-- Object. ReScript objects are JavaScript objects, vice-versa.
-- Function. They compile to clean JS functions.
-- Module. ReScript files are considered top-level modules, and are compiled to JS files 1 to 1. Nested modules are compiled to JavaScript objects.
-- Polymorphic variants.
-- Unit. The `unit` type, which has a single value `()`, compiles to `undefined` too. Likewise, you can treat an incoming JS `undefined` as `()` if that's the only value it'll ever be.
-
-**Types that are slightly different than JS, but that you can still use from JS**:
-
-- Int. **Ints are 32-bits**! Be careful, you can potentially treat them as JS numbers and vice-versa, but if the number's large, then you better treat JS numbers as floats. For example, we bind to `Date` using `float`s.
-- Option. The `option` type's `None` value compiles into JS `undefined`. The `Some` value, e.g. `Some(5)`, compiles to `5`. Likewise, you can treat an incoming JS `undefined` as `None`. **JS `null` isn't handled here**. If your JS value can be `null`, use [Nullable](api/core/nullable) helpers.
-- Exception.
-- Variant. Check the compiled JavaScript output of variant to see its shape. We don't recommend exporting a ReScript variant for pure JS usage, since they're harder to read as plain JS code, but you can do it.
-- List, which is just a regular variant.
-
-**Non-shared types (aka internal types)**:
-
-- Character.
-- Int64.
-- Lazy values.
-- Everything else.
-
-Many of these are stable, which means that you can still serialize/deserialize them as-is without manual conversions. But we discourage actively peeking into their structure otherwise.
-
-These types require manual conversions if you want to export them for JS consumption. For a seamless JS/TypeScript integration experience, you might want to use [genType](https://github.com/cristianoc/gentype) instead of doing conversions by hand.
diff --git a/pages/docs/manual/v12.0.0/tagged-templates.mdx b/pages/docs/manual/v12.0.0/tagged-templates.mdx
deleted file mode 100644
index 1b569211c..000000000
--- a/pages/docs/manual/v12.0.0/tagged-templates.mdx
+++ /dev/null
@@ -1,124 +0,0 @@
----
-title: "Tagged templates"
-description: "Using tagged templates in ReScript"
-canonical: "/docs/manual/v12.0.0/tagged-templates"
----
-
-# Tagged templates
-
-**Since 11.1**
-
-Tagged templates provide a special form of string interpolation, enabling the creation of template literals
-where placeholders aren't restricted to strings. Moreover, the resulting output isn't confined solely to
-strings either. You can take a look at the [JS documentation
-about tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates)
-to learn more about them.
-
-## Define a tag function
-
-Tag functions in ReScript have the following signature:
-```res
-let myTagFunction : (array, array<'param>) => 'output
-```
-As you can see, you can have any type you want both for the placeholder array and for the output.
-
-Given how string interpolation works, you'll always have the following invariant:
-```res
-Array.length(strings) == Array.length(placeholder) + 1
-```
-
-Let's say you want to interpolate strings with all kind of builtin types and make it work inside React components,
-you can define the following tag function:
-
-
-
-```res prelude
-type params =
- | I(int)
- | F(float)
- | S(string)
- | Bool(bool)
-
-let s = (strings, parameters) => {
- let text = Array.reduceWithIndex(parameters, Array.getUnsafe(strings, 0), (
- acc,
- param,
- i,
- ) => {
- let s = Array.getUnsafe(strings, i + 1)
- let p = switch param {
- | I(i) => Int.toString(i)
- | F(f) => Float.toString(f)
- | S(s) => s
- | Bool(true) => "true"
- | Bool(false) => "false"
- }
- acc ++ p ++ s
- })
- React.string(text)
-}
-```
-```js
-import * as Core__Array from "./stdlib/core__Array.js";
-
-function s(strings, parameters) {
- return Core__Array.reduceWithIndex(parameters, strings[0], (function (acc, param, i) {
- var s = strings[i + 1 | 0];
- var p;
- switch (param.TAG) {
- case "I" :
- case "F" :
- p = param._0.toString();
- break;
- case "S" :
- p = param._0;
- break;
- case "Bool" :
- p = param._0 ? "true" : "false";
- break;
-
- }
- return acc + p + s;
- }));
-}
-```
-
-
-
-## Write tagged template literals
-
-Now that you have defined your tag function, you can use it this way:
-
-
-
-```res example
-module Greetings = {
- @react.component
- let make = (~name, ~age) => {
-
{s`hello ${S(name)} you're ${I(age)} year old!`}
- }
-}
-```
-```js
-function Greetings(props) {
- return React.createElement("div", undefined, s([
- "hello ",
- " you're ",
- " year old!"
- ], [
- {
- TAG: "S",
- _0: props.name
- },
- {
- TAG: "I",
- _0: props.age
- }
- ]));
-}
-```
-
-
-
-Pretty neat, isn't it? As you can see, it looks like any regular template literal but it accepts placeholders that are not strings
-and it outputs something that is not a string either, a `React.element` in this case.
\ No newline at end of file
diff --git a/pages/docs/manual/v12.0.0/try.mdx b/pages/docs/manual/v12.0.0/try.mdx
deleted file mode 100644
index e5d67824c..000000000
--- a/pages/docs/manual/v12.0.0/try.mdx
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: "Try"
-description: "Try ReScript via Command Line"
-canonical: "/docs/manual/v12.0.0/try"
----
-
-## Try Online
-
-Our [Playground](/try) lets you try ReScript online, and comes with the [ReScript React bindings](/docs/react/latest/introduction) and the new [ReScript Core](https://github.com/rescript-association/rescript-core) standard library preinstalled.
diff --git a/pages/docs/manual/v12.0.0/tuple.mdx b/pages/docs/manual/v12.0.0/tuple.mdx
deleted file mode 100644
index 27fcc103e..000000000
--- a/pages/docs/manual/v12.0.0/tuple.mdx
+++ /dev/null
@@ -1,104 +0,0 @@
----
-title: "Tuple"
-description: "Tuple types and values in ReScript"
-canonical: "/docs/manual/v12.0.0/tuple"
----
-
-# Tuple
-
-Tuples are a ReScript-specific data structure that don't exist in JavaScript. They are:
-
-- immutable
-- ordered
-- fix-sized at creation time
-- heterogeneous (can contain different types of values)
-
-
-
-```res example
-let ageAndName = (24, "Lil' ReScript")
-let my3dCoordinates = (20.0, 30.5, 100.0)
-```
-```js
-var ageAndName = [24, "Lil' ReScript"];
-var my3dCoordinates = [20.0, 30.5, 100.0];
-```
-
-
-
-Tuples' types can be used in type annotations as well. Tuple types visually resemble tuples values.
-
-
-
-```res prelude
-let ageAndName: (int, string) = (24, "Lil' ReScript")
-// a tuple type alias
-type coord3d = (float, float, float)
-let my3dCoordinates: coord3d = (20.0, 30.5, 100.0)
-```
-```js
-var ageAndName = [24, "Lil' ReScript"];
-var my3dCoordinates = [20.0, 30.5, 100.0];
-```
-
-
-**Note**: there's no tuple of size 1. You'd just use the value itself.
-
-## Usage
-
-To get a specific member of a tuple, destructure it:
-
-
-
-```res example
-let (_, y, _) = my3dCoordinates // now you've retrieved y
-```
-```js
-var y = 30.5;
-```
-
-
-
-The `_` means you're ignoring the indicated members of the tuple.
-
-Tuples aren't meant to be updated mutatively. You'd create new ones by destructuring the old ones:
-
-
-
-```res example
-let coordinates1 = (10, 20, 30)
-let (c1x, _, _) = coordinates1
-let coordinates2 = (c1x + 50, 20, 30)
-```
-```js
-var coordinates1 = [10, 20, 30];
-var c1x = 10;
-var coordinates2 = [60, 20, 30];
-```
-
-
-
-## Tips & Tricks
-
-You'd use tuples in handy situations that pass around multiple values without too much ceremony. For example, to return many values:
-
-
-
-```res
-let getCenterCoordinates = () => {
- let x = doSomeOperationsHere()
- let y = doSomeMoreOperationsHere()
- (x, y)
-}
-```
-```js
-function getCenterCoordinates(param) {
- var x = doSomeOperationsHere(undefined);
- var y = doSomeMoreOperationsHere(undefined);
- return [x, y];
-}
-```
-
-
-
-Try to keep the usage of tuple **local**. For data structures that are long-living and passed around often, prefer a **record**, which has named fields.
diff --git a/pages/docs/manual/v12.0.0/type.mdx b/pages/docs/manual/v12.0.0/type.mdx
deleted file mode 100644
index e0344acbc..000000000
--- a/pages/docs/manual/v12.0.0/type.mdx
+++ /dev/null
@@ -1,278 +0,0 @@
----
-title: "Type"
-description: "Types and type definitions in ReScript"
-canonical: "/docs/manual/v12.0.0/type"
----
-
-# Type
-
-Types are the highlight of ReScript! They are:
-- **Strong**. A type can't change into another type. In JavaScript, your variable's type might change when the code runs (aka at runtime). E.g. a `number` variable might change into a `string` sometimes. This is an anti-feature; it makes the code much harder to understand when reading or debugging.
-- **Static**. ReScript types are erased after compilation and don't exist at runtime. Never worry about your types dragging down performance. You don't need type info during runtime; we report all the information (especially all the type errors) during compile time. Catch the bugs earlier!
-- **Sound**. This is our biggest differentiator versus many other typed languages that compile to JavaScript. Our type system is guaranteed to **never** be wrong. Most type systems make a guess at the type of a value and show you a type in your editor that's sometime incorrect. We don't do that. We believe that a type system that is sometime incorrect can end up being dangerous due to expectation mismatches.
-- **Fast**. Many developers underestimate how much of their project's build time goes into type checking. Our type checker is one of the fastest around.
-- **Inferred**. You don't have to write down the types! ReScript can deduce them from their values. Yes, it might seem magical that we can deduce all of your program's types, without incorrectness, without your manual annotation, and do so quickly. Welcome to ReScript =).
-
-The following sections explore more of our type system.
-
-## Inference
-
-This let-binding doesn't contain any written type:
-
-
-
-```res example
-let score = 10
-let add = (a, b) => a + b
-```
-```js
-var score = 10;
-function add(a, b) {
- return a + b | 0;
-}
-```
-
-
-
-ReScript knows that `score` is an `int`, judging by the value `10`. This is called **inference**. Likewise, it also knows that the `add` function takes 2 `int`s and returns an `int`, judging from the `+` operator, which works on ints.
-
-## Type Annotation
-
-But you can also optionally write down the type, aka annotate your value:
-
-
-
-```res example
-let score: int = 10
-```
-```js
-var score = 10;
-```
-
-
-
-If the type annotation for `score` doesn't correspond to our inferred type for it, we'll show you an error during compilation time. We **won't** silently assume your type annotation is correct, unlike many other languages.
-
-You can also wrap any expression in parentheses and annotate it:
-
-
-
-```res
-let myInt = 5
-let myInt: int = 5
-let myInt = (5: int) + (4: int)
-let add = (x: int, y: int) : int => x + y
-let drawCircle = (~radius as r: int): circleType => /* code here */
-```
-```js
-var myInt = 9;
-function add(x, y) {
- return x + y | 0;
-}
-function drawCircle(r) {
- /* code here */
-}
-```
-
-
-
-Note: in the last line, `(~radius as r: int)` is a labeled argument. More on this in the [function](function.md) page.
-
-## Type Alias
-
-You can refer to a type by a different name. They'll be equivalent:
-
-
-
-```res example
-type scoreType = int
-let x: scoreType = 10
-```
-```js
-var x = 10;
-```
-
-
-
-## Type Parameter (Aka Generic)
-
-Types can accept parameters, akin to generics in other languages. The parameters' names **need** to start with `'`.
-
-The use-case of a parameterized type is to kill duplications. Before:
-
-
-
-```res example
-// this is a tuple of 3 items, explained next
-type intCoordinates = (int, int, int)
-type floatCoordinates = (float, float, float)
-
-let a: intCoordinates = (10, 20, 20)
-let b: floatCoordinates = (10.5, 20.5, 20.5)
-```
-```js
-var a = [10, 20, 20];
-var b = [10.5, 20.5, 20.5];
-```
-
-
-
-After:
-
-
-
-```res example
-type coordinates<'a> = ('a, 'a, 'a)
-
-let a: coordinates = (10, 20, 20)
-let b: coordinates = (10.5, 20.5, 20.5)
-```
-```js
-var a = [10, 20, 20];
-var b = [10.5, 20.5, 20.5];
-```
-
-
-
-Note that the above codes are just contrived examples for illustration purposes. Since the types are inferred, you could have just written:
-
-
-
-```res example
-let buddy = (10, 20, 20)
-```
-```js
-var buddy = [10, 20, 20];
-```
-
-
-
-The type system infers that it's a `(int, int, int)`. Nothing else needed to be written down.
-
-Type arguments appear in many places. Our `array<'a>` type is such a type that requires a type parameter.
-
-
-
-```res example
-// inferred as `array`
-let greetings = ["hello", "world", "how are you"]
-```
-```js
-// inferred as `array`
-var greetings = ["hello", "world", "how are you"];
-```
-
-
-
-If types didn't accept parameters, the standard library would need to define the types `arrayOfString`, `arrayOfInt`, `arrayOfTuplesOfInt`, etc. That'd be tedious.
-
-Types can receive many arguments, and be composable.
-
-
-
-
-
-```res example
-type result<'a, 'b> =
- | Ok('a)
- | Error('b)
-
-type myPayload = {data: string}
-
-type myPayloadResults<'errorType> = array>
-
-let payloadResults: myPayloadResults = [
- Ok({data: "hi"}),
- Ok({data: "bye"}),
- Error("Something wrong happened!")
-]
-```
-```js
-var payloadResults = [
- {
- TAG: /* Ok */0,
- _0: {data: "hi"}
- },
- {
- TAG: /* Ok */0,
- _0: {data: "bye"}
- },
- {
- TAG: /* Error */1,
- _0: "Something wrong happened!"
- }
-];
-```
-
-
-
-## Recursive Types
-
-Just like a function, a type can reference itself within itself using `rec`:
-
-
-
-```res example
-type rec person = {
- name: string,
- friends: array
-}
-```
-```js
-// Empty output
-```
-
-
-
-## Mutually Recursive Types
-
-Types can also be _mutually_ recursive through `and`:
-
-
-
-```res example
-type rec student = {taughtBy: teacher}
-and teacher = {students: array}
-```
-```js
-// Empty output
-```
-
-
-
-## Type Escape Hatch
-
-ReScript's type system is robust and does not allow dangerous, unsafe stuff like implicit type casting, randomly guessing a value's type, etc. However, out of pragmatism, we expose a single escape hatch for you to "lie" to the type system:
-
-
-
-```res
-external myShadyConversion: myType1 => myType2 = "%identity"
-```
-```js
-// Empty output
-```
-
-
-
-This declaration converts a `myType1` of your choice to `myType2` of your choice. You can use it like so:
-
-
-
-```res example
-external convertToFloat : int => float = "%identity"
-let age = 10
-let gpa = 2.1 +. convertToFloat(age)
-```
-```js
-var age = 10;
-var gpa = 2.1 + 10;
-```
-
-
-
-Obviously, do **not** abuse this feature. Use it tastefully when you're working with existing, overly dynamic JS code, for example.
-
-More on externals [here](external.md).
-
-**Note**: this particular `external` is the only one that isn't preceded by a `@` [attribute](attribute.md).
diff --git a/pages/docs/manual/v12.0.0/typescript-integration.mdx b/pages/docs/manual/v12.0.0/typescript-integration.mdx
deleted file mode 100644
index dc5e5489e..000000000
--- a/pages/docs/manual/v12.0.0/typescript-integration.mdx
+++ /dev/null
@@ -1,283 +0,0 @@
----
-title: "TypeScript"
-description: "GenType - Interoperability between ReScript and TypeScript"
-canonical: "/docs/manual/v12.0.0/typescript-integration"
----
-
-# ReScript & TypeScript
-
-The ReScript compiler includes a code generation tool that lets you export ReScript values and types to use in TypeScript, and import TypeScript values and types into ReScript. It is called "genType".
-
-The implementation of genType performs a type-directed transformation of ReScript programs after compilation. The transformed programs operate on data types idiomatic to TypeScript.
-
-For example, a ReScript variant (which is represented as custom objects with tags at runtime):
-
-```res
-@genType
-type t = | A(int) | B(string)
-```
-
-is exported to a TypeScript type:
-
-```ts
-type t = { TAG: "A"; _0: number } | { TAG: "B"; _0: string };
-```
-
-## A Quick Example
-
-Let's assume we are working on a TypeScript codebase and we want to integrate a single ReScript function.
-
-We want to be able to import the function like any other one in our existing TypeScript code, but we also want to preserve all the ReScript types in the TypeScript type system.
-
-**That's exactly what genType was made for!**
-
-First we'll set up a function:
-
-```res
-// src/Color.res
-
-@genType
-type color =
- | Red
- | Blue
-
-@genType
-let printColorMessage = (~color, ~message) => {
- let prefix = switch color {
- | Red => "\x1b[91m"
- | Blue => "\x1b[94m"
- }
- let reset = "\x1b[0m"
-
- Console.log(prefix ++ message ++ reset)
-}
-
-```
-
-On a successful compile, `genType` will convert `src/Color.res` to a TypeScript file called `src/Color.gen.tsx` which will look something like this:
-
-```ts
-// src/Color.gen.tsx
-
-/* TypeScript file generated from Color.res by genType. */
-
-/* eslint-disable */
-/* tslint:disable */
-
-import * as ColorJS from "./Color.res.js";
-
-export type color = "Red" | "Blue";
-
-export const printColorMessage: (
- color: color
-) => void = ColorJS.printColorMessage as any;
-```
-
-genType automatically maps the `color` variant to TS via a string union type `"Red" | "Blue"`.
-
-Within our TypeScript application, we can now import and use the function in the following manner:
-
-```ts
-// src/app.ts
-
-import { printColorMessage } from "./Color.gen.tsx";
-
-printColorMessage("Red", "Hello, genType!");
-```
-
-## Exporting an entire module
-
-_Since ReScript `11.0.0`_ modules can be annotated with `@genType` as well. In that case, all types and values of the module will be converted to TS types. Example:
-
-
-
-```res example
-@genType
-module Size = {
- type t =
- | Small
- | Medium
- | Large
-
- let getNum = (size: t) =>
- switch size {
- | Small => 1.
- | Medium => 5.
- | Large => 10.
- }
-}
-```
-
-```ts
-import * as MyCompBS__Es6Import from './MyComp.res';
-const MyCompBS: any = MyCompBS__Es6Import;
-
-export type Size_t = "Small" | "Medium" | "Large";
-
-export const Size_getNum: (size:Size_t) => number = MyCompBS.Size.getNum;
-
-export const Size: { getNum: (size:Size_t) => number } = MyCompBS.Size
-```
-
-
-
-## Setup
-
-Add a `gentypeconfig` section to your `rescript.json` (See [Configuration](/docs/manual/next/build-configuration#gentypeconfig) for details).
-
-Every `genType` powered project requires a configuration item `"gentypeconfig"` at top level in the project's `rescript.json`.
-
-The minimal configuration of genType is following:
-
-```json
-{
- "gentypeconfig": {
- "module": "esmodule",
- "moduleResolution": "node",
- "generatedFileExtension": ".gen.tsx"
- }
-}
-```
-
-And don't forget to make sure `allowJs` is set to `true` in the project's `tsconfig.json`:
-
-```json
-{
- "compilerOptions": {
- "allowJs": true
- }
-}
-```
-
-### TypeScript Module Resolutions
-
-Make sure to set the same `moduleResolution` value in both `rescript.json` and `tsconfig.json`, so that the output of genType is done with the preferred module resolution.
-
-For example if the TypeScript project uses JavaScript modules with `Node16` / `NodeNext` module resolution:
-
-```json
-// tsconfig.json
-{
- "compilerOptions": {
- "moduleResolution": "node16"
- }
-}
-```
-
-Then `moduleResolution` in `gentypeconfig` should be same value:
-
-```json
-// rescript.json
-{
- "gentypeconfig": {
- "moduleResolution": "node16"
- }
-}
-```
-
-In case of the TypeScript project using `Bundler` module resolution, `allowImportingTsExtensions` should also be `true`:
-
-```json
-// tsconfig.json
-{
- "compilerOptions": {
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true
- }
-}
-```
-
-```json
-// rescript.json
-{
- "gentypeconfig": {
- "moduleResolution": "bundler"
- }
-}
-```
-
-## Testing the Whole Setup
-
-Open any relevant `*.res` file and add `@genType` annotations to any bindings / values / functions to be used from JavaScript. If an annotated value uses a type, the type must be annotated too. See e.g. [Hooks.res](https://github.com/rescript-lang/rescript-compiler/blob/master/jscomp/gentype_tests/typescript-react-example/src/Hooks.res).
-
-Save the file and rebuild the project via `npm run res:build` or similar. You should now see a `*.gen.tsx` file with the same name (e.g. `MyComponent.res` -> `MyComponent.gen.tsx`).
-
-Any values exported from `MyComponent.res` can then be imported from TypeScript. For example:
-
-```js
-import MyComponent from "./components/MyComponent.gen.tsx";
-```
-
-## Experimental features
-
-These features are for experimentation only. They could be changed/removed any time, and not be considered breaking changes.
-
-- Export object and record types as interfaces. To activate, add `"exportInterfaces": true` to the configuration. The types are also renamed from `name` to `Iname`.
-
-
-## Shims
-
-A shim is a TS file that provides user-provided definitions for library types.
-
-Required only if one needs to export certain basic ReScript data types to JS when one cannot modify the sources to add annotations (e.g. exporting ReScript lists), and if the types are not first-classed in genType.
- - Example: `Array` with format: `"RescriptModule=JavaScriptModule"`
-
-Configure your shim files within `"gentypeconfig"` in your [`rescript.json`]:
-
-```json
-{
- "gentypeconfig": {
- "shims": {
- "Js": "Js",
- "ReactEvent": "ReactEvent",
- "RescriptPervasives": "RescriptPervasives",
- "ReasonReact": "ReactShim"
- },
- },
-}
-```
-
-and add relevant `.shim.ts` files in a directory which is visible by ReScript e.g.
-
-```
-├── rescript.json
-├── src
-│ ├── shims
-│ │ ├── Js.shim.ts
-│ │ ├── ReactEvent.shim.ts
-│ │ └── RescriptPervasives.shim.ts
-```
-
-Here are some examples:
-
-```ts
-// Excerpt from https://github.com/rescript-lang/rescript-compiler/blob/master/jscomp/gentype_tests/typescript-react-example/src/shims/Js.shim.ts
-export type Json_t = unknown;
-export type t = unknown;
-```
-
-```ts
-// Excerpt from https://github.com/rescript-lang/rescript-compiler/tree/master/jscomp/gentype_tests/typescript-react-example/src/shims
-export type inputFocusEvent = React.FocusEvent;
-```
-
-More complete example shims can be found [here](https://github.com/rescript-lang/rescript-compiler/blob/master/jscomp/gentype_tests/typescript-react-example/src/shims/).
-
-## Deprecated features
-
-Features related to generating runtimes were deprecated since v11 and should no longer be used.
-
-- **`@genType("alias")`** and **`@genType.as("alias")`**
-- **`@genType.opaque`**
-- **`@genType.import`**
-- TypeScript Shims
-
-genType does not generate anything runtime-related, and in the near future it generates definition files (`*.d.ts`) directly (See the [roadmap](https://github.com/rescript-lang/rescript-compiler/issues/6196)).
-
-If any runtime code is required for interoperability with JavaScript / TypeScript projects, it can be written by hand, or request a relevant features (e.g. `@deriving`) to the compiler.
-
-## Limitations
-
-- **in-source = true**. Currently only supports ReScript projects with [in-source generation](/docs/manual/next/build-configuration#package-specs) and file suffixes that end on `.js`, like `.res.js` or `.bs.js`.
-
-- **Limited namespace support**. Currently there's limited [namespace](/docs/manual/next/build-configuration#name-namespace) support, and only `namespace:true` is possible, not e.g. `namespace:"custom"`.
diff --git a/pages/docs/manual/v12.0.0/use-illegal-identifier-names.mdx b/pages/docs/manual/v12.0.0/use-illegal-identifier-names.mdx
deleted file mode 100644
index cfd0e0987..000000000
--- a/pages/docs/manual/v12.0.0/use-illegal-identifier-names.mdx
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: "Use Illegal Identifier Names"
-description: "Handling (JS) naming collisions in ReScript"
-canonical: "/docs/manual/v12.0.0/use-illegal-identifier-names"
----
-
-# Use Illegal Identifier Names
-
-Sometime, for e.g. a let binding or a record field, you might want to use:
-- A capitalized name.
-- A name that contains illegal characters (e.g. emojis, hyphen, space).
-- A name that's one of ReScript's reserved keywords.
-
-We provide an escape hatch syntax for these cases:
-
-
-
-```res example
-let \"my-🍎" = 10
-
-type element = {
- \"aria-label": string
-}
-
-let myElement = {
- \"aria-label": "close"
-}
-
-let label = myElement.\"aria-label"
-
-let calculate = (~\"Props") => {
- \"Props" + 1
-}
-```
-```js
-var my$$unknown$unknown$unknown$unknown = 10;
-
-var myElement = {
- "aria-label": "close"
-};
-
-var label = myElement["aria-label"];
-
-function calculate(Props) {
- return Props + 1 | 0;
-}
-```
-
-
-
-See the output. **Use them only when necessary**, for interop with JavaScript. This is a last-resort feature. If you abuse this, many of the compiler guarantees will go away.
diff --git a/pages/docs/manual/v12.0.0/variant.mdx b/pages/docs/manual/v12.0.0/variant.mdx
deleted file mode 100644
index 6d7ece732..000000000
--- a/pages/docs/manual/v12.0.0/variant.mdx
+++ /dev/null
@@ -1,817 +0,0 @@
----
-title: "Variant"
-description: "Variant data structures in ReScript"
-canonical: "/docs/manual/v12.0.0/variant"
----
-
-# Variant
-
-So far, most of ReScript's data structures might look familiar to you. This section introduces an extremely important, and perhaps unfamiliar, data structure: variant.
-
-Most data structures in most languages are about "this **and** that". A variant allows us to express "this **or** that".
-
-
-
-```res example
-type myResponse =
- | Yes
- | No
- | PrettyMuch
-
-let areYouCrushingIt = Yes
-```
-```js
-var areYouCrushingIt = "Yes";
-```
-
-
-
-`myResponse` is a variant type with the cases `Yes`, `No` and `PrettyMuch`, which are called "variant constructors" (or "variant tag"). The `|` bar separates each constructor.
-
-**Note**: a variant's constructors need to be capitalized.
-
-## Variant Needs an Explicit Definition
-
-If the variant you're using is in a different file, bring it into scope like you'd do [for a record](record.md#record-needs-an-explicit-definition):
-
-
-
-```res example
-// Zoo.res
-type animal = Dog | Cat | Bird
-```
-```js
-// Empty output
-```
-
-
-
-
-
-```res
-// Example.res
-let pet: Zoo.animal = Dog // preferred
-// or
-let pet2 = Zoo.Dog
-```
-```js
-var pet = "Dog";
-var pet2 = "Dog";
-```
-
-
-
-## Constructor Arguments
-
-A variant's constructors can hold extra data separated by comma.
-
-
-
-```res prelude
-type account =
- | None
- | Instagram(string)
- | Facebook(string, int)
-```
-```js
-// Empty output
-```
-
-
-
-Here, `Instagram` holds a `string`, and `Facebook` holds a `string` and an `int`. Usage:
-
-
-
-```res example
-let myAccount = Facebook("Josh", 26)
-let friendAccount = Instagram("Jenny")
-```
-```js
-var myAccount = {
- TAG: "Facebook",
- _0: "Josh",
- _1: 26
-};
-var friendAccount = {
- TAG: "Instagram",
- _0: "Jenny"
-};
-```
-
-
-
-### Labeled Variant Payloads (Inline Record)
-
-If a variant payload has multiple fields, you can use a record-like syntax to label them for better readability:
-
-
-
-```res example
-type user =
- | Number(int)
- | Id({name: string, password: string})
-
-let me = Id({name: "Joe", password: "123"})
-```
-```js
-var me = {
- TAG: "Id",
- name: "Joe",
- password: "123"
-};
-```
-
-
-
-This is technically called an "inline record", and only allowed within a variant constructor. You cannot inline a record type declaration anywhere else in ReScript.
-
-Of course, you can just put a regular record type in a variant too:
-
-
-
-```res example
-type u = {name: string, password: string}
-type user =
- | Number(int)
- | Id(u)
-
-let me = Id({name: "Joe", password: "123"})
-```
-```js
-var me = {
- TAG: "Id",
- _0: {
- name: "Joe",
- password: "123"
- }
-};
-```
-
-
-
-The output is slightly uglier and less performant than the former.
-
-## Variant Type Spreads
-Just like [with records](record#record-type-spread), it's possible to use type spreads to create new variants from other variants:
-
-```rescript
-type a = One | Two | Three
-type b = | ...a | Four | Five
-```
-
-Type `b` is now:
-```rescript
-type b = One | Two | Three | Four | Five
-```
-
-Type spreads act as a 'copy-paste', meaning all constructors are copied as-is from `a` to `b`. Here are the rules for spreads to work:
-- You can't overwrite constructors, so the same constructor name can exist in only one place as you spread. This is true even if the constructors are identical.
-- All variants and constructors must share the same runtime configuration - `@unboxed`, `@tag`, `@as` and so on.
-- You can't spread types in recursive definitions.
-
-Note that you need a leading `|` if you want to use a spread in the first position of a variant definition.
-
-### Pattern Matching On Variant
-
-See the [Pattern Matching/Destructuring](pattern-matching-destructuring) section later.
-
-## JavaScript Output
-
-A variant value compiles to 3 possible JavaScript outputs depending on its type declaration:
-
-- If the variant value is a constructor with no payload, it compiles to a string of the constructor name. Example: `Yes` compiles to `"Yes"`.
-- If it's a constructor with a payload, it compiles to an object with the field `TAG` and the field `_0` for the first payload, `_1` for the second payload, etc. The value of `TAG` is the constructor name as string by default, but note that the name of the `TAG` field as well as the string value used for each constructor name [can be customized](#tagged-variants).
-- Labeled variant payloads (the inline record trick earlier) compile to an object with the label names instead of `_0`, `_1`, etc. The object will have the `TAG` field as per the previous rule.
-
-Check the output in these examples:
-
-
-
-```res example
-type greeting = Hello | Goodbye
-let g1 = Hello
-let g2 = Goodbye
-
-type outcome = Good | Error(string)
-let o1 = Good
-let o2 = Error("oops!")
-
-type family = Child | Mom(int, string) | Dad (int)
-let f1 = Child
-let f2 = Mom(30, "Jane")
-let f3 = Dad(32)
-
-type person = Teacher | Student({gpa: float})
-let p1 = Teacher
-let p2 = Student({gpa: 99.5})
-
-type s = {score: float}
-type adventurer = Warrior(s) | Wizard(string)
-let a1 = Warrior({score: 10.5})
-let a2 = Wizard("Joe")
-```
-```js
-var g1 = "Hello";
-
-var g2 = "Goodbye";
-
-var o1 = "Good";
-
-var o2 = {
- TAG: "Error",
- _0: "oops!"
-};
-
-var f1 = "Child";
-
-var f2 = {
- TAG: "Mom",
- _0: 30,
- _1: "Jane"
-};
-
-var f3 = {
- TAG: "Dad",
- _0: 32
-};
-
-var p1 = "Teacher";
-
-var p2 = {
- TAG: "Student",
- gpa: 99.5
-};
-
-var a1 = {
- TAG: "Warrior",
- _0: {
- score: 10.5
- }
-};
-
-var a2 = {
- TAG: "Wizard",
- _0: "Joe"
-};
-```
-
-
-
-## Tagged variants
-
-- The `@tag` attribute lets you customize the discriminator (default: `TAG`).
-- `@as` attributes control what each variant case is discriminated on (default: the variant case name as string).
-
-### Example: Binding to TypeScript enums
-
-```typescript
-// direction.ts
-/** Direction of the action. */
-enum Direction {
- /** The direction is up. */
- Up = "UP",
-
- /** The direction is down. */
- Down = "DOWN",
-
- /** The direction is left. */
- Left = "LEFT",
-
- /** The direction is right. */
- Right = "RIGHT",
-}
-
-export const myDirection = Direction.Up;
-```
-
-You can bind to the above enums like so:
-
-```rescript
-/** Direction of the action. */
-type direction =
- | /** The direction is up. */
- @as("UP")
- Up
-
- | /** The direction is down. */
- @as("DOWN")
- Down
-
- | /** The direction is left. */
- @as("LEFT")
- Left
-
- | /** The direction is right. */
- @as("RIGHT")
- Right
-
-@module("./direction.js") external myDirection: direction = "myDirection"
-```
-
-Now, this maps 100% to the TypeScript code, including letting us bring over the documentation strings so we get a nice editor experience.
-
-### String literals
-
-The same logic is easily applied to string literals from TypeScript, only here the benefit is even larger, because string literals have the same limitations in TypeScript that polymorphic variants have in ReScript:
-
-```typescript
-// direction.ts
-type direction = "UP" | "DOWN" | "LEFT" | "RIGHT";
-```
-
-There's no way to attach documentation strings to string literals in TypeScript, and you only get the actual value to interact with.
-
-### Valid `@as` payloads
-Here's a list of everything you can put in the `@as` tag of a variant constructor:
-- A string literal: `@as("success")`
-- An int: `@as(5)`
-- A float: `@as(1.5)`
-- True/false: `@as(true)` and `@as(false)`
-- Null: `@as(null)`
-- Undefined: `@as(undefined)`
-
-## Untagged variants
-
-With _untagged variants_ it is possible to mix types together that normally can't be mixed in the ReScript type system, as long as there's a way to discriminate them at runtime. For example, with untagged variants you can represent a heterogenous array:
-
-```rescript
-@unboxed type listItemValue = String(string) | Boolean(bool) | Number(float)
-
-let myArray = [String("Hello"), Boolean(true), Boolean(false), Number(13.37)]
-```
-
-Here, each value will be _unboxed_ at runtime. That means that the variant payload will be all that's left, the variant case name wrapping the payload itself will be stripped out and the payload will be all that remains.
-
-It, therefore, compiles to this JS:
-
-```javascript
-var myArray = ["hello", true, false, 13.37];
-```
-
-In the above example, reaching back into the values is as simple as pattern matching on them.
-
-### Advanced: Unboxing rules
-#### No overlap in constructors
-A variant can be unboxed if no constructors have overlap in their runtime representation.
-
-For example, you can't have `String1(string) | String2(string)` in the same unboxed variant, because there's no way for ReScript to know at runtime which of `String1` or `String2` that `string` belongs to, as it could belong to both.
-The same goes for two records - even if they have fully different shapes, they're still JavaScript `object` at runtime.
-
-Don't worry - the compiler will guide you and ensure there's no overlap.
-
-#### What you can unbox
-Here's a list of all possible things you can unbox:
-- `string`: `String(string)`
-- `float`: `Float(float)`. Note you can only have one of `float` or `int` because JavaScript only has `number` (not actually `int` and `float` like in ReScript) so we can't disambiguate between `float` and `int` at runtime.
-- `int`: `Int(int)`. See note above on `float`.
-- `bigint`: `BigInt(int)`. **Since 11.1** This is a distinct type from JavaScript's `number` type so you can use it beside either `float` or `int`.
-- `bool`: `Boolean(bool)`
-- `array<'value>`: `List(array)`
-- `('a, 'b, 'c)`: `Tuple((string, int, bool))`. Any size of tuples works, but you can have only one case of array or tuple in a variant.
-- `promise<'value>`: `Promise(promise)`
-- `Dict.t`: `Object(Dict.t)`
-- `Date.t`: `Date(Date.t)`. A JavaScript date.
-- `Blob.t`: `Blob(Blob.t)`. A JavaScript blob.
-- `File.t`: `File(File.t)`. A JavaScript file.
-- `RegExp.t`: `RegExp(RegExp.t)`. A JavaScript regexp instance.
-
-Again notice that the constructor names can be anything, what matters is what's in the payload.
-
-> **Under the hood**: Untagged variants uses a combination of JavaScript `typeof` and `instanceof` checks to discern between unboxed constructors at runtime. This means that we could add more things to the list above detailing what can be unboxed, if there are useful enough use cases.
-
-### Pattern matching on unboxed variants
-Pattern matching works the same on unboxed variants as it does on regular variants. In fact, in the perspective of ReScript's type system there's no difference between untagged and tagged variants. You can do virtually the same things with both. That's the beauty of untagged variants - they're just variants to you as a developer.
-
-Here's an example of pattern matching on an unboxed nullable value that illustrates the above:
-
-```rescript
-module Null = {
- @unboxed type t<'a> = Present('a) | @as(null) Null
-}
-
-type userAge = {ageNum: Null.t}
-
-type rec user = {
- name: string,
- age: Null.t,
- bestFriend: Null.t,
-}
-
-let getBestFriendsAge = user =>
- switch user.bestFriend {
- | Present({age: Present({ageNum: Present(ageNum)})}) => Some(ageNum)
- | _ => None
- }
-```
-No difference to how you'd do with a regular variant. But, the runtime representation is different to a regular variant.
-
-> Notice how `@as` allows us to say that an untagged variant case should map to a specific underlying _primitive_. `Present` has a type variable, so it can hold any type. And since it's an unboxed type, only the payloads `'a` or `null` will be kept at runtime. That's where the magic comes from.
-
-### Decoding and encoding JSON idiomatically
-
-With untagged variants, we have everything we need to define a native JSON type:
-
-```rescript
-@unboxed
-type rec json =
- | @as(null) Null
- | Boolean(bool)
- | String(string)
- | Number(float)
- | Object(Dict.t)
- | Array(array)
-
-let myValidJsonValue = Array([String("Hi"), Number(123.)])
-```
-
-Here's an example of how you could write your own JSON decoders easily using the above, leveraging pattern matching:
-
-```rescript
-@unboxed
-type rec json =
- | @as(null) Null
- | Boolean(bool)
- | String(string)
- | Number(float)
- | Object(Dict.t)
- | Array(array)
-
-type rec user = {
- name: string,
- age: int,
- bestFriend: option,
-}
-
-let rec decodeUser = json =>
- switch json {
- | Object(userDict) =>
- switch (
- userDict->Dict.get("name"),
- userDict->Dict.get("age"),
- userDict->Dict.get("bestFriend"),
- ) {
- | (Some(String(name)), Some(Number(age)), Some(maybeBestFriend)) =>
- Some({
- name,
- age: age->Float.toInt,
- bestFriend: maybeBestFriend->decodeUser,
- })
- | _ => None
- }
- | _ => None
- }
-
-let decodeUsers = json =>
- switch json {
- | Array(array) => array->Array.map(decodeUser)->Array.keepSome
- | _ => []
- }
-```
-
-Encoding that same structure back into JSON is also easy:
-
-```rescript
-let rec userToJson = user => Object(
- Dict.fromArray([
- ("name", String(user.name)),
- ("age", Number(user.age->Int.toFloat)),
- (
- "bestFriend",
- switch user.bestFriend {
- | None => Null
- | Some(friend) => userToJson(friend)
- },
- ),
- ]),
-)
-
-let usersToJson = users => Array(users->Array.map(userToJson))
-```
-
-This can be extrapolated to many more cases.
-
-### Advanced: Catch-all Constructors
-With untagged variants comes a rather interesting capability - catch-all cases are now possible to encode directly into a variant.
-
-Let's look at how it works. Imagine you're using a third party API that returns a list of available animals. You could of course model it as a regular `string`, but given that variants can be used as "typed strings", using a variant would give you much more benefit:
-
-
-```rescript
-type animal = Dog | Cat | Bird
-
-type apiResponse = {
- animal: animal
-}
-
-let greetAnimal = (animal: animal) =>
- switch animal {
- | Dog => "Wof"
- | Cat => "Meow"
- | Bird => "Kashiiin"
- }
-```
-```javascript
-```
-
-
-
-This is all fine and good as long as the API returns `"Dog"`, `"Cat"` or `"Bird"` for `animal`.
-However, what if the API changes before you have a chance to deploy new code, and can now return `"Turtle"` as well? Your code would break down because the variant `animal` doesn't cover `"Turtle"`.
-
-So, we'll need to go back to `string`, loosing all of the goodies of using a variant, and then do manual conversion into the `animal` variant from `string`, right?
-Well, this used to be the case before, but not anymore! We can leverage untagged variants to bake in handling of unknown values into the variant itself.
-
-Let's update our type definition first:
-```rescript
-@unboxed
-type animal = Dog | Cat | Bird | UnknownAnimal(string)
-```
-
-Notice we've added `@unboxed` and the constructor `UnknownAnimal(string)`. Remember how untagged variants work? You remove the constructors and just leave the payloads. This means that the variant above at runtime translates to this (made up) JavaScript type:
-```
-type animal = "Dog" | "Cat" | "Bird" | string
-```
-So, any string not mapping directly to one of the payloadless constructors will now map to the general `string` case.
-
-As soon as we've added this, the compiler complains that we now need to handle this additional case in our pattern match as well. Let's fix that:
-
-
-```rescript
-@unboxed
-type animal = Dog | Cat | Bird | UnknownAnimal(string)
-
-type apiResponse = {
- animal: animal
-}
-
-let greetAnimal = (animal: animal) =>
- switch animal {
- | Dog => "Wof"
- | Cat => "Meow"
- | Bird => "Kashiiin"
- | UnknownAnimal(otherAnimal) =>
- `I don't know how to greet animal ${otherAnimal}`
- }
-```
-```javascript
-function greetAnimal(animal) {
- if (!(animal === "Cat" || animal === "Dog" || animal === "Bird")) {
- return "I don't know how to greet animal " + animal;
- }
- switch (animal) {
- case "Dog" :
- return "Wof";
- case "Cat" :
- return "Meow";
- case "Bird" :
- return "Kashiiin";
-
- }
-}
-```
-
-
-There! Now the external API can change as much as it wants, we'll be forced to write all code that interfaces with `animal` in a safe way that handles all possible cases. All of this baked into the variant definition itself, so no need for labor intensive manual conversion.
-
-This is useful in any scenario when you use something enum-style that's external and might change. Additionally, it's also useful when something external has a large number of possible values that are known, but where you only care about a subset of them. With a catch-all case you don't need to bind to all of them just because they can happen, you can safely just bind to the ones you care about and let the catch-all case handle the rest.
-
-## Coercion
-In certain situations, variants can be coerced to other variants, or to and from primitives. Coercion is always zero cost.
-
-### Coercing Variants to Other Variants
-You can coerce a variant to another variant if they're identical in runtime representation, and additionally if the variant you're coercing can be represented as the variant you're coercing to.
-
-Here's an example using [variant type spreads](#variant-type-spreads):
-```rescript
-type a = One | Two | Three
-type b = | ...a | Four | Five
-
-let one: a = One
-let four: b = Four
-
-// This works because type `b` can always represent type `a` since all of type `a`'s constructors are spread into type `b`
-let oneAsTypeB = (one :> b)
-```
-
-### Coercing Variants to Primitives
-Variants that are guaranteed to always be represented by a single primitive at runtime can be coerced to that primitive.
-
-It works with strings, the default runtime representation of payloadless constructors:
-```rescript
-// Constructors without payloads are represented as `string` by default
-type a = One | Two | Three
-
-let one: a = One
-
-// All constructors are strings at runtime, so you can safely coerce it to a string
-let oneAsString = (one :> string)
-```
-
-If you were to configure all of your construtors to be represented as `int` or `float`, you could coerce to those too:
-```rescript
-type asInt = | @as(1) One | @as(2) Two | @as(3) Three
-
-let oneInt: asInt = One
-let toInt = (oneInt :> int)
-```
-
-### Advanced: Coercing `string` to Variant
-In certain situtations it's possible to coerce a `string` to a variant. This is an advanced technique that you're unlikely to need much, but when you do it's really useful.
-
-You can coerce a `string` to a variant when:
-- Your variant is `@unboxed`
-- Your variant has a "catch-all" `string` case
-
-Let's look at an example:
-```rescript
-@unboxed
-type myEnum = One | Two | Other(string)
-
-// Other("Other thing")
-let asMyEnum = ("Other thing" :> myEnum)
-
-// One
-let asMyEnum = ("One" :> myEnum)
-```
-
-This works because the variant is unboxed **and** has a catch-all case. So, if you throw a string at this variant that's not representable by the payloadless constructors, like `"One"` or `"Two"`, it'll _always_ end up in `Other(string)`, since that case can represent any `string`.
-
-## Tips & Tricks
-
-**Be careful** not to confuse a constructor carrying 2 arguments with a constructor carrying a single tuple argument:
-
-
-
-```res example
-type account =
- | Facebook(string, int) // 2 arguments
-type account2 =
- | Instagram((string, int)) // 1 argument - happens to be a 2-tuple
-```
-```js
-// Empty output
-```
-
-
-
-### Variants Must Have Constructors
-
-If you come from an untyped language, you might be tempted to try `type myType = int | string`. This isn't possible in ReScript; you'd have to give each branch a constructor: `type myType = Int(int) | String(string)`. The former looks nice, but causes lots of trouble down the line.
-
-### Interop with JavaScript
-
-_This section assumes knowledge about our JavaScript interop. Skip this if you haven't felt the itch to use variants for wrapping JS functions yet_.
-
-Quite a few JS libraries use functions that can accept many types of arguments. In these cases, it's very tempting to model them as variants. For example, suppose there's a `myLibrary.draw` JS function that takes in either a `number` or a `string`. You might be tempted to bind it like so:
-
-
-
-```res example
-// reserved for internal usage
-@module("myLibrary") external draw : 'a => unit = "draw"
-
-type animal =
- | MyFloat(float)
- | MyString(string)
-
-let betterDraw = (animal) =>
- switch animal {
- | MyFloat(f) => draw(f)
- | MyString(s) => draw(s)
- }
-
-betterDraw(MyFloat(1.5))
-```
-```js
-var MyLibrary = require("myLibrary");
-
-function betterDraw(animal) {
- MyLibrary.draw(animal._0);
-}
-
-betterDraw({
- TAG: "MyFloat",
- _0: 1.5
- });
-```
-
-
-
-**Try not to do that**, as this generates extra noisy output. Instead, use the `@unboxed` attribute to guide ReScript to generate more efficient code:
-
-
-
-
-```res example
-// reserved for internal usage
-@module("myLibrary") external draw : 'a => unit = "draw"
-
-@unboxed
-type animal =
- | MyFloat(float)
- | MyString(string)
-
-let betterDraw = (animal) =>
- switch animal {
- | MyFloat(f) => draw(f)
- | MyString(s) => draw(s)
- }
-
-betterDraw(MyFloat(1.5))
-```
-```js
-var MyLibrary = require("myLibrary");
-
-function betterDraw(animal) {
- MyLibrary.draw(animal);
-}
-
-MyLibrary.draw(1.5);
-```
-
-
-
-Alternatively, define two `external`s that both compile to the same JS call:
-
-
-
-```res example
-@module("myLibrary") external drawFloat: float => unit = "draw"
-@module("myLibrary") external drawString: string => unit = "draw"
-```
-```js
-// Empty output
-```
-
-
-
-ReScript also provides [a few other ways](bind-to-js-function.md#modeling-polymorphic-function) to do this.
-
-### Variant Types Are Found By Field Name
-
-Please refer to this [record section](record#tips--tricks). Variants are the same: a function can't accept an arbitrary constructor shared by two different variants. Again, such feature exists; it's called a polymorphic variant. We'll talk about this in the future =).
-
-## Design Decisions
-
-Variants, in their many forms (polymorphic variant, open variant, GADT, etc.), are likely _the_ feature of a type system such as ReScript's. The aforementioned `option` variant, for example, obliterates the need for nullable types, a major source of bugs in other languages. Philosophically speaking, a problem is composed of many possible branches/conditions. Mishandling these conditions is the majority of what we call bugs. **A type system doesn't magically eliminate bugs; it points out the unhandled conditions and asks you to cover them**\*. The ability to model "this or that" correctly is crucial.
-
-For example, some folks wonder how the type system can safely eliminate badly formatted JSON data from propagating into their program. They don't, not by themselves! But if the parser returns the `option` type `None | Some(actualData)`, then you'd have to handle the `None` case explicitly in later call sites. That's all there is.
-
-Performance-wise, a variant can potentially tremendously speed up your program's logic. Here's a piece of JavaScript:
-
-```js
-let data = 'dog'
-function logData(data) {
- if (data === 'dog') {
- ...
- } else if (data === 'cat') {
- ...
- } else if (data === 'bird') {
- ...
- }
-}
-logData(data)
-```
-
-There's a linear amount of branch checking here (`O(n)`). Compare this to using a ReScript variant:
-
-
-
-```res example
-type animal = Dog | Cat | Bird
-let data = Dog
-let logData = data => {
- switch data {
- | Dog => Console.log("Wof")
- | Cat => Console.log("Meow")
- | Bird => Console.log("Kashiiin")
- }
-}
-logData(data)
-
-```
-```js
-function logData(data) {
- switch (data) {
- case "Dog" :
- console.log("Wof");
- return;
- case "Cat" :
- console.log("Meow");
- return;
- case "Bird" :
- console.log("Kashiiin");
- return;
- }
-}
-
-logData("Dog");
-```
-
-
-
-The compiler sees the variant, then
-
-1. conceptually turns them into `type animal = "Dog" | "Cat" | "Bird"`
-2. compiles `switch` to a constant-time jump table (`O(1)`).
diff --git a/pages/docs/manual/v12.0.0/warning-numbers.mdx b/pages/docs/manual/v12.0.0/warning-numbers.mdx
deleted file mode 100644
index 1b5f37eaf..000000000
--- a/pages/docs/manual/v12.0.0/warning-numbers.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "Warning Numbers"
-description: "Available compiler warning numbers in ReScript"
-canonical: "/docs/manual/v12.0.0/warning-numbers"
----
-
-import { make as WarningTable } from "src/components/WarningTable.mjs";
-
-# Warning Numbers
-
-You can configure which warnings the ReScript compiler generates
-[in the build configuration](/docs/manual/next/build-configuration#warnings) or
-using the [`@warning()`](/syntax-lookup#expression-warning-decorator) or the [`@@warning()`](/syntax-lookup#module-warning-decorator) decorator.
-
-
diff --git a/pages/docs/v12.0.0.js b/pages/docs/v12.0.0.js
deleted file mode 100644
index 8762e51e7..000000000
--- a/pages/docs/v12.0.0.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import make from "src/DocsOverview.mjs";
-
-export default make;
diff --git a/pages/index.mdx b/pages/index.mdx
deleted file mode 100644
index e69de29bb..000000000
diff --git a/pages/try.js b/pages/try.js
deleted file mode 100644
index f9bbdf9fc..000000000
--- a/pages/try.js
+++ /dev/null
@@ -1 +0,0 @@
-export { getStaticProps, default } from "src/Try.mjs";
diff --git a/scripts/extract-tocs.mjs b/scripts/extract-tocs.mjs
index 00055a9f7..c075f0458 100644
--- a/scripts/extract-tocs.mjs
+++ b/scripts/extract-tocs.mjs
@@ -2,10 +2,9 @@
* This script is used for generating the table of contents for prose
* text documents
*/
-import { unified } from "unified";
+import fs from "fs";
import glob from "glob";
import path from "path";
-import fs from "fs";
import { URL } from "url";
import { defaultProcessor } from "./markdown.js";
@@ -161,26 +160,6 @@ const createReactToc = (version) => {
fs.writeFileSync(TARGET_FILE, JSON.stringify(toc), "utf8");
};
-const createCommunityToc = () => {
- const MD_DIR = path.join(__dirname, "../pages/community");
- const SIDEBAR_JSON = path.join(__dirname, "../data/sidebar_community.json");
- const TARGET_FILE = path.join(__dirname, "../index_data/community_toc.json");
-
- const sidebarJson = JSON.parse(fs.readFileSync(SIDEBAR_JSON));
-
- const FILE_ORDER = Object.values(sidebarJson).reduce((acc, items) => {
- return acc.concat(items);
- }, []);
-
- const files = glob.sync(`${MD_DIR}/*.?(js|md?(x))`);
- const ordered = orderFiles(files, FILE_ORDER);
-
- const result = ordered.map((filepath) => processFile(filepath, sidebarJson));
- const toc = createTOC(result);
-
- fs.writeFileSync(TARGET_FILE, JSON.stringify(toc), "utf8");
-};
-
/*
const debugToc = () => {
const MD_DIR = path.join(__dirname, "../pages/docs/manual/latest");
@@ -196,9 +175,8 @@ const debugToc = () => {
debugToc();
*/
-let manualVersions = ["v12.0.0", "v11.0.0", "v10.0.0", "v9.0.0", "v8.0.0"];
+let manualVersions = ["v11.0.0", "v10.0.0", "v9.0.0", "v8.0.0"];
let reactManualVersions = ["latest", "v0.10.0", "v0.11.0"];
manualVersions.forEach(createManualToc);
reactManualVersions.forEach(createReactToc);
-createCommunityToc();
diff --git a/scripts/generate_llms.res b/scripts/generate_llms.res
deleted file mode 100644
index 951d31b36..000000000
--- a/scripts/generate_llms.res
+++ /dev/null
@@ -1,137 +0,0 @@
-let readMarkdownFile = (filePath: string): string => {
- let fileContent = Node.Fs.readFileSync2(filePath, "utf8")
- fileContent
-}
-
-let rec collectFiles = (dirPath: string): array => {
- let entries = Node.Fs.readdirSync(dirPath)
- entries->Array.reduce([], (acc, entry) => {
- let fullPath = Node.Path.join([dirPath, entry])
- let stats = Node.Fs.statSync(fullPath)
- switch stats["isDirectory"]() {
- | true => acc->Array.concat(collectFiles(fullPath))
- | false => {
- acc->Array.push(fullPath)
- acc
- }
- }
- })
-}
-
-let clearFile = (filePath: string): unit => {
- Node.Fs.writeFileSync(filePath, "")
-}
-
-let createDirectoryIfNotExists = (dirPath: string): unit => {
- if !Node.Fs.existsSync(dirPath) {
- Node.Fs.mkdirSync(dirPath)
- }
-}
-
-let removeCodeTabTags = (content: string): string => {
- let regex = RegExp.fromString("[\\s\\S]*?", ~flags="g")
- String.replaceRegExp(content, regex, "")
-}
-
-let removeCodeBlocks = (content: string): string => {
- let regex = RegExp.fromString("```[a-zA-Z]+\\s*[\\s\\S]*?```", ~flags="g")
- String.replaceRegExp(content, regex, "")
-}
-
-let removeFileTitle = (content: string): string => {
- let regex = RegExp.fromString("---\ntitle[\\s\\S]*?---", ~flags="g")
- String.replaceRegExp(content, regex, "")
-}
-
-let removeUnnecessaryBreaks = (content: string): string => {
- let regex = RegExp.fromString("^\n{2,}", ~flags="g")
- String.replaceRegExp(content, regex, "")
-}
-
-let removeToDos = (content: string): string => {
- let regex = RegExp.fromString("", ~flags="g")
- String.replaceRegExp(content, regex, "")
-}
-
-let fillContentWithVersion = (content: string, version: string): string => {
- let regex = RegExp.fromString("", ~flags="g")
- String.replaceRegExp(content, regex, version)
-}
-
-let createFullFile = (content: string, filePath: string): unit => {
- Node.Fs.appendFileSync(filePath, content ++ "\n", "utf8")
-}
-
-let createSmallFile = (content: string, filePath: string): unit => {
- let smallContent =
- content
- ->removeCodeTabTags
- ->removeFileTitle
- ->removeToDos
- ->removeCodeBlocks
- ->removeUnnecessaryBreaks
- Node.Fs.appendFileSync(filePath, smallContent, "utf8")
-}
-
-let createLlmsFiles = (version: string, docsDirectory: string, llmsDirectory: string): unit => {
- let mdxFileTemplatePath = llmsDirectory->Node.Path.join2("template.mdx")
- let mdxFilePath = docsDirectory->Node.Path.join2(version)->Node.Path.join2("llms.mdx")
- let txtFileTemplatePath = llmsDirectory->Node.Path.join2("template.txt")
- let txtFilePath = llmsDirectory->Node.Path.join2(version)->Node.Path.join2("llms.txt")
-
- Node.Fs.writeFileSync(
- mdxFilePath,
- readMarkdownFile(mdxFileTemplatePath)->fillContentWithVersion(version),
- )
-
- Node.Fs.writeFileSync(
- txtFilePath,
- readMarkdownFile(txtFileTemplatePath)->fillContentWithVersion(version),
- )
-}
-
-let processVersions = (
- versions: array,
- docsDirectory: string,
- llmsDirectory: string,
-): unit => {
- let fullFileName = "llm-full.txt"
- let smallFileName = "llm-small.txt"
-
- versions->Array.forEach(version => {
- let versionDir = docsDirectory->Node.Path.join2(version)
- let llmsDir = llmsDirectory->Node.Path.join2(version)
- let fullFilePath = llmsDir->Node.Path.join2(fullFileName)
- let smallFilePath = llmsDir->Node.Path.join2(smallFileName)
-
- createDirectoryIfNotExists(llmsDir)
- clearFile(fullFilePath)
- clearFile(smallFilePath)
-
- createLlmsFiles(version, docsDirectory, llmsDirectory)
-
- versionDir
- ->collectFiles
- ->Array.forEach(filePath => {
- if String.endsWith(filePath, ".mdx") {
- let content = readMarkdownFile(filePath)
-
- content->createFullFile(fullFilePath)
-
- content->createSmallFile(smallFilePath)
- }
- })
- })
-}
-
-let manualVersions = ["v12.0.0", "v11.0.0"]
-let reactManualVersions = ["latest", "v0.10.0", "v0.11.0"]
-
-let manualDocsDirectory = "pages/docs/manual"
-let reactDocsDirectory = "pages/docs/react"
-
-let manualLlmsDirectory = "public/llms/manual"
-let reactLlmsDirectory = "public/llms/react"
-
-processVersions(manualVersions, manualDocsDirectory, manualLlmsDirectory)
-processVersions(reactManualVersions, reactDocsDirectory, reactLlmsDirectory)
diff --git a/scripts/generate_resources.res b/scripts/generate_resources.res
deleted file mode 100644
index d504c14dd..000000000
--- a/scripts/generate_resources.res
+++ /dev/null
@@ -1,50 +0,0 @@
-/** This is the list of community content we want to generate. */
-/** If you have content you would like to add, please open up a PR adding the link to this list and then run `npm run generate-resources` */
-let urls = [
- // 2025
- "https://dev.to/dzakh/javascript-schema-library-from-the-future-5420",
- "https://www.youtube.com/watch?v=yKl2fSdnw7w",
- "https://github.com/rescript-lang/awesome-rescript", // regardless of age this seems like it should always be near the top
- // 2024
- "https://www.youtube.com/watch?v=MC-dbM-GEuw",
- "https://dev.to/jderochervlk/rescript-has-come-a-long-way-maybe-its-time-to-switch-from-typescript-29he",
- "https://www.youtube.com/watch?v=f0gDMjuaCZo",
- "https://www.geldata.com/blog/rescript-and-edgedb",
- "https://www.youtube.com/watch?v=37FY6a-zY20",
- // 2023
- "https://dev.to/cometkim/when-and-where-to-use-rescript-the-rescript-happy-path-47ni",
- // 2022
- "https://www.greyblake.com/blog/from-typescript-to-rescript/",
- "https://dev.to/zth/getting-rid-of-your-dead-code-in-rescript-3mba",
- "https://www.youtube.com/watch?v=KDL-kRgilkQ",
- "https://dev.to/srikanthkyatham/rescript-react-error-boundary-usage-3b05",
- // "https://www.daggala.com/belt_vs_js_array_in_rescript/" I think we should exclude this one since it's related to API we are deprecating
- // 2021
- "https://fullsteak.dev/posts/fullstack-rescript-architecture-overview",
- "https://scalac.io/blog/rescript-for-react-development/",
- "https://yangdanny97.github.io/blog/2021/07/09/Migrating-to-Rescript",
- "https://alexfedoseev.com/blog/post/responsive-images-and-cumulative-layout-shift",
- "https://dev.to/ryyppy/rescript-records-nextjs-undefined-and-getstaticprops-4890",
-]
-
-let generate = async () => {
- let filePath = "data/resources.json"
- let metaData = await MetaTagsApi.getMetaTags(urls)
-
- let fileContent = `${metaData
- ->Array.map(i =>
- {
- "title": `${i.title->Option.getOr("")}`,
- "description": `${i.description->Option.getOr("")}`,
- "image": `${i.image->Option.getOr("")}`,
- "url": `${i.url}`,
- }
- )
- ->JSON.stringifyAny
- ->Option.getOr("[]")}
- `
-
- Node.Fs.writeFileSync(filePath, fileContent)
-}
-
-await generate()
diff --git a/src/DocsOverview.res b/src/DocsOverview.res
index b847d148f..37ccd6922 100644
--- a/src/DocsOverview.res
+++ b/src/DocsOverview.res
@@ -25,7 +25,7 @@ let default = (~showVersionSelect=true) => {
let ecosystem = [
("Package Index", "/packages"),
- ("rescript-react", "/docs/react/latest/introduction"),
+ ("rescript-react", "/docs/v0.11.0/latest/introduction"),
("GenType", `/docs/manual/${version}/typescript-integration`),
("Reanalyze", "https://github.com/rescript-lang/reanalyze"),
]
diff --git a/src/Playground.res b/src/Playground.res
deleted file mode 100644
index d6aada34d..000000000
--- a/src/Playground.res
+++ /dev/null
@@ -1,1857 +0,0 @@
-%%raw(`
-if (typeof window !== "undefined" && typeof window.navigator !== "undefined") {
- require("codemirror/mode/javascript/javascript");
- require("codemirror/addon/scroll/simplescrollbars");
- require("plugins/cm-rescript-mode");
- require("plugins/cm-reason-mode");
-}
-`)
-
-open CompilerManagerHook
-module Api = RescriptCompilerApi
-
-type layout = Column | Row
-type tab = JavaScript | Output | Problems | Settings
-let breakingPoint = 1024
-
-module DropdownSelect = {
- @react.component
- let make = (~onChange, ~name, ~value, ~disabled=false, ~children) => {
- let opacity = disabled ? " opacity-50" : ""
-
- }
-}
-
-module ToggleSelection = {
- module SelectionOption = {
- @react.component
- let make = (~label, ~isActive, ~disabled, ~onClick) => {
-
- }
- }
-
- @react.component
- let make = (
- ~onChange: 'a => unit,
- ~values: array<'a>,
- ~toLabel: 'a => string,
- ~selected: 'a,
- ~disabled=false,
- ) => {
- // We make sure that there's at least one element in the array
- // otherwise we run into undefined behavior
- let values = if Array.length(values) === 0 {
- [selected]
- } else {
- values
- }
-
-
- {values
- ->Array.map(value => {
- let label = toLabel(value)
- let isActive = value === selected
- let onClick = _event => {
- if !isActive {
- onChange(value)
- }
- }
-
-
- })
- ->React.array}
-
- )
- ->React.array
-
- // The way the UI is currently designed, there shouldn't be a case where fromLang !== toLang.
- // We keep both cases though in case we change things later
- let msg = if fromLang === toLang {
- let langStr = Api.Lang.toString(toLang)
- `The code is not valid ${langStr} syntax.`
- } else {
- let fromStr = Api.Lang.toString(fromLang)
- let toStr = Api.Lang.toString(toLang)
- `Could not convert from "${fromStr}" to "${toStr}" due to malformed syntax:`
- }
-
-
- {React.string(
- "The compiler bundle API returned a result that couldn't be interpreted. Please open an issue on our ",
- )}
-
- {React.string("issue tracker")}
-
- {React.string(".")}
-
-
- })
-
- <> {body->React.array} >
- }
-}
-
-/**
-The initial content is somewhat based on the compiler version.
-If we are handling a version that's beyond 10.1, we want to make
-sure we are using an example that includes a JSX pragma to
-inform the user that you are able to switch between jsx 3 / jsx 4
-and the different jsx modes (classic and automatic).
-*/
-module InitialContent = {
- let original = `module Button = {
- @react.component
- let make = (~count) => {
- let times = switch count {
- | 1 => "once"
- | 2 => "twice"
- | n => n->Belt.Int.toString ++ " times"
- }
- let text = \`Click me $\{times\}\`
-
-
- }
-}
-`
-
- let since_10_1 = `module CounterMessage = {
- @react.component
- let make = (~count, ~username=?) => {
- let times = switch count {
- | 1 => "once"
- | 2 => "twice"
- | n => Belt.Int.toString(n) ++ " times"
- }
-
- let name = switch username {
- | Some("") => "Anonymous"
- | Some(name) => name
- | None => "Anonymous"
- }
-
-
{React.string(\`Hello \$\{name\}, you clicked me \` ++ times)}
- }
-}
-
-module App = {
- @react.component
- let make = () => {
- let (count, setCount) = React.useState(() => 0)
- let (username, setUsername) = React.useState(() => "Anonymous")
-
-
- {React.string(
- "You are currently looking at the v12 docs, which are still a work in progress. If you miss anything, you may find it in the older v11 docs ",
- )}
- {React.string("here")}
- {React.string(".")}
-