diff --git a/.github/workflows/tour-page.yml b/.github/workflows/tour-page.yml new file mode 100644 index 00000000..0ccc53ee --- /dev/null +++ b/.github/workflows/tour-page.yml @@ -0,0 +1,49 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy language tour to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ['main'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - uses: pnpm/action-setup@v4 + with: + version: 9 + - run: | + cd moonbit-tour + pnpm install + pnpm build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './moonbit-tour/dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/moonbit-tour/.gitignore b/moonbit-tour/.gitignore new file mode 100644 index 00000000..2f3a7aa7 --- /dev/null +++ b/moonbit-tour/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +**/target diff --git a/moonbit-tour/.nvmrc b/moonbit-tour/.nvmrc new file mode 100644 index 00000000..e4f846dd --- /dev/null +++ b/moonbit-tour/.nvmrc @@ -0,0 +1 @@ +v22.10.0 diff --git a/moonbit-tour/.prettierignore b/moonbit-tour/.prettierignore new file mode 100644 index 00000000..aef159e2 --- /dev/null +++ b/moonbit-tour/.prettierignore @@ -0,0 +1,4 @@ +assets +public +tour +pnpm-lock.yaml \ No newline at end of file diff --git a/moonbit-tour/.prettierrc b/moonbit-tour/.prettierrc new file mode 100644 index 00000000..490e839f --- /dev/null +++ b/moonbit-tour/.prettierrc @@ -0,0 +1,3 @@ +{ + "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-organize-imports"] +} diff --git a/moonbit-tour/README.md b/moonbit-tour/README.md new file mode 100644 index 00000000..35bd9931 --- /dev/null +++ b/moonbit-tour/README.md @@ -0,0 +1,42 @@ +# MoonBit Language Tour + +An interactive tour to learn the MoonBit programming language. + +## Get started + +```sh +pnpm install +pnpm build +pnpm preview +``` + +open to view the tour. + +## How to add new tour + +### Add new lesson + +1. Create a new folder under the chapter folder following the naming convention `lesson_` (count start from 1). +1. Write the lesson content in `index.md` and lesson code in `index.mbt` under the created folder. + +To see the render result while writing lesson on the fly, follow the instruction below: + +1. Setup development environment. + + ```sh + pnpm install + pnpm dev + ``` + +1. Write the lesson content in `tour/index.md` and lesson code in `tour/index.mbt`. You can see the render result in + +1. After you finish writing the lesson, copy `tour/index.md` and `tour/index.mbt` to the corresponding lesson folder. + +### Add new chapter + +1. Create a new folder under `tour` following the naming convention `chapter_`. +1. Add new lessons following the instruction above. + +## Credit + +This project is highly inspired by [Gleam Language Tour](https://github.com/gleam-lang/language-tour). diff --git a/moonbit-tour/assets/fonts/inter-v18-latin-700.woff2 b/moonbit-tour/assets/fonts/inter-v18-latin-700.woff2 new file mode 100644 index 00000000..12b51d77 Binary files /dev/null and b/moonbit-tour/assets/fonts/inter-v18-latin-700.woff2 differ diff --git a/moonbit-tour/assets/fonts/inter-v18-latin-700italic.woff2 b/moonbit-tour/assets/fonts/inter-v18-latin-700italic.woff2 new file mode 100644 index 00000000..46172807 Binary files /dev/null and b/moonbit-tour/assets/fonts/inter-v18-latin-700italic.woff2 differ diff --git a/moonbit-tour/assets/fonts/inter-v18-latin-italic.woff2 b/moonbit-tour/assets/fonts/inter-v18-latin-italic.woff2 new file mode 100644 index 00000000..ec07ef7d Binary files /dev/null and b/moonbit-tour/assets/fonts/inter-v18-latin-italic.woff2 differ diff --git a/moonbit-tour/assets/fonts/inter-v18-latin-regular.woff2 b/moonbit-tour/assets/fonts/inter-v18-latin-regular.woff2 new file mode 100644 index 00000000..33002f12 Binary files /dev/null and b/moonbit-tour/assets/fonts/inter-v18-latin-regular.woff2 differ diff --git a/moonbit-tour/assets/syntax/moonbit.tmLanguage.json b/moonbit-tour/assets/syntax/moonbit.tmLanguage.json new file mode 100644 index 00000000..31e8ca28 --- /dev/null +++ b/moonbit-tour/assets/syntax/moonbit.tmLanguage.json @@ -0,0 +1,322 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "moonbit", + "scopeName": "source.moonbit", + "fileTypes": ["mbt"], + "patterns": [ + { + "include": "#strings" + }, + { + "include": "#comments" + }, + { + "include": "#constants" + }, + { + "include": "#keywords" + }, + { + "include": "#functions" + }, + { + "include": "#support" + }, + { + "include": "#types" + }, + { + "include": "#modules" + }, + { + "include": "#variables" + } + ], + "repository": { + "support": { + "patterns": [ + { + "name": "support.class.moonbit", + "match": "\\b(Eq|Compare|Hash|Show|Default|ToJson|FromJson)\\b" + } + ] + }, + "keywords": { + "patterns": [ + { + "name": "keyword.control.moonbit", + "match": "\\b(guard|if|while|break|continue|return|try|catch|except|raise|match|else|as|in|loop|for)\\b" + }, + { + "name": "keyword.moonbit", + "match": "\\b(type!|(type|typealias|let|const|enum|struct|import|trait|derive|test|impl|with)\\b)" + }, + { + "name": "variable.language.moonbit", + "match": "\\b(self)\\b" + }, + { + "name": "storage.modifier.moonbit", + "match": "\\b(mut|pub|priv|readonly|extern)\\b" + }, + { + "name": "storage.type.function.arrow.moonbit", + "match": "->" + }, + { + "name": "storage.type.function.arrow.moonbit", + "match": "=>" + }, + { + "name": "keyword.operator.assignment.moonbit", + "match": "=" + }, + { + "name": "keyword.operator.other.moonbit", + "match": "\\|>" + }, + { + "name": "keyword.operator.comparison.moonbit", + "match": "(===|==|!=|>=|<=|(?|<)" + }, + { + "name": "keyword.operator.logical.moonbit", + "match": "(\\bnot\\b|&&|\\|\\|)" + }, + { + "name": "keyword.operator.math.moonbit", + "match": "(\\+|-(?!>)|\\*|%|/)" + } + ] + }, + "comments": { + "patterns": [ + { + "name": "comment.line", + "match": "//.*" + } + ] + }, + "interpolation": { + "patterns": [ + { + "begin": "\\\\{", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.moonbit" + } + }, + "contentName": "source.moonbit", + "end": "}", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.moonbit" + } + }, + "patterns": [ + { + "include": "$self" + } + ], + "name": "meta.embedded.line.moonbit" + } + ] + }, + "escape": { + "patterns": [ + { + "match": "\\\\[0\\\\tnrb\"']", + "name": "constant.character.escape.moonbit" + }, + { + "name": "constant.character.escape.moonbit", + "match": "\\\\x[0-9a-fA-F]{2}" + }, + { + "name": "constant.character.escape.moonbit", + "match": "\\\\o[0-3][0-7]{2}" + }, + { + "match": "\\\\u[0-9a-fA-F]{4}", + "name": "constant.character.escape.unicode.moonbit" + }, + { + "match": "\\\\u{[0-9a-fA-F]*}", + "name": "constant.character.escape.unicode.moonbit" + } + ] + }, + "strings": { + "patterns": [ + { + "name": "string.line", + "match": "(#\\|).*", + "captures": { + "1": { + "name": "keyword.operator.other.moonbit" + } + } + }, + { + "name": "string.line", + "match": "(\\$\\|)(.*)", + "captures": { + "1": { + "name": "keyword.operator.other.moonbit" + }, + "2": { + "patterns": [ + { + "include": "#escape" + }, + { + "include": "#interpolation" + } + ] + } + } + }, + { + "name": "string.quoted.single.moonbit", + "begin": "'", + "end": "'", + "patterns": [ + { + "include": "#escape" + } + ] + }, + { + "name": "string.quoted.double.moonbit", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "include": "#escape" + }, + { + "include": "#interpolation" + } + ] + } + ] + }, + "constants": { + "patterns": [ + { + "name": "constant.numeric.moonbit", + "match": "\\b\\d(\\d|_)*(?!\\.)(U)?(L)?\\b" + }, + { + "name": "constant.numeric.moonbit", + "match": "(?<=\\.)\\d((?=\\.)|\\b)" + }, + { + "name": "constant.numeric.moonbit", + "match": "\\b\\d+(\\.)\\d+\\b" + }, + { + "name": "constant.numeric.moonbit", + "match": "\\b0[XxOoBb][\\dAaBbCcDdEeFf]+(U)?(L)?\\b" + }, + { + "name": "constant.language.moonbit", + "match": "\\b(true|false|\\(\\))\\b" + } + ] + }, + "modules": { + "patterns": [ + { + "name": "entity.name.namespace.moonbit", + "match": "@[A-Za-z][A-Za-z0-9_/]*" + } + ] + }, + "variables": { + "patterns": [ + { + "comment": "variables", + "name": "variable.other.moonbit", + "match": "\\b(? + %TITLE% + + `; + +const generatePlugin = (): vite.Plugin => { + return { + name: "generate-tour", + async generateBundle(options, bundle) { + const template = await fs.readFile("index.html", "utf8"); + const chapters = await scanTour(); + const lessons = chapters.flatMap((c) => c.lessons); + for (const [i, l] of lessons.entries()) { + let res = template + .replace("%HEAD%", head) + .replace("%TITLE%", `${l.lesson} - MoonBit Language Tour`) + .replace("%MARKDOWN%", l.markdown) + .replace("%CODE%", l.code); + if (i === 0) { + res = res.replace("%BACK%", `Back`); + } + if (i - 1 >= 0) { + res = res.replace( + "%BACK%", + `Back`, + ); + } + if (i + 1 < lessons.length) { + res = res.replace( + "%NEXT%", + `Next`, + ); + } + if (i === lessons.length - 1) { + res = res.replace( + "%NEXT%", + `Next`, + ); + } + this.emitFile({ + type: "asset", + fileName: path.join(slug(l), "index.html"), + source: res, + }); + } + const toc = generateTOC(chapters); + this.emitFile({ + type: "asset", + fileName: path.join("table-of-contents", "index.html"), + source: template + .replace("%HEAD%", head) + .replace("%TITLE%", `Table of Contents - MoonBit Language Tour`) + .replace("%MARKDOWN%", toc.markdown) + .replace("%CODE%", toc.code) + .replace("%BACK%", `Back`) + .replace("%NEXT%", `Next`), + }); + }, + }; +}; + +export default generatePlugin; diff --git a/moonbit-tour/dev/index-plugin.ts b/moonbit-tour/dev/index-plugin.ts new file mode 100644 index 00000000..d68896c0 --- /dev/null +++ b/moonbit-tour/dev/index-plugin.ts @@ -0,0 +1,34 @@ +import * as fs from "fs/promises"; +import * as vite from "vite"; +import { BASE } from "./const"; +import * as remark from "./remark"; +import { scanTour, slug } from "./scan-tour"; +import * as shiki from "./shiki"; + +const indexPlugin = (): vite.Plugin => { + return { + name: "dev-index-plugin", + async transformIndexHtml(html) { + const md = await fs.readFile("tour/index.md", "utf8"); + const mbt = await fs.readFile("tour/index.mbt", "utf8"); + const mdHtml = remark.mdToHtml(md); + const mbtHtml = shiki.renderMoonBitCode(mbt); + const lessons = (await scanTour()).flatMap((c) => c.lessons); + return html + .replace( + "%HEAD%", + ` + moonbit tour`, + ) + .replace("%MARKDOWN%", mdHtml) + .replace("%CODE%", mbtHtml) + .replace("%BACK%", `Back`) + .replace( + "%NEXT%", + `Next`, + ); + }, + }; +}; + +export default indexPlugin; diff --git a/moonbit-tour/dev/remark.ts b/moonbit-tour/dev/remark.ts new file mode 100644 index 00000000..0418eacd --- /dev/null +++ b/moonbit-tour/dev/remark.ts @@ -0,0 +1,16 @@ +import rehypeStringify from "rehype-stringify"; +import remarkParse from "remark-parse"; +import remarkRehype from "remark-rehype"; +import { unified } from "unified"; + +const processor = unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeStringify); + +function mdToHtml(md: string): string { + const file = processor.processSync(md); + return String(file); +} + +export { mdToHtml }; diff --git a/moonbit-tour/dev/scan-tour.ts b/moonbit-tour/dev/scan-tour.ts new file mode 100644 index 00000000..c0352e2d --- /dev/null +++ b/moonbit-tour/dev/scan-tour.ts @@ -0,0 +1,82 @@ +import fs from "fs/promises"; +import path from "path"; +import { BASE } from "./const"; +import * as remark from "./remark"; +import * as shiki from "./shiki"; + +type Chapter = { + chapter: string; + lessons: Lesson[]; +}; + +type Lesson = { + chapter: string; + lesson: string; + lessonIndex: number; + lessonsLength: number; + markdown: string; + code: string; +}; + +async function dirs(path: string) { + return (await fs.readdir(path, { withFileTypes: true })) + .filter((i) => i.isDirectory()) + .sort((a, b) => { + const na = +a.name.slice(a.name.search(/\d+/), a.name.search("_")); + const nb = +b.name.slice(b.name.search(/\d+/), b.name.search("_")); + return na - nb; + }); +} + +async function scanTour(): Promise { + const chapterFolders = await dirs("tour"); + const chapters: Chapter[] = []; + for (const c of chapterFolders) { + const chapter = c.name.split("_").slice(1).join(" "); + const ds = await dirs(path.join(c.parentPath, c.name)); + const lessons: Lesson[] = await Promise.all( + ds.map(async (d, i, arr) => { + const lesson = d.name.split("_").slice(1).join(" "); + const mdPath = path.join(d.parentPath, d.name, "index.md"); + const mbtPath = path.join(d.parentPath, d.name, "index.mbt"); + const md = await fs.readFile(mdPath, "utf8"); + const mbt = await fs.readFile(mbtPath, "utf8"); + return { + chapter, + lesson, + lessonIndex: i, + lessonsLength: arr.length, + markdown: remark.mdToHtml(md), + code: shiki.renderMoonBitCode(mbt), + }; + }), + ); + chapters.push({ chapter, lessons }); + } + return chapters; +} + +function slug(lesson: Lesson): string { + return `${lesson.chapter.replaceAll(" ", "-")}/${lesson.lesson.replaceAll(" ", "-")}`; +} + +function generateTOC(chapters: Chapter[]): { markdown: string; code: string } { + const lines: string[] = []; + lines.push(`# Table of Contents`); + for (const c of chapters) { + lines.push(`## ${c.chapter}`); + for (const l of c.lessons) { + lines.push(`- [${l.lesson}](${BASE}/${slug(l)}/index.html)`); + } + } + return { + markdown: remark.mdToHtml(lines.join("\n")), + code: shiki.renderMoonBitCode(`fn main { + println("hello, world") +}`), + }; +} + +generateTOC(await scanTour()); + +export { generateTOC, scanTour, slug }; diff --git a/moonbit-tour/dev/shiki.ts b/moonbit-tour/dev/shiki.ts new file mode 100644 index 00000000..5fdfa814 --- /dev/null +++ b/moonbit-tour/dev/shiki.ts @@ -0,0 +1,20 @@ +import * as fs from "fs"; +import * as shiki from "shiki"; + +const moonbitLang = JSON.parse( + fs.readFileSync("assets/syntax/moonbit.tmLanguage.json", "utf8"), +); + +const highlighter = await shiki.createHighlighter({ + themes: ["light-plus"], + langs: [moonbitLang], +}); + +function renderMoonBitCode(code: string): string { + return highlighter.codeToHtml(code, { + lang: "moonbit", + theme: "light-plus", + }); +} + +export { renderMoonBitCode }; diff --git a/moonbit-tour/index.html b/moonbit-tour/index.html new file mode 100644 index 00000000..ccc2e739 --- /dev/null +++ b/moonbit-tour/index.html @@ -0,0 +1,60 @@ + + + + + + %HEAD% + + +
+ MoonBit Language Tour + MoonBit +
+ + + +
+
+
+
+
%MARKDOWN%
+ +
+
+
+ %CODE% +
+
+

+        
+
+ +
+ + diff --git a/moonbit-tour/package.json b/moonbit-tour/package.json new file mode 100644 index 00000000..f53ec973 --- /dev/null +++ b/moonbit-tour/package.json @@ -0,0 +1,35 @@ +{ + "name": "moonbit-tour", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "format": "prettier --write ." + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.15", + "@types/node": "^22.10.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.6.9", + "rehype-stringify": "^10.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.1", + "shiki": "^1.24.1", + "tailwindcss": "^3.4.16", + "tsx": "^4.19.2", + "typescript": "~5.6.2", + "unified": "^11.0.5", + "vite": "^6.0.1" + }, + "packageManager": "pnpm@9.14.4+sha512.c8180b3fbe4e4bca02c94234717896b5529740a6cbadf19fa78254270403ea2f27d4e1d46a08a0f56c89b63dc8ebfd3ee53326da720273794e6200fcf0d184ab", + "dependencies": { + "@moonbit/moonpad-monaco": "^0.1.202412060", + "monaco-editor-core": "^0.52.0" + } +} diff --git a/moonbit-tour/postcss.config.js b/moonbit-tour/postcss.config.js new file mode 100644 index 00000000..2aa7205d --- /dev/null +++ b/moonbit-tour/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/moonbit-tour/public/favicon.ico b/moonbit-tour/public/favicon.ico new file mode 100644 index 00000000..3aa86530 Binary files /dev/null and b/moonbit-tour/public/favicon.ico differ diff --git a/moonbit-tour/src/main.ts b/moonbit-tour/src/main.ts new file mode 100644 index 00000000..e0f73188 --- /dev/null +++ b/moonbit-tour/src/main.ts @@ -0,0 +1,144 @@ +import * as moonbitMode from "@moonbit/moonpad-monaco"; +import lspWorker from "@moonbit/moonpad-monaco/lsp-server.js?worker"; +import mooncWorker from "@moonbit/moonpad-monaco/moonc-worker.js?worker"; +import wasmUrl from "@moonbit/moonpad-monaco/onig.wasm?url"; +import * as monaco from "monaco-editor-core"; +import editorWorker from "monaco-editor-core/esm/vs/editor/editor.worker?worker"; +import "./style.css"; + +const moon = moonbitMode.init({ + onigWasmUrl: wasmUrl, + lspWorker: new lspWorker(), + mooncWorkerFactory: () => new mooncWorker(), +}); + +// @ts-ignore +self.MonacoEnvironment = { + getWorker() { + return new editorWorker(); + }, +}; + +const sunSvg = ` + + +`; + +const moonSvg = ` + + +`; + +let theme: "light" | "dark" = "light"; + +const themeButton = document.querySelector("#theme")!; + +function toggleTheme() { + if (theme === "light") { + theme = "dark"; + document.querySelector("html")?.classList.add("dark"); + monaco.editor.setTheme("dark-plus"); + themeButton.innerHTML = moonSvg; + } else { + theme = "light"; + document.querySelector("html")?.classList.remove("dark"); + monaco.editor.setTheme("light-plus"); + themeButton.innerHTML = sunSvg; + } +} + +themeButton.addEventListener("click", toggleTheme); + +function debounce

(f: (...args: P) => R, timeout: number) { + let timer: ReturnType | null = null; + return (...args: P) => { + if (timer !== null) { + clearTimeout(timer); + } + timer = setTimeout(() => { + f(...args); + timer = null; + }, timeout); + }; +} + +const codePre = document.querySelector(".shiki")!; + +const model = monaco.editor.createModel(codePre.textContent ?? "", "moonbit"); + +function lineTransformStream() { + let buffer = ""; + return new TransformStream({ + transform(chunk, controller) { + buffer += chunk; + const lines = buffer.split("\n"); + buffer = lines.pop() ?? buffer; + for (const line of lines) { + controller.enqueue(line); + } + }, + flush(controller) { + if (buffer.length > 0) { + controller.enqueue(buffer); + } + controller.terminate(); + }, + }); +} + +const output = document.querySelector("#output")!; + +async function run() { + const content = model.getValue(); + const result = await moon.compile({ libContents: [content] }); + switch (result.kind) { + case "success": { + const wasm = result.wasm; + const stream = await moon.run(wasm); + let buffer = ""; + await stream + .pipeThrough(new TextDecoderStream("utf-16")) + .pipeThrough(lineTransformStream()) + .pipeTo( + new WritableStream({ + write(chunk) { + buffer += `${chunk}\n`; + }, + }), + ); + output.textContent = buffer; + return; + } + case "error": { + console.error(result.diagnostics); + } + } +} + +model.onDidChangeContent(debounce(run, 100)); + +monaco.editor.onDidCreateEditor(() => { + codePre.remove(); +}); + +const editor = document.getElementById("editor")!; +editor.classList.remove("pl-[10px]", "text-[14px]"); +monaco.editor.create(editor, { + model, + lineNumbers: "off", + glyphMargin: false, + minimap: { + enabled: false, + }, + automaticLayout: true, + folding: false, + fontSize: 14, + scrollBeyondLastLine: false, + scrollbar: { + alwaysConsumeMouseWheel: false, + }, + fontFamily: "monospace", + theme: "light-plus", +}); + +run(); diff --git a/moonbit-tour/src/style.css b/moonbit-tour/src/style.css new file mode 100644 index 00000000..874f9bac --- /dev/null +++ b/moonbit-tour/src/style.css @@ -0,0 +1,36 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* inter-regular - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Inter"; + font-style: normal; + font-weight: 400; + src: url("../assets/fonts/inter-v18-latin-regular.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* inter-italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Inter"; + font-style: italic; + font-weight: 400; + src: url("../assets/fonts/inter-v18-latin-italic.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* inter-700 - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Inter"; + font-style: normal; + font-weight: 700; + src: url("../assets/fonts/inter-v18-latin-700.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* inter-700italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Inter"; + font-style: italic; + font-weight: 700; + src: url("../assets/fonts/inter-v18-latin-700italic.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} diff --git a/moonbit-tour/src/vite-env.d.ts b/moonbit-tour/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/moonbit-tour/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/moonbit-tour/tailwind.config.js b/moonbit-tour/tailwind.config.js new file mode 100644 index 00000000..62302281 --- /dev/null +++ b/moonbit-tour/tailwind.config.js @@ -0,0 +1,39 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: "selector", + content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}", "./dev/*.ts"], + theme: { + fontFamily: { + sans: [ + '"Inter"', + "ui-sans-serif", + "system-ui", + "sans-serif", + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + '"Noto Color Emoji"', + ], + mono: [ + "ui-monospace", + "SFMono-Regular", + "Menlo", + "Monaco", + "Consolas", + '"Liberation Mono"', + '"Courier New"', + "monospace", + ], + serif: [ + "ui-serif", + "Georgia", + "Cambria", + '"Times New Roman"', + "Times", + "serif", + ], + }, + extend: {}, + }, + plugins: [require("@tailwindcss/typography")], +}; diff --git a/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.mbt new file mode 100644 index 00000000..7cb3f842 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.mbt @@ -0,0 +1,13 @@ +fn main { + println("\nfor-in loop:") + let array = [1, 2, 3] + for element in array { + println("element: \{element}") + } + + println("\nfor-in loop for map:") + let map = { "key1": 1, "key2": 2, "key3": 3 } + for k, v in map { + println("key: \{k}, value: \{v}") + } +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.md b/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.md new file mode 100644 index 00000000..bc645314 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson10_for_in/index.md @@ -0,0 +1,20 @@ +# For-in loop + +It's cumbersome to write a for loop and manually decide the end condition. + +If you want to iterate over a collection, you can use the `for-in` loop. + +In the first for-in loop, we iterate over an array. The loop will bind each +element to the variable `element` in each iteration. + +We can also iterate over a map with key-value pairs. The second loop will bind +the key to the variable `k` and the value to the variable `v`. + +Which collections can be iterated over with a for-in loop? And when does the for-in loop support two variables? The for-in loop functionality actually depends on the API of the collection: + +- If the collection provides an `iter()` method to return a `Iter[V]` iterator, then the for-in loop can iterate over it. + +- If the collections provided `iter2()` methods to return a `Iter2[K,V]` iterator, you can use two variables to iterate over it. + +We will explain more details about the iterator in a later chapter. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.mbt new file mode 100644 index 00000000..1f2d63c6 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.mbt @@ -0,0 +1,17 @@ +struct Point { + x : Int + y : Int +} derive(Show) + +fn main { + // create a point + let point = { x: 3, y: 4 } + println("point: \{point}") + println("point.x: \{point.x}") + println("point.y: \{point.y}") + + // functional update + let point2 = {..point, x: 20} + println(point2) +} + diff --git a/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.md b/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.md new file mode 100644 index 00000000..ae451409 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson11_struct/index.md @@ -0,0 +1,18 @@ +# Struct + +Structs are new types composed of other types. + +In the example we define a struct `Point` with two fields, `x` and `y`, both of which are integers. + +We can create an instance of `Point` by using the `{ x: 3, y: 4}`. The structs name can be omitted since the compiler can infer it from the labels `x` and `y`. + +We can also add a `Point::` prefix to create an instance explicitly to disambiguate. + +Anologous to tuples, we can access the fields of a struct using the syntax `point.x`. + +The `derive(Show)` after the struct definition means that we can print the struct using the `println` function. + +The fields of a struct are immutable by default; they can't be changed after they are created. There is a syntax called *functional update* that allows you to create a new struct with some fields updated. + +We will learn how to make the fields mutable in the next lesson. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.mbt new file mode 100644 index 00000000..4be05ab2 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.mbt @@ -0,0 +1,12 @@ +struct MutPoint { + mut mx : Int + y : Int +} derive(Show) + +fn main { + let point = { mx: 3, y: 4 } + println("point: \{point}") + point.mx = 10 + println("point: \{point}") +} + diff --git a/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.md b/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.md new file mode 100644 index 00000000..0537b655 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson12_struct_mut_field/index.md @@ -0,0 +1,10 @@ +# Mutable fields in Struct + +Struct fields are immutable by default, but we can make them mutable by using the `mut` keyword in the field declaration. + +In previous lessons, we have learned that collections in MoonBit can be either mutable or immutable. This is achieved by using the `mut` keyword in their type declaration. + +The `MutPoint` struct in the example has two fields, mutable `mx` and immutable `y`. You can change the value of these fields via reassignment. + + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.mbt new file mode 100644 index 00000000..e7d2e8a4 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.mbt @@ -0,0 +1,29 @@ +enum Color { + Red + Green + Blue + RGB(Int, Int, Int) + CMYK(Int, Int, Int, Int) +} + +fn print_color(color : Color) -> Unit { + match color { + Red => println("Red") + Green => println("Green") + Blue => println("Blue") + // Take the three Int values from RGB and print them. + RGB(r, g, b) => println("RGB: \{r}, \{g}, \{b}") + CMYK(c, m, y, k) => println("CMYK: \{c}, \{m}, \{y}, \{k}") + } +} + +fn main { + let red = Red + let green = Color::Green + let blue = RGB(0, 0, 255) + let black = CMYK(0, 0, 0, 100) + print_color(red) + print_color(green) + print_color(blue) + print_color(black) +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.md b/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.md new file mode 100644 index 00000000..631c26ca --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson13_enum/index.md @@ -0,0 +1,12 @@ +# Enum + +Enum used to define a type by enumerating its possible values. Unlike traditional enums, MoonBit enums can have data associated with each enumeration. We call each enumeration a *enum constructor*. + +In this example, we define an enum `Color`, which has five enum constructors: `Red`, `Green`, `Blue`, `RGB`, and `CMYK`. The `Red`, `Green`, and `Blue` directly represent a color it described, while `RGB` and `CMYK` have data associated with them. + +Expressions like `Red` and `RGB(255,255,255)` are both instances of the `Color` type. To create an instance more explicitly, you can use `Color::Red`, similar to creating an instance of a struct. + +We use a bit of *pattern matching* to distinguish different *enum constructors* in `print_color`. It's a control flow similar to switch-case in C-like languages. Here is a slight difference: you can extract the associated data by giving them a name on the left of `=>`, and use them as variables on the right side. + +We will explore more powerful features of *pattern matching* in the next chapter. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson14_test/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson14_test/index.mbt new file mode 100644 index 00000000..8d16ea42 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson14_test/index.mbt @@ -0,0 +1,25 @@ +test { + assert_eq!(1, 1 + 2) + assert_false!(1 == 2) + assert_true!([1,2,3] == [1,2,3]) +} + +test { + inspect!(fib(5)) + inspect!([1,2,3,4].map(fib)) +} + +// Add test name to make it more descriptive. +test "fibonacci" { + inspect!(fib(5), content="5") + inspect!(fib(6), content="8") +} + +fn fib(n : Int) -> Int { + if n < 2 { + n + } else { + fib(n - 1) + fib(n - 2) + } +} + diff --git a/moonbit-tour/tour/chapter1_basic/lesson14_test/index.md b/moonbit-tour/tour/chapter1_basic/lesson14_test/index.md new file mode 100644 index 00000000..65770f29 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson14_test/index.md @@ -0,0 +1,17 @@ +# Test + +MoonBit has built-in testing support. There is no need to import or configure extra packages or tools; just use the test block and write the test code inside. + +**Note: this feature is not supported in this tour. You can try it in our [playground](try.moonbitlang.com) or in your terminal if the MoonBit toolchain is installed.** + +In the first test block, we test some properties using the built-in functions assert_eq, assert_false, and assert_true. By running `moon test` in the terminal or clicking the test button, the tests will be executed. + +## Maintaining Tests + +Sometimes it's tedious to maintain the expected value manually. MoonBit also supports built-in *snapshot tests*. Snapshot tests will run the tested code and store the expected result as a snapshot. + +In the second test block, we use the `inspect` function to test the result of `fib` and the array's `map` method. By running `moon test --update` in the terminal or clicking the `Update test` button, the result will be automatically inserted as the second argument. + +The next time you run the test, it will report any differences between the current result and the stored result. You can update the stored result to the new result by `--update` flag. + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson15_option/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson15_option/index.mbt new file mode 100644 index 00000000..4a1202fe --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson15_option/index.mbt @@ -0,0 +1,14 @@ +fn first_char(s : String) -> Option[Char] { + if s.length() == 0 { + None + } else { + Some(s[0]) + } +} + +fn main { + let c1 : Char? = first_char("hello") + let c2 : Option[Char] = first_char("") + println("\{c1.is_empty()}, \{c1.unwrap()}") + println("\{c2.is_empty()}, \{c2}") +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson15_option/index.md b/moonbit-tour/tour/chapter1_basic/lesson15_option/index.md new file mode 100644 index 00000000..a10c5964 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson15_option/index.md @@ -0,0 +1,13 @@ +# Option + +`Option[Char]` represents a `Char` value that may or may not be present. It is a common way to handle exceptional cases. + +- `None` means the value is missing. +- `Some(e)` is a wrapper that contains the value `e`. + +The `[Char]` part in the type is a type parameter, which means the value type in `Option` is `Char`. We can use `Option[String]`, `Option[Double]`, etc. We will cover generics later. + +The type annotation `Option[A]` can be shortened to `A?`. + +You can use `c1.is_empty()` to check if the value is missing and `c1.unwrap()` to get the value. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson16_result/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson16_result/index.mbt new file mode 100644 index 00000000..c283dc22 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson16_result/index.mbt @@ -0,0 +1,14 @@ +fn first_char(s : String) -> Result[Char, String] { + if s.length() == 0 { + Err("empty string") + } else { + Ok(s[0]) + } +} + +fn main { + let c1 = first_char("hello") + let c2 = first_char("") + println("\{c1.is_ok()}, \{c1}, \{c1.unwrap()}") + println("\{c2.is_err()}, \{c2}") +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson16_result/index.md b/moonbit-tour/tour/chapter1_basic/lesson16_result/index.md new file mode 100644 index 00000000..fb4d08fc --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson16_result/index.md @@ -0,0 +1,9 @@ +# Result + +Similar to `Option[Char]`, `Result[Char, String]` represents a `Char` value that may or may not be present. If not, it can contain an error message of type `String`. + +- `Err("error message")` means the value is missing, and the error message is provided. +- `Ok('h')` is a wrapper that contains the value `'h'`. + +The processing of `Option` and `Result` in examples so far is verbose and prone to bugs. To handle `Option` and `Result` values safely and cleanly, you can use pattern matching. It's recommended to use *error handling* to process errors effectively. These two topics will be covered in a later chapter. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.mbt new file mode 100644 index 00000000..8f57983d --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.mbt @@ -0,0 +1,5 @@ +fn main { + let a : Int = 10 + let b = 20 + println(a + b) +} \ No newline at end of file diff --git a/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.md b/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.md new file mode 100644 index 00000000..23fd115e --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson1_variable/index.md @@ -0,0 +1,8 @@ +# Variables + +The `let` keyword used to define a variables. + +The type of the variable can be annotated by using a colon followed by the type. +It is optional, if not provided the type will be inferred from the value. + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.mbt new file mode 100644 index 00000000..80999b6c --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.mbt @@ -0,0 +1,9 @@ +fn main { + let mut a = 10 + a = a + 1 + println(a) + + let b = 20 + // b = b + 1 + println(b) +} \ No newline at end of file diff --git a/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.md b/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.md new file mode 100644 index 00000000..2842f1f2 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson2_mutable-variable/index.md @@ -0,0 +1,9 @@ +# Mutable Variables + +Variables are immutable by default in MoonBit. + +You can add an extra `mut` keyword to make them mutable at the local level. + +If you uncomment the `b = b + 1`, you will get an error. + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.mbt new file mode 100644 index 00000000..d1a477ef --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.mbt @@ -0,0 +1,11 @@ +fn main { + let dec : Int = 1000000 + let dec2 : Int = 1_000_000 + let hex : Int = 0xFFFF + let oct = 0o777 + let bin = 0b1001 + + let num1 : Double = 3.14 + let num2 : Float = 3.14 +} + diff --git a/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.md b/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.md new file mode 100644 index 00000000..8b5398b0 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson3_numbers/index.md @@ -0,0 +1,10 @@ +# Numbers + +integers and floats are the most common types in MoonBit, it can be represented in decimal, hexadecimal, octal, and binary, and you can use the underscore to separate digits for better readability. +We call these *number literals*. + +The `0xFFFF` is a hexadecimal number, `0o777` is an octal number, `0b1010` is a binary number, +and `1_000_000` is a decimal number equivalent to `1000000`. + + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson4_function/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson4_function/index.mbt new file mode 100644 index 00000000..2007599f --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson4_function/index.mbt @@ -0,0 +1,12 @@ +fn add(a : Int, b : Int) -> Int { + a + b +} + +fn compute() -> Unit { + println(add(2, 40)) +} + +fn main { + compute() +} + diff --git a/moonbit-tour/tour/chapter1_basic/lesson4_function/index.md b/moonbit-tour/tour/chapter1_basic/lesson4_function/index.md new file mode 100644 index 00000000..8da5a5a2 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson4_function/index.md @@ -0,0 +1,14 @@ +# Function + +This example defines two functions, `add` and `compute`. + +The `add` function takes two arguments, `a` and `b`, and returns their sum. + +The `compute` function takes no arguments and returns nothing. +Its return type is `Unit`, which is used to represent the absence of a return value. + + + + + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson5_array/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson5_array/index.mbt new file mode 100644 index 00000000..14b05c70 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson5_array/index.mbt @@ -0,0 +1,22 @@ +fn main { + let arr1 : Array[Int] = [1, 2, 3, 4, 5] + let arr2 = Array::make(4,1) + + println(arr1.length()) // get the length of the array + println(arr1[1]) // get the second element of the array + + // We can also use the spread operator to concatenate arrays. + let arr3 = [..arr1, 1000, 2000, ..arr2, 3000, 4000] + println("spread arrays:") + println(arr3) + + let view : ArrayView[Int] = arr1[1:4] + println("array view:") + println(view) + println("view[0]:") + println(view[0]) + + arr1.push(6) // push an element to the end + println("updated array:") + println(arr1) +} \ No newline at end of file diff --git a/moonbit-tour/tour/chapter1_basic/lesson5_array/index.md b/moonbit-tour/tour/chapter1_basic/lesson5_array/index.md new file mode 100644 index 00000000..ba05f38c --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson5_array/index.md @@ -0,0 +1,27 @@ +# Array + +Array is a collection of elements, which have same type. + +You can create an array by *array literal syntax*, which is a comma-separated list +of elements enclosed in square brackets: `[1,2,3]`. + +You can also create an array by using the `Array::make` function, which takes a size and a element value, +as shown in the example, `Array::make(4,1)` creates an array equal to `[1,1,1,1]`. + +The `arr3` is an array consists of elements in `arr1`, elements in `arr2` and a few more numbers. +`..arr1` in square brackets is called *array spread*, which is used to expand an array into another array. + +## Array view + +You can use the `array[start:end]` syntax to get a view of the array from index `start` to `end` (inclusive). The `start` and `end` parts are optional. A view is a reference to the original array, it is used to avoid copying the array. + +## Mutability of array + +You may notice that we push an element to the array `arr1`, which changes the content of the array. How does that work if `arr1` is not marked with `mut`? + +The answer is that the elements inside the array are mutable, which is **defined by the array type itself**. The `mut` keyword in the `let` statement is only used to determine whether the variable name you defined can be reassigned. + +If you try to reassign `arr1` to another array like `arr1 = [1,2,3]`, you will get a compile error. + + + diff --git a/moonbit-tour/tour/chapter1_basic/lesson6_string/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson6_string/index.mbt new file mode 100644 index 00000000..3220c4bf --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson6_string/index.mbt @@ -0,0 +1,20 @@ +fn main { + let str = "Hello, World!" + // Access a character by index. + let c : Char = str[4] + println(c) + let c2 = 'o' + println(c == c2) + + // Use escape sequence. + println("\nHello, \tWorld!") + println("unicode \u{1F407} is a rabbit") + + // Concatenate two strings. + println(str + " Hello, MoonBit!") + + // Use string interpolation. + let moon = "Moon" + let bit = "Bit" + println("Use \{moon + bit}. Happy coding") +} \ No newline at end of file diff --git a/moonbit-tour/tour/chapter1_basic/lesson6_string/index.md b/moonbit-tour/tour/chapter1_basic/lesson6_string/index.md new file mode 100644 index 00000000..03f39a10 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson6_string/index.md @@ -0,0 +1,11 @@ +# String + +A string is a sequence of characters encoded in UTF-16. In MoonBit, strings are immutable, +which means you cannot change the elements inside a string. + +MoonBit supports C-style escape characters in strings and chars, such as `\n`, `\t`, `\\`, `\"`, and `\'`. + +Unicode escape characters are also supported. You can use `\u{}` to represent a Unicode character by its code point. + +MoonBit also supports string interpolation written like `\{variable}`, which allows you to embed expressions into strings. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.mbt new file mode 100644 index 00000000..7173dbc0 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.mbt @@ -0,0 +1,18 @@ +fn main { + // create Tuple + let tuple = (3.14, false, [1,2,3]) + let tuple2 : (Float, Bool, Int) = (2.1, true, 20) + println(tuple) + + // Accessing tuple elements + println(tuple.0) + println(tuple.2) + + // Tuple can also be destructured. + let (a, b, c) = f() + println("\{a}, \{b}, \{c}") +} + +fn f() -> (Int, Bool, Double) { + (1, false, 3.14) // return multiple values via tuple +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.md b/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.md new file mode 100644 index 00000000..5f3ecf58 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson7_tuple/index.md @@ -0,0 +1,15 @@ +# Tuple + +Tuple is a collection of values, which can have different types. It is immutable, +which means that once it is created, it cannot be changed. It is created using +parentheses. + +You can access the elements of tuple via the index: `tuple.0`, `tuple.1`, etc. + +Tuple can be destructured via syntax like `let (a,b) = tuple`, the `tuple` in +right side is a tuple with two elements, and `a` and `b` are the variables to +store the elements. This is a special use case of pattern matching. We will +introduce pattern matching in the later chapter. + +It's common to use tuple to return multiple values from a function. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson8_map/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson8_map/index.mbt new file mode 100644 index 00000000..71d29b6d --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson8_map/index.mbt @@ -0,0 +1,18 @@ +fn main { + // Create a map by map literal + let map1 = { "key1": 1, "key2": 2, "key3": 3 } + println(map1) + // You can also create a map by Map::of, from a list of key-value pairs + let map2 = Map::of([("key1", 1), ("key2", 2), ("key3", 3)]) + println(map1 == map2) + + // Access a value by key + println(map1["key1"]) + + // Update a value by key + map1["key1"] = 10 + println(map1) + + // test a if a key exists + println(map1.contains("key1")) +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson8_map/index.md b/moonbit-tour/tour/chapter1_basic/lesson8_map/index.md new file mode 100644 index 00000000..672c5a43 --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson8_map/index.md @@ -0,0 +1,16 @@ +# Map + +A map is a collection of key-value pairs. Each key is unique in the map, and all keys are associated with a value. It is a mutable collection. + +Expression like `{"key1": value1, "key2": value2}` represents a map, called a map +literal. If the key and value type of the map is basic type (`Int`, `String`, +`Bool`, `Double`, etc.), it can be written as map literal. + +In other cases, you can create the map using the `Map::of` function. It takes a +array of two elements tuple, the first element is the key, and the second element +is the value. + +Values in a map can be accessed by the key using the `map[key]` syntax. + +The elements in a map can be updated by `map[key] = new_value`. + diff --git a/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.mbt b/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.mbt new file mode 100644 index 00000000..8389db9b --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.mbt @@ -0,0 +1,20 @@ +fn main { + let array = [1, 2, 3] + + println("for loop:") + for i = 0; i < array.length(); i = i + 1 { + println("array[\{i}]: \{array[i]}") + } + + println("\nwhile loop:") + let mut j = 0 + while true { + println("array[\{j}]: \{array[j]}") + j = j + 1 + if j < array.length() { + continue + } else { + break + } + } +} diff --git a/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.md b/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.md new file mode 100644 index 00000000..a1a457ca --- /dev/null +++ b/moonbit-tour/tour/chapter1_basic/lesson9_for_while/index.md @@ -0,0 +1,33 @@ +# Control flows + +In this example, we use for loops, while loops, and if-else expression to +iterate over an array. + +## For loop + +The for loop is analogous to a C-style for loop: + +``` +for init; condition; increment { + // loop body +} +``` + + +The loop initializes the variables `init` before it starts. When the loop starts, +it tests the `condition` and executes the loop body if the `condition` is true. +After that, it runs the `increment` expression and repeats the process until the +condition is false. + +The for loop in MoonBit is more expressive than the C-style for loop. We will +explain it in the following chapters. + +## While loop and if-else expression + +The while loop is also similar to the C-style while loop. + +It tests the condition before executing the loop body. If the condition is true, +it executes the loop body and repeats the process until the condition is false. + +MoonBit also support `continue` and `break` in the loop. + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.mbt new file mode 100644 index 00000000..c4c67be7 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.mbt @@ -0,0 +1,16 @@ +struct Point { + x : Int + y : Int +} derive(Show) + +fn main { + let tuple = (1, false, 3.14) + let array = [1, 2, 3] + let record = { x: 5, y: 6 } + let (a, b, c) = tuple + println("a:\{a}, b:\{b}, c:\{c}") + let [d, e, f] = array + println("d:\{d}, e:\{e}, f:\{f}") + let { x, y } = record + println("x:\{x}, y:\{y}") +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.md new file mode 100644 index 00000000..f87eab42 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson1_intro/index.md @@ -0,0 +1,9 @@ +# Pattern Matching + +We have seen pattern matching in the previous example. +It's a powerful feature in MoonBit that can be used in many places. It can help you test conditions conveniently and effectively, making your program more precise and robust. + +In this example, we give some basic use cases of pattern matching. Some other languages call it "destructuring", a way to extract values from a complex data structure. + +"Destructuring" is just a subset of this feature. +In MoonBit, almost every type you can construct can have a form to "destruct", which we call a *pattern*. diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.mbt new file mode 100644 index 00000000..a61e4d26 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.mbt @@ -0,0 +1,45 @@ +enum Resource { + TextFile(String) + Image(String) + Folder(Map[String, Resource]) +} + +let assets : Resource = Folder( + { + "readme.md": TextFile("hello world"), + "image.jpg": Image("https://someurl1"), + "folder1": Folder( + { + "src1.mbt": TextFile("some code1"), + "src2.mbt": TextFile("some MoonBit code 2"), + }, + ), + "folder2": Folder( + { + "src3.mbt": TextFile("some code3"), + "image2.jpg": Image("https://someurl2"), + }, + ), + }, +) + +fn main { + let Folder(top_level) = assets + println("we have items in the root folder:\n \{top_level.keys()}") + println("resource count: \{count(assets)}") +} + +fn count(res : Resource) -> Int { + match res { + Folder(map) => { + let mut sum = 0 + for name, res in map { + sum += count(res) + } + sum + } + TextFile(_) => 1 + Image(_) => 1 + } +} + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.md new file mode 100644 index 00000000..1f9d6c81 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson2_let_match/index.md @@ -0,0 +1,22 @@ +# Pattern in let and match + +There are two common place to use pattern: let and match. + +We defined a `Resource` type, it describes a file system. The `Resource` can be a text file, an image, or a folder associated with more files. + +## Pattern in let statement + +In a let statement, the left side of `=` can be a pattern, we knowns that assets is a folder so just use `let Folder(top_level) = assets` to match it and extract the inside map. + +You may notice that there is a partial match warning because the resource can also be `Image` or `TextFile`. **Partial match make the program more fragile: the pattern matching will fail in other cases and lead to the program aborting.** Practically, the match expression is used more frequently. + +## Pattern in match expression + +The `count` function traverse the input `res` recursively and return the count of `Image` and `TextFile`, using match expression. + +Match expression have *first match semantic*. It will try to find the first matched pattern from first case to last case, and execute the e + +The match expression has a `Int` return value beacause all the case result in same value type `Int`. + +Patterns can be nested. If you don't care about the data associated with the enum constructor, you can use the *any pattern*, written as `_`, instead of introducing a new variable. It means discarding that value. + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.mbt new file mode 100644 index 00000000..910e0dc2 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.mbt @@ -0,0 +1,39 @@ +fn fibonacci(x : Int) -> Int { + // assume x > 0 + match x { + 1 => 1 + 2 => 2 + _ => fibonacci(x - 1) + fibonacci(x - 2) + } +} + +fn negate(x : Bool) -> Bool { + match x { + true => false + false => true + } +} + +fn read(x : Char) -> Int? { + match x { + '1' => Some(1) + '2' => Some(2) + '3' => Some(3) + _ => None + } +} + +fn contents(file : String) -> String? { + match file { + "README" => Some("# hello world") + "hello.mbt" => Some("println(\"hello world\")") + _ => None + } +} + +fn main { + println("fib(5): \{fibonacci(5)}") + println("negate(false): \{negate(false)}") + println("read('2'): \{read('2')}, read('5'): \{read('5')}") + println(contents("README")) +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.md new file mode 100644 index 00000000..48a5872e --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson3_constant_pattern/index.md @@ -0,0 +1,4 @@ +# Constant pattern + +Almost all constant in MoonBit can be represented as a constant pattern. + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.mbt new file mode 100644 index 00000000..167c3535 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.mbt @@ -0,0 +1,20 @@ +fn logical_and(x : Bool, y : Bool) -> Bool { + match (x, y) { + (true, true) => true + (false, _) => false + (_, false) => false + } +} + +fn logical_or(x : Bool, y : Bool) -> Bool { + match (x, y) { + (true, _) => true + (_, true) => true + _ => false + } +} + +fn main { + println("true and false: \{logical_and(true, false)}") + println("true or false: \{logical_or(true, false)}") +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.md new file mode 100644 index 00000000..227aa08b --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson4_tuple_pattern/index.md @@ -0,0 +1,9 @@ +# Tuple pattern + +Use tuple patten to match multiple conditions at once. + +This example simulates *logical and* and *logical or* operation via pattern matching. + +In this scenario, the overhead of creating the tuple in the condition will be optimized out by the compiler. + + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.mbt new file mode 100644 index 00000000..b9696611 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.mbt @@ -0,0 +1,6 @@ +fn main { + let (a, (b, _) as tuple, _) as triple = (1, (true, 5), false) + println("a: \{a}, b: \{b}") + println("tuple: \{tuple}") + println("triple: \{triple}") +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.md new file mode 100644 index 00000000..2399481a --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson5_alias_pattern/index.md @@ -0,0 +1,7 @@ +# Alias Pattern + +Any pattern can be bound to an extra new name via an *alias pattern*. The syntax is `pattern as name`. In this example, we use this feature to preserve the original tuples while pattern matching them. + + + + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.mbt new file mode 100644 index 00000000..b17a0099 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.mbt @@ -0,0 +1,17 @@ +fn main { + let array = [1, 2, 3, 4, 5, 6] + let [a, b, ..] = array + let [.., c, d] = array + let [e, .., f] = array + println("a: \{a}, b: \{b}") + println("c: \{c}, d: \{d}") + println("e: \{e}, f: \{f}") + println("sum of array: \{sum(array[:])}") +} + +fn sum(array : ArrayView[Int]) -> Int { + match array { + [] => 0 + [x, .. as xs] => x + sum(xs) + } +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.md new file mode 100644 index 00000000..b6009810 --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson6_array_pattern/index.md @@ -0,0 +1,11 @@ +# Array Pattern + +Array pattern is a sequence of patterns enclosed in `[]` that matches an array. + +You can use `..` to match the rest of the array at the start or end, or the middle elements of the array. + +In an array pattern, the `..` part can be bound to a new variable via an *alias pattern*. The type of that variable is `ArrayView`. The `sum` function uses this feature to calculate the sum of the array recursively. + + + + diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.mbt b/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.mbt new file mode 100644 index 00000000..18945b1a --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.mbt @@ -0,0 +1,23 @@ +enum Color { + Blue + Red + Green + RGB(Int, Int, Int) + RGBA(Int, Int, Int, Int) +} derive(Show) + +fn get_green(color : Color) -> Int { + match color { + Blue | Red => 0 + Green => 255 + RGB(_, g, _) | RGBA(_, g, _, _) => g + } +} + +fn main { + println("The green part of Red is \{get_green(Red)}") + println("The green part of Green is \{get_green(Green)}") + println("The green part of Blue is \{get_green(Blue)}") + println("The green part of RGB(0,0,0) is \{get_green(RGB(0,0,0))}") + println("The green part of RGBA(50,5,0,6) is \{get_green(RGBA(50,5,0,6))}") +} diff --git a/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.md b/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.md new file mode 100644 index 00000000..773ac50a --- /dev/null +++ b/moonbit-tour/tour/chapter2_pattern_matching/lesson7_or_pattern/index.md @@ -0,0 +1,6 @@ +# Or Pattern + +It's a little verbose if any two cases have common datas and same way to handle them. For example, here is a enum `RGB` and a function `get_green` to get the green value from it. + +The `RGB` and `RGBA` cases can be combined as well. In an *or pattern*, the sub-patterns can introduce new variables, but they must be of the same type and have the same name in all sub-patterns. This restriction allows us to handle them uniformly. + diff --git a/moonbit-tour/tour/index.mbt b/moonbit-tour/tour/index.mbt new file mode 100644 index 00000000..a8fc1076 --- /dev/null +++ b/moonbit-tour/tour/index.mbt @@ -0,0 +1,3 @@ +fn main { + println("hello") +} \ No newline at end of file diff --git a/moonbit-tour/tour/index.md b/moonbit-tour/tour/index.md new file mode 100644 index 00000000..ecc232a6 --- /dev/null +++ b/moonbit-tour/tour/index.md @@ -0,0 +1,9 @@ +# Welcome to the MoonBit language tour! 💫 + +This tour covers all aspects of the MoonBit language, and assumes you have some prior programming experience. It should teach you everything you need to write real programs in MoonBit. + +The tour is interactive! The code shown is editable and will be compiled and evaluated as you type. Anything you print using `println` will be shown in the bottom section. To evaluate MoonBit code the tour compiles MoonBit to wasm gc and runs it, all entirely within your browser window. + +If at any point you get stuck or have a question do not hesitate to ask in the MoonBit Discord server. We're here to help, and if you find something confusing then it's likely others will too, and we want to know about it so we can improve the tour. + +OK, let's go. Click "Next" to get started, or click "Contents" to jump to a specific topic. diff --git a/moonbit-tour/tsconfig.json b/moonbit-tour/tsconfig.json new file mode 100644 index 00000000..aab93282 --- /dev/null +++ b/moonbit-tour/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + "strictNullChecks": true, + "strictBindCallApply": true, + "strictBuiltinIteratorReturn": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true + }, + "include": ["src"] +} diff --git a/moonbit-tour/vite.config.ts b/moonbit-tour/vite.config.ts new file mode 100644 index 00000000..0fe98582 --- /dev/null +++ b/moonbit-tour/vite.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from "vite"; +import { BASE } from "./dev/const"; +import generatePlugin from "./dev/generate-plugin"; +import indexPlugin from "./dev/index-plugin"; + +export default defineConfig({ + base: BASE, + build: { + rollupOptions: { + output: { + entryFileNames: `assets/[name].js`, + chunkFileNames: `assets/[name].js`, + assetFileNames: `assets/[name].[ext]`, + }, + }, + }, + worker: { + rollupOptions: { + output: { + entryFileNames: `assets/[name].js`, + chunkFileNames: `assets/[name].js`, + assetFileNames: `assets/[name].[ext]`, + }, + }, + }, + plugins: [indexPlugin(), generatePlugin()], +}); diff --git a/package.json b/package.json index a122dac4..fbae49eb 100644 --- a/package.json +++ b/package.json @@ -7,5 +7,6 @@ "devDependencies": { "npm-run-all": "^4.1.5", "prettier": "3.3.3" - } + }, + "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28341954..a7a3f067 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,7 +65,7 @@ importers: version: link:../packages/rehypeshiki '@types/node': specifier: ^20.14.11 - version: 22.3.0 + version: 20.17.10 '@types/react': specifier: ^18.2.0 version: 18.3.3 @@ -79,6 +79,64 @@ importers: specifier: ~5.5.4 version: 5.5.4 + moonbit-tour: + dependencies: + '@moonbit/moonpad-monaco': + specifier: ^0.1.202412060 + version: 0.1.202412060(monaco-editor-core@0.52.2) + monaco-editor-core: + specifier: ^0.52.0 + version: 0.52.2 + devDependencies: + '@tailwindcss/typography': + specifier: ^0.5.15 + version: 0.5.15(tailwindcss@3.4.16) + '@types/node': + specifier: ^22.10.1 + version: 22.10.2 + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + postcss: + specifier: ^8.4.49 + version: 8.4.49 + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-organize-imports: + specifier: ^4.1.0 + version: 4.1.0(prettier@3.4.2)(typescript@5.6.3) + prettier-plugin-tailwindcss: + specifier: ^0.6.9 + version: 0.6.9(prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.6.3))(prettier@3.4.2) + rehype-stringify: + specifier: ^10.0.1 + version: 10.0.1 + remark-parse: + specifier: ^11.0.0 + version: 11.0.0 + remark-rehype: + specifier: ^11.1.1 + version: 11.1.1 + shiki: + specifier: ^1.24.1 + version: 1.24.2 + tailwindcss: + specifier: ^3.4.16 + version: 3.4.16 + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ~5.6.2 + version: 5.6.3 + unified: + specifier: ^11.0.5 + version: 11.0.5 + vite: + specifier: ^6.0.1 + version: 6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.31.6)(tsx@4.19.2)(yaml@2.6.1) + packages/rehypeshiki: dependencies: '@shikijs/transformers': @@ -102,7 +160,7 @@ importers: version: 3.0.4 '@types/node': specifier: ^20.14.11 - version: 22.3.0 + version: 20.17.10 mdast-util-to-hast: specifier: ^13.2.0 version: 13.2.0 @@ -120,10 +178,10 @@ importers: version: 11.1.0 unbuild: specifier: ^2.0.0 - version: 2.0.0(typescript@5.5.4) + version: 2.0.0(typescript@5.6.3) vitest: specifier: ^2.0.3 - version: 2.0.5(@types/node@22.3.0)(jsdom@24.1.1)(terser@5.31.6) + version: 2.0.5(@types/node@20.17.10)(jsdom@24.1.1)(terser@5.31.6) packages: @@ -211,6 +269,10 @@ packages: '@algolia/transporter@4.24.0': resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1096,6 +1158,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.19.12': resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -1114,6 +1182,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.19.12': resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -1132,6 +1206,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.19.12': resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -1150,6 +1230,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.19.12': resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -1168,6 +1254,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.19.12': resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -1186,6 +1278,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.19.12': resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -1204,6 +1302,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.19.12': resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -1222,6 +1326,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.19.12': resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -1240,6 +1350,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.19.12': resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -1258,6 +1374,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.19.12': resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -1276,6 +1398,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.19.12': resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -1294,6 +1422,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.19.12': resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -1312,6 +1446,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.19.12': resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -1330,6 +1470,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.19.12': resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -1348,6 +1494,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.19.12': resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -1366,6 +1518,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.19.12': resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -1384,6 +1542,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.19.12': resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -1402,12 +1566,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.0': resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.19.12': resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -1426,6 +1602,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.19.12': resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -1444,6 +1626,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.19.12': resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -1462,6 +1650,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.19.12': resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -1480,6 +1674,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.19.12': resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -1498,12 +1698,22 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1560,6 +1770,17 @@ packages: '@moonbit/analyzer@0.1.202408140': resolution: {integrity: sha512-p1bBR9G7vnuBzKDF/y7MENA8ks4BlyxQX6Pdu9/WezqMs6MZQL0KbwL1z1Oo1MGuxYXLJKV0mXUX2NXpqy2n1A==} + '@moonbit/analyzer@0.1.202412100': + resolution: {integrity: sha512-DmAkytsK/btbYa32REv28rWpvBZfJ9/HSvADhkLV5kXmpiIvOtpzmjzrYPjBmNhY+JqqKRjAC7YeXYMBNuGoxQ==} + + '@moonbit/moonc-worker@0.1.202412100': + resolution: {integrity: sha512-InT6BHHEoP0Yj06uXahtoQs8oqSDFXY4R1+bwfWeRrRIIJJbVQ8PC2QmQDGEk0ZV6DsAK40qBcvoWe7ZN9p3eg==} + + '@moonbit/moonpad-monaco@0.1.202412060': + resolution: {integrity: sha512-evvUrxHIb/J5tlZOChlqPAV68qwCA+Ce988O7QjeS3Lds0nUMunOAB/iv6Nmd6eq7VCDcwlrBQgqws9zWdTmyA==} + peerDependencies: + monaco-editor-core: ^0.52.0 + '@moonbit/moonpad@0.0.8': resolution: {integrity: sha512-ZP0EvnHBP+IZX0B58sqS3FSBhzrPUbd0pe5ZgIsekXkqnxvkdvZ0c5ortGvF1MGCrim3u7NO9wpDjs0QJPpVLQ==} @@ -1575,6 +1796,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -1649,87 +1874,197 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.18.1': resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.18.1': resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.18.1': resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.18.1': resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.18.1': resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.18.1': resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.18.1': resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.18.1': resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.18.1': resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.18.1': resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.18.1': resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.18.1': resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.18.1': resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + cpu: [x64] + os: [win32] + '@shikijs/core@1.13.0': resolution: {integrity: sha512-Mj5NVfbAXcD1GnwOTSPl8hBn/T8UDpfFQTptp+p41n/CbUcJtOq98WaRD7Lz3hCglYotUTHUWtzu3JhK6XlkAA==} + '@shikijs/core@1.24.2': + resolution: {integrity: sha512-BpbNUSKIwbKrRRA+BQj0BEWSw+8kOPKDJevWeSE/xIqGX7K0xrCZQ9kK0nnEQyrzsUoka1l81ZtJ2mGaCA32HQ==} + + '@shikijs/engine-javascript@1.24.2': + resolution: {integrity: sha512-EqsmYBJdLEwEiO4H+oExz34a5GhhnVp+jH9Q/XjPjmBPc6TE/x4/gD0X3i0EbkKKNqXYHHJTJUpOLRQNkEzS9Q==} + + '@shikijs/engine-oniguruma@1.24.2': + resolution: {integrity: sha512-ZN6k//aDNWRJs1uKB12pturKHh7GejKugowOFGAuG7TxDRLod1Bd5JhpOikOiFqPmKjKEPtEA6mRCf7q3ulDyQ==} + '@shikijs/transformers@1.13.0': resolution: {integrity: sha512-51aLIT6a93rVGoTxl2+p6hb7ILbTA4p/unoibEAjnPMzHto4cqxhuHyDVgtQur5ANpGsL3ihSGKaZDrpcWH8vQ==} + '@shikijs/types@1.24.2': + resolution: {integrity: sha512-bdeWZiDtajGLG9BudI0AHet0b6e7FbR0EsE4jpGaI0YwHm/XJunI9+3uZnzFtX65gsyJ6ngCIWUfA4NWRPnBkQ==} + + '@shikijs/vscode-textmate@9.3.1': + resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -1835,6 +2170,11 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} + '@tailwindcss/typography@0.5.15': + resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -1869,6 +2209,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@4.19.5': resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} @@ -1926,8 +2269,11 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.3.0': - resolution: {integrity: sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==} + '@types/node@20.17.10': + resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} + + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2159,6 +2505,9 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2209,6 +2558,13 @@ packages: peerDependencies: postcss: ^8.1.0 + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -2287,6 +2643,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2325,6 +2686,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2339,6 +2704,9 @@ packages: caniuse-lite@1.0.30001642: resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + caniuse-lite@1.0.30001688: + resolution: {integrity: sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2454,6 +2822,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2464,6 +2835,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -2835,10 +3210,16 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -2888,6 +3269,12 @@ packages: electron-to-chromium@1.4.829: resolution: {integrity: sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==} + electron-to-chromium@1.5.73: + resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2964,10 +3351,19 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-goat@4.0.0: resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} engines: {node: '>=12'} @@ -3154,6 +3550,10 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + fork-ts-checker-webpack-plugin@6.5.3: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -3263,6 +3663,10 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3373,6 +3777,9 @@ packages: hast-util-to-html@9.0.1: resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -3791,6 +4198,9 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3888,6 +4298,10 @@ packages: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3919,12 +4333,21 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -3948,6 +4371,9 @@ packages: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4179,6 +4605,10 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -4236,9 +4666,17 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + mkdist@1.5.4: resolution: {integrity: sha512-GEmKYJG5K1YGFIq3t0K3iihZ8FTgXphLf/4UjbmpXIAtBFn4lEjXk3pXNTSfy7EtcEXhp2Nn1vzw5pIus6RY3g==} hasBin: true @@ -4257,6 +4695,9 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + monaco-editor-core@0.52.2: + resolution: {integrity: sha512-5TOyTUymNx7jB24TGP4Qs5UEVrntDKSMzDUvW3ADaI1CFRO1t7FPhbT2u4m3iIKZf85zTM+mkCxiUSgj+v/YtA==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -4278,6 +4719,9 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4307,6 +4751,9 @@ packages: node-releases@2.0.17: resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -4348,6 +4795,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} @@ -4382,6 +4833,9 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + oniguruma-to-es@0.7.0: + resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -4430,6 +4884,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} @@ -4502,6 +4959,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -4532,6 +4993,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4541,10 +5005,18 @@ packages: engines: {node: '>=0.10'} hasBin: true + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-dir@7.0.0: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} @@ -4650,6 +5122,30 @@ packages: peerDependencies: postcss: ^8.4.31 + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-loader@7.3.4: resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} engines: {node: '>= 14.15.0'} @@ -4765,6 +5261,12 @@ packages: peerDependencies: postcss: ^8.2.14 + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + postcss-normalize-charset@6.0.2: resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} engines: {node: ^14 || ^16 || >=18.0} @@ -4915,10 +5417,18 @@ packages: peerDependencies: postcss: ^8.4.31 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.1: resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + postcss-sort-media-queries@5.2.0: resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==} engines: {node: '>=14.0.0'} @@ -4962,11 +5472,85 @@ packages: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prettier-plugin-organize-imports@4.1.0: + resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} + peerDependencies: + prettier: '>=2.0' + typescript: '>=2.9' + vue-tsc: ^2.1.0 + peerDependenciesMeta: + vue-tsc: + optional: true + + prettier-plugin-tailwindcss@0.6.9: + resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + pretty-bytes@6.1.1: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -5125,6 +5709,9 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-pkg@3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} @@ -5164,6 +5751,15 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regex-recursion@4.3.0: + resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@5.0.2: + resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -5190,6 +5786,9 @@ packages: rehype-stringify@10.0.0: resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -5216,6 +5815,9 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} @@ -5283,6 +5885,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -5439,6 +6046,9 @@ packages: shiki@1.13.0: resolution: {integrity: sha512-e0dWfnONbEv6xl7FJy3XIhsVHQ/65XHDZl92+6H9+4xWjfdo7pmkqG7Kg47KWtDiEtzM5Z+oEfb4vtRvoZ/X9w==} + shiki@1.24.2: + resolution: {integrity: sha512-TR1fi6mkRrzW+SKT5G6uKuc32Dj2EEa7Kj0k8kGqiBINb+C1TiflVOiT9ta6GqOJtC4fraxO5SLUaKBcSY38Fg==} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -5491,6 +6101,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5634,6 +6248,11 @@ packages: peerDependencies: postcss: ^8.4.31 + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5661,6 +6280,11 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tailwindcss@3.4.16: + resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + engines: {node: '>=14.0.0'} + hasBin: true + tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -5698,6 +6322,13 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -5752,6 +6383,9 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -5760,6 +6394,11 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -5796,6 +6435,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -5811,8 +6455,11 @@ packages: typescript: optional: true - undici-types@6.18.2: - resolution: {integrity: sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -5884,6 +6531,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@6.0.2: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} @@ -5974,6 +6627,46 @@ packages: terser: optional: true + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitest@2.0.5: resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6013,6 +6706,12 @@ packages: vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + vscode-oniguruma@2.0.1: + resolution: {integrity: sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ==} + + vscode-textmate@9.1.0: + resolution: {integrity: sha512-lxKSVp2DkFOx9RDAvpiYUrB9/KT1fAfi1aE8CBGstP8N7rLF+Seifj8kDA198X0mYj1CjQUC+81+nQf8CO0nVA==} + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -6130,6 +6829,10 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} @@ -6186,6 +6889,11 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -6321,6 +7029,8 @@ snapshots: '@algolia/logger-common': 4.24.0 '@algolia/requester-common': 4.24.0 + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -7354,9 +8064,9 @@ snapshots: '@docusaurus/cssnano-preset@3.5.2': dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.4.39) - postcss: 8.4.39 - postcss-sort-media-queries: 5.2.0(postcss@8.4.39) + cssnano-preset-advanced: 6.1.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-sort-media-queries: 5.2.0(postcss@8.4.49) tslib: 2.6.3 '@docusaurus/logger@3.5.2': @@ -7929,6 +8639,9 @@ snapshots: '@esbuild/aix-ppc64@0.23.0': optional: true + '@esbuild/aix-ppc64@0.24.0': + optional: true + '@esbuild/android-arm64@0.19.12': optional: true @@ -7938,6 +8651,9 @@ snapshots: '@esbuild/android-arm64@0.23.0': optional: true + '@esbuild/android-arm64@0.24.0': + optional: true + '@esbuild/android-arm@0.19.12': optional: true @@ -7947,6 +8663,9 @@ snapshots: '@esbuild/android-arm@0.23.0': optional: true + '@esbuild/android-arm@0.24.0': + optional: true + '@esbuild/android-x64@0.19.12': optional: true @@ -7956,6 +8675,9 @@ snapshots: '@esbuild/android-x64@0.23.0': optional: true + '@esbuild/android-x64@0.24.0': + optional: true + '@esbuild/darwin-arm64@0.19.12': optional: true @@ -7965,6 +8687,9 @@ snapshots: '@esbuild/darwin-arm64@0.23.0': optional: true + '@esbuild/darwin-arm64@0.24.0': + optional: true + '@esbuild/darwin-x64@0.19.12': optional: true @@ -7974,6 +8699,9 @@ snapshots: '@esbuild/darwin-x64@0.23.0': optional: true + '@esbuild/darwin-x64@0.24.0': + optional: true + '@esbuild/freebsd-arm64@0.19.12': optional: true @@ -7983,6 +8711,9 @@ snapshots: '@esbuild/freebsd-arm64@0.23.0': optional: true + '@esbuild/freebsd-arm64@0.24.0': + optional: true + '@esbuild/freebsd-x64@0.19.12': optional: true @@ -7992,6 +8723,9 @@ snapshots: '@esbuild/freebsd-x64@0.23.0': optional: true + '@esbuild/freebsd-x64@0.24.0': + optional: true + '@esbuild/linux-arm64@0.19.12': optional: true @@ -8001,6 +8735,9 @@ snapshots: '@esbuild/linux-arm64@0.23.0': optional: true + '@esbuild/linux-arm64@0.24.0': + optional: true + '@esbuild/linux-arm@0.19.12': optional: true @@ -8010,6 +8747,9 @@ snapshots: '@esbuild/linux-arm@0.23.0': optional: true + '@esbuild/linux-arm@0.24.0': + optional: true + '@esbuild/linux-ia32@0.19.12': optional: true @@ -8019,6 +8759,9 @@ snapshots: '@esbuild/linux-ia32@0.23.0': optional: true + '@esbuild/linux-ia32@0.24.0': + optional: true + '@esbuild/linux-loong64@0.19.12': optional: true @@ -8028,6 +8771,9 @@ snapshots: '@esbuild/linux-loong64@0.23.0': optional: true + '@esbuild/linux-loong64@0.24.0': + optional: true + '@esbuild/linux-mips64el@0.19.12': optional: true @@ -8037,6 +8783,9 @@ snapshots: '@esbuild/linux-mips64el@0.23.0': optional: true + '@esbuild/linux-mips64el@0.24.0': + optional: true + '@esbuild/linux-ppc64@0.19.12': optional: true @@ -8046,6 +8795,9 @@ snapshots: '@esbuild/linux-ppc64@0.23.0': optional: true + '@esbuild/linux-ppc64@0.24.0': + optional: true + '@esbuild/linux-riscv64@0.19.12': optional: true @@ -8055,6 +8807,9 @@ snapshots: '@esbuild/linux-riscv64@0.23.0': optional: true + '@esbuild/linux-riscv64@0.24.0': + optional: true + '@esbuild/linux-s390x@0.19.12': optional: true @@ -8064,6 +8819,9 @@ snapshots: '@esbuild/linux-s390x@0.23.0': optional: true + '@esbuild/linux-s390x@0.24.0': + optional: true + '@esbuild/linux-x64@0.19.12': optional: true @@ -8073,6 +8831,9 @@ snapshots: '@esbuild/linux-x64@0.23.0': optional: true + '@esbuild/linux-x64@0.24.0': + optional: true + '@esbuild/netbsd-x64@0.19.12': optional: true @@ -8082,9 +8843,15 @@ snapshots: '@esbuild/netbsd-x64@0.23.0': optional: true + '@esbuild/netbsd-x64@0.24.0': + optional: true + '@esbuild/openbsd-arm64@0.23.0': optional: true + '@esbuild/openbsd-arm64@0.24.0': + optional: true + '@esbuild/openbsd-x64@0.19.12': optional: true @@ -8094,6 +8861,9 @@ snapshots: '@esbuild/openbsd-x64@0.23.0': optional: true + '@esbuild/openbsd-x64@0.24.0': + optional: true + '@esbuild/sunos-x64@0.19.12': optional: true @@ -8103,6 +8873,9 @@ snapshots: '@esbuild/sunos-x64@0.23.0': optional: true + '@esbuild/sunos-x64@0.24.0': + optional: true + '@esbuild/win32-arm64@0.19.12': optional: true @@ -8112,6 +8885,9 @@ snapshots: '@esbuild/win32-arm64@0.23.0': optional: true + '@esbuild/win32-arm64@0.24.0': + optional: true + '@esbuild/win32-ia32@0.19.12': optional: true @@ -8121,6 +8897,9 @@ snapshots: '@esbuild/win32-ia32@0.23.0': optional: true + '@esbuild/win32-ia32@0.24.0': + optional: true + '@esbuild/win32-x64@0.19.12': optional: true @@ -8130,12 +8909,24 @@ snapshots: '@esbuild/win32-x64@0.23.0': optional: true + '@esbuild/win32-x64@0.24.0': + optional: true + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': dependencies: '@hapi/hoek': 9.3.0 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -8145,7 +8936,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -8207,7 +8998,7 @@ snapshots: periscopic: 3.1.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.1.1 source-map: 0.7.4 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -8225,6 +9016,21 @@ snapshots: '@moonbit/analyzer@0.1.202408140': {} + '@moonbit/analyzer@0.1.202412100': {} + + '@moonbit/moonc-worker@0.1.202412100': {} + + '@moonbit/moonpad-monaco@0.1.202412060(monaco-editor-core@0.52.2)': + dependencies: + '@moonbit/analyzer': 0.1.202412100 + '@moonbit/moonc-worker': 0.1.202412100 + comlink: 4.4.2 + monaco-editor-core: 0.52.2 + vscode-jsonrpc: 8.2.1 + vscode-languageserver-protocol: 3.17.5 + vscode-oniguruma: 2.0.1 + vscode-textmate: 9.1.0 + '@moonbit/moonpad@0.0.8(@lezer/common@1.2.1)': dependencies: '@codemirror/autocomplete': 6.18.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.32.0)(@lezer/common@1.2.1) @@ -8254,6 +9060,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@pkgjs/parseargs@0.11.0': + optional: true + '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -8320,59 +9129,143 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.18.1': optional: true + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + '@rollup/rollup-android-arm64@4.18.1': optional: true + '@rollup/rollup-android-arm64@4.28.1': + optional: true + '@rollup/rollup-darwin-arm64@4.18.1': optional: true + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + '@rollup/rollup-darwin-x64@4.18.1': optional: true + '@rollup/rollup-darwin-x64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.28.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.18.1': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.18.1': optional: true + '@rollup/rollup-linux-arm64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.18.1': optional: true + '@rollup/rollup-linux-arm64-musl@4.28.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.18.1': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.18.1': optional: true + '@rollup/rollup-linux-s390x-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.18.1': optional: true + '@rollup/rollup-linux-x64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.18.1': optional: true + '@rollup/rollup-linux-x64-musl@4.28.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.18.1': optional: true + '@rollup/rollup-win32-arm64-msvc@4.28.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.18.1': optional: true + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.18.1': optional: true + '@rollup/rollup-win32-x64-msvc@4.28.1': + optional: true + '@shikijs/core@1.13.0': dependencies: '@types/hast': 3.0.4 + '@shikijs/core@1.24.2': + dependencies: + '@shikijs/engine-javascript': 1.24.2 + '@shikijs/engine-oniguruma': 1.24.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.24.2': + dependencies: + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 + oniguruma-to-es: 0.7.0 + + '@shikijs/engine-oniguruma@1.24.2': + dependencies: + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/transformers@1.13.0': dependencies: shiki: 1.13.0 + '@shikijs/types@1.24.2': + dependencies: + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@9.3.1': {} + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -8490,6 +9383,14 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.16)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.16 + '@trysound/sax@0.2.0': {} '@types/acorn@4.0.6': @@ -8499,20 +9400,20 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.5 - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/connect@3.4.38': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/debug@4.1.12': dependencies: @@ -8534,9 +9435,11 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8564,7 +9467,7 @@ snapshots: '@types/http-proxy@1.17.14': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/istanbul-lib-coverage@2.0.6': {} @@ -8590,13 +9493,17 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/node@17.0.45': {} - '@types/node@22.3.0': + '@types/node@20.17.10': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.10.2': dependencies: - undici-types: 6.18.2 + undici-types: 6.20.0 '@types/parse-json@4.0.2': {} @@ -8636,12 +9543,12 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/serve-index@1.9.4': dependencies: @@ -8650,12 +9557,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/unist@2.0.10': {} @@ -8663,7 +9570,7 @@ snapshots: '@types/ws@8.5.11': dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 '@types/yargs-parser@21.0.3': {} @@ -8889,6 +9796,8 @@ snapshots: ansi-styles@6.2.1: {} + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -8941,6 +9850,16 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001688 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -9056,6 +9975,13 @@ snapshots: node-releases: 2.0.17 update-browserslist-db: 1.1.0(browserslist@4.23.2) + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001688 + electron-to-chromium: 1.5.73 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer-from@1.1.2: {} builtin-modules@3.3.0: {} @@ -9093,6 +10019,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.3 + camelcase-css@2.0.1: {} + camelcase@6.3.0: {} camelcase@7.0.1: {} @@ -9106,6 +10034,8 @@ snapshots: caniuse-lite@1.0.30001642: {} + caniuse-lite@1.0.30001688: {} + ccount@2.0.1: {} chai@5.1.1: @@ -9227,12 +10157,16 @@ snapshots: delayed-stream: 1.0.0 optional: true + comlink@4.4.2: {} + comma-separated-tokens@2.0.3: {} commander@10.0.1: {} commander@2.20.3: {} + commander@4.1.1: {} + commander@5.1.0: {} commander@7.2.0: {} @@ -9359,14 +10293,18 @@ snapshots: dependencies: postcss: 8.4.39 + css-declaration-sorter@7.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + css-loader@6.11.0(webpack@5.93.0): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) - postcss-modules-scope: 3.2.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.49) + postcss-modules-scope: 3.2.0(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: @@ -9375,9 +10313,9 @@ snapshots: css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.93.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 6.1.2(postcss@8.4.39) + cssnano: 6.1.2(postcss@8.4.49) jest-worker: 29.7.0 - postcss: 8.4.39 + postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.2 webpack: 5.93.0 @@ -9414,16 +10352,16 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-advanced@6.1.2(postcss@8.4.39): + cssnano-preset-advanced@6.1.2(postcss@8.4.49): dependencies: - autoprefixer: 10.4.19(postcss@8.4.39) + autoprefixer: 10.4.20(postcss@8.4.49) browserslist: 4.23.2 - cssnano-preset-default: 6.1.2(postcss@8.4.39) - postcss: 8.4.39 - postcss-discard-unused: 6.0.5(postcss@8.4.39) - postcss-merge-idents: 6.0.3(postcss@8.4.39) - postcss-reduce-idents: 6.0.3(postcss@8.4.39) - postcss-zindex: 6.0.2(postcss@8.4.39) + cssnano-preset-default: 6.1.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-discard-unused: 6.0.5(postcss@8.4.49) + postcss-merge-idents: 6.0.3(postcss@8.4.49) + postcss-reduce-idents: 6.0.3(postcss@8.4.49) + postcss-zindex: 6.0.2(postcss@8.4.49) cssnano-preset-default@6.1.2(postcss@8.4.39): dependencies: @@ -9459,47 +10397,85 @@ snapshots: postcss-svgo: 6.0.3(postcss@8.4.39) postcss-unique-selectors: 6.0.4(postcss@8.4.39) - cssnano-preset-default@7.0.4(postcss@8.4.39): + cssnano-preset-default@6.1.2(postcss@8.4.49): dependencies: browserslist: 4.23.2 - css-declaration-sorter: 7.2.0(postcss@8.4.39) - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-calc: 10.0.0(postcss@8.4.39) - postcss-colormin: 7.0.1(postcss@8.4.39) - postcss-convert-values: 7.0.2(postcss@8.4.39) - postcss-discard-comments: 7.0.1(postcss@8.4.39) - postcss-discard-duplicates: 7.0.0(postcss@8.4.39) - postcss-discard-empty: 7.0.0(postcss@8.4.39) - postcss-discard-overridden: 7.0.0(postcss@8.4.39) - postcss-merge-longhand: 7.0.2(postcss@8.4.39) - postcss-merge-rules: 7.0.2(postcss@8.4.39) - postcss-minify-font-values: 7.0.0(postcss@8.4.39) - postcss-minify-gradients: 7.0.0(postcss@8.4.39) - postcss-minify-params: 7.0.1(postcss@8.4.39) - postcss-minify-selectors: 7.0.2(postcss@8.4.39) - postcss-normalize-charset: 7.0.0(postcss@8.4.39) - postcss-normalize-display-values: 7.0.0(postcss@8.4.39) - postcss-normalize-positions: 7.0.0(postcss@8.4.39) - postcss-normalize-repeat-style: 7.0.0(postcss@8.4.39) - postcss-normalize-string: 7.0.0(postcss@8.4.39) - postcss-normalize-timing-functions: 7.0.0(postcss@8.4.39) - postcss-normalize-unicode: 7.0.1(postcss@8.4.39) - postcss-normalize-url: 7.0.0(postcss@8.4.39) - postcss-normalize-whitespace: 7.0.0(postcss@8.4.39) - postcss-ordered-values: 7.0.1(postcss@8.4.39) - postcss-reduce-initial: 7.0.1(postcss@8.4.39) - postcss-reduce-transforms: 7.0.0(postcss@8.4.39) - postcss-svgo: 7.0.1(postcss@8.4.39) - postcss-unique-selectors: 7.0.1(postcss@8.4.39) + css-declaration-sorter: 7.2.0(postcss@8.4.49) + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 9.0.1(postcss@8.4.49) + postcss-colormin: 6.1.0(postcss@8.4.49) + postcss-convert-values: 6.1.0(postcss@8.4.49) + postcss-discard-comments: 6.0.2(postcss@8.4.49) + postcss-discard-duplicates: 6.0.3(postcss@8.4.49) + postcss-discard-empty: 6.0.3(postcss@8.4.49) + postcss-discard-overridden: 6.0.2(postcss@8.4.49) + postcss-merge-longhand: 6.0.5(postcss@8.4.49) + postcss-merge-rules: 6.1.1(postcss@8.4.49) + postcss-minify-font-values: 6.1.0(postcss@8.4.49) + postcss-minify-gradients: 6.0.3(postcss@8.4.49) + postcss-minify-params: 6.1.0(postcss@8.4.49) + postcss-minify-selectors: 6.0.4(postcss@8.4.49) + postcss-normalize-charset: 6.0.2(postcss@8.4.49) + postcss-normalize-display-values: 6.0.2(postcss@8.4.49) + postcss-normalize-positions: 6.0.2(postcss@8.4.49) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.49) + postcss-normalize-string: 6.0.2(postcss@8.4.49) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.49) + postcss-normalize-unicode: 6.1.0(postcss@8.4.49) + postcss-normalize-url: 6.0.2(postcss@8.4.49) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.49) + postcss-ordered-values: 6.0.2(postcss@8.4.49) + postcss-reduce-initial: 6.1.0(postcss@8.4.49) + postcss-reduce-transforms: 6.0.2(postcss@8.4.49) + postcss-svgo: 6.0.3(postcss@8.4.49) + postcss-unique-selectors: 6.0.4(postcss@8.4.49) + + cssnano-preset-default@7.0.4(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + css-declaration-sorter: 7.2.0(postcss@8.4.49) + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 10.0.0(postcss@8.4.49) + postcss-colormin: 7.0.1(postcss@8.4.49) + postcss-convert-values: 7.0.2(postcss@8.4.49) + postcss-discard-comments: 7.0.1(postcss@8.4.49) + postcss-discard-duplicates: 7.0.0(postcss@8.4.49) + postcss-discard-empty: 7.0.0(postcss@8.4.49) + postcss-discard-overridden: 7.0.0(postcss@8.4.49) + postcss-merge-longhand: 7.0.2(postcss@8.4.49) + postcss-merge-rules: 7.0.2(postcss@8.4.49) + postcss-minify-font-values: 7.0.0(postcss@8.4.49) + postcss-minify-gradients: 7.0.0(postcss@8.4.49) + postcss-minify-params: 7.0.1(postcss@8.4.49) + postcss-minify-selectors: 7.0.2(postcss@8.4.49) + postcss-normalize-charset: 7.0.0(postcss@8.4.49) + postcss-normalize-display-values: 7.0.0(postcss@8.4.49) + postcss-normalize-positions: 7.0.0(postcss@8.4.49) + postcss-normalize-repeat-style: 7.0.0(postcss@8.4.49) + postcss-normalize-string: 7.0.0(postcss@8.4.49) + postcss-normalize-timing-functions: 7.0.0(postcss@8.4.49) + postcss-normalize-unicode: 7.0.1(postcss@8.4.49) + postcss-normalize-url: 7.0.0(postcss@8.4.49) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.49) + postcss-ordered-values: 7.0.1(postcss@8.4.49) + postcss-reduce-initial: 7.0.1(postcss@8.4.49) + postcss-reduce-transforms: 7.0.0(postcss@8.4.49) + postcss-svgo: 7.0.1(postcss@8.4.49) + postcss-unique-selectors: 7.0.1(postcss@8.4.49) cssnano-utils@4.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 - cssnano-utils@5.0.0(postcss@8.4.39): + cssnano-utils@4.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + cssnano-utils@5.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 cssnano@6.1.2(postcss@8.4.39): dependencies: @@ -9507,11 +10483,17 @@ snapshots: lilconfig: 3.1.2 postcss: 8.4.39 - cssnano@7.0.4(postcss@8.4.39): + cssnano@6.1.2(postcss@8.4.49): dependencies: - cssnano-preset-default: 7.0.4(postcss@8.4.39) + cssnano-preset-default: 6.1.2(postcss@8.4.49) lilconfig: 3.1.2 - postcss: 8.4.39 + postcss: 8.4.49 + + cssnano@7.0.4(postcss@8.4.49): + dependencies: + cssnano-preset-default: 7.0.4(postcss@8.4.49) + lilconfig: 3.1.2 + postcss: 8.4.49 csso@5.0.5: dependencies: @@ -9644,10 +10626,14 @@ snapshots: dependencies: dequal: 2.0.3 + didyoumean@1.2.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -9707,6 +10693,10 @@ snapshots: electron-to-chromium@1.4.829: {} + electron-to-chromium@1.5.73: {} + + emoji-regex-xs@1.0.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -9884,8 +10874,37 @@ snapshots: '@esbuild/win32-ia32': 0.23.0 '@esbuild/win32-x64': 0.23.0 + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + escalade@3.1.2: {} + escalade@3.2.0: {} + escape-goat@4.0.0: {} escape-html@1.0.3: {} @@ -9953,7 +10972,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 require-like: 0.1.2 eventemitter3@4.0.7: {} @@ -10111,7 +11130,12 @@ snapshots: dependencies: is-callable: 1.2.7 - fork-ts-checker-webpack-plugin@6.5.3(typescript@5.5.4)(webpack@5.93.0): + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@6.5.3(typescript@5.5.4)(webpack@5.93.0): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -10217,6 +11241,15 @@ snapshots: glob-to-regexp@0.4.1: {} + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -10398,6 +11431,20 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.0: dependencies: '@types/estree': 1.0.5 @@ -10602,9 +11649,9 @@ snapshots: safer-buffer: 2.1.2 optional: true - icss-utils@5.1.0(postcss@8.4.39): + icss-utils@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 ignore@5.3.1: {} @@ -10820,10 +11867,16 @@ snapshots: isobject@3.0.1: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.3.0 + '@types/node': 20.17.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10831,13 +11884,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10935,6 +11988,8 @@ snapshots: lilconfig@3.1.2: {} + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} load-json-file@4.0.0: @@ -10967,10 +12022,16 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash.castarray@4.4.0: {} + lodash.debounce@4.0.8: {} + lodash.isplainobject@4.0.6: {} + lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} + lodash.uniq@4.5.0: {} lodash@4.17.21: {} @@ -10991,6 +12052,8 @@ snapshots: lowercase-keys@3.0.0: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -11512,6 +12575,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.33.0: {} mime-db@1.52.0: {} @@ -11552,13 +12620,19 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} - mkdist@1.5.4(typescript@5.5.4): + minipass@7.1.2: {} + + mkdist@1.5.4(typescript@5.6.3): dependencies: - autoprefixer: 10.4.19(postcss@8.4.39) + autoprefixer: 10.4.20(postcss@8.4.49) citty: 0.1.6 - cssnano: 7.0.4(postcss@8.4.39) + cssnano: 7.0.4(postcss@8.4.49) defu: 6.1.4 esbuild: 0.23.0 fast-glob: 3.3.2 @@ -11566,11 +12640,11 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 pkg-types: 1.1.3 - postcss: 8.4.39 - postcss-nested: 6.0.1(postcss@8.4.39) + postcss: 8.4.49 + postcss-nested: 6.0.1(postcss@8.4.49) semver: 7.6.3 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 mlly@1.7.1: dependencies: @@ -11579,6 +12653,8 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.4 + monaco-editor-core@0.52.2: {} + mri@1.2.0: {} mrmime@2.0.0: {} @@ -11594,6 +12670,12 @@ snapshots: dns-packet: 5.6.1 thunky: 1.1.0 + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} negotiator@0.6.3: {} @@ -11618,6 +12700,8 @@ snapshots: node-releases@2.0.17: {} + node-releases@2.0.19: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -11662,6 +12746,8 @@ snapshots: object-assign@4.1.1: {} + object-hash@3.0.0: {} + object-inspect@1.13.2: {} object-keys@1.1.1: {} @@ -11693,6 +12779,12 @@ snapshots: dependencies: mimic-fn: 4.0.0 + oniguruma-to-es@0.7.0: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 5.0.2 + regex-recursion: 4.3.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -11738,6 +12830,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + package-json@8.1.1: dependencies: got: 12.6.1 @@ -11813,6 +12907,11 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-to-regexp@0.1.7: {} path-to-regexp@1.8.0: @@ -11839,12 +12938,18 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pidtree@0.3.1: {} + pify@2.3.0: {} + pify@3.0.0: {} + pirates@4.0.6: {} + pkg-dir@7.0.0: dependencies: find-up: 6.3.0 @@ -11861,9 +12966,9 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-calc@10.0.0(postcss@8.4.39): + postcss-calc@10.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 postcss-selector-parser: 6.1.1 postcss-value-parser: 4.2.0 @@ -11873,6 +12978,12 @@ snapshots: postcss-selector-parser: 6.1.1 postcss-value-parser: 4.2.0 + postcss-calc@9.0.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + postcss-colormin@6.1.0(postcss@8.4.39): dependencies: browserslist: 4.23.2 @@ -11881,12 +12992,20 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.1(postcss@8.4.39): + postcss-colormin@6.1.0(postcss@8.4.49): dependencies: browserslist: 4.23.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-colormin@7.0.1(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.4.39): @@ -11895,50 +13014,91 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.2(postcss@8.4.39): + postcss-convert-values@6.1.0(postcss@8.4.49): dependencies: browserslist: 4.23.2 - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-convert-values@7.0.2(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-discard-comments@6.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-discard-comments@7.0.1(postcss@8.4.39): + postcss-discard-comments@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-discard-comments@7.0.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-selector-parser: 6.1.1 postcss-discard-duplicates@6.0.3(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-discard-duplicates@7.0.0(postcss@8.4.39): + postcss-discard-duplicates@6.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-discard-duplicates@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-discard-empty@6.0.3(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-discard-empty@7.0.0(postcss@8.4.39): + postcss-discard-empty@6.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-discard-empty@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-discard-overridden@6.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-discard-overridden@7.0.0(postcss@8.4.39): + postcss-discard-overridden@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 - postcss-discard-unused@6.0.5(postcss@8.4.39): + postcss-discard-overridden@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-discard-unused@6.0.5(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-selector-parser: 6.1.1 + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + yaml: 2.6.1 + optionalDependencies: + postcss: 8.4.49 + postcss-loader@7.3.4(postcss@8.4.39)(typescript@5.5.4)(webpack@5.93.0): dependencies: cosmiconfig: 8.3.6(typescript@5.5.4) @@ -11949,10 +13109,10 @@ snapshots: transitivePeerDependencies: - typescript - postcss-merge-idents@6.0.3(postcss@8.4.39): + postcss-merge-idents@6.0.3(postcss@8.4.49): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-merge-longhand@6.0.5(postcss@8.4.39): @@ -11961,11 +13121,17 @@ snapshots: postcss-value-parser: 4.2.0 stylehacks: 6.1.1(postcss@8.4.39) - postcss-merge-longhand@7.0.2(postcss@8.4.39): + postcss-merge-longhand@6.0.5(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.4.49) + + postcss-merge-longhand@7.0.2(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 - stylehacks: 7.0.2(postcss@8.4.39) + stylehacks: 7.0.2(postcss@8.4.49) postcss-merge-rules@6.1.1(postcss@8.4.39): dependencies: @@ -11975,12 +13141,20 @@ snapshots: postcss: 8.4.39 postcss-selector-parser: 6.1.1 - postcss-merge-rules@7.0.2(postcss@8.4.39): + postcss-merge-rules@6.1.1(postcss@8.4.49): dependencies: browserslist: 4.23.2 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + + postcss-merge-rules@7.0.2(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-selector-parser: 6.1.1 postcss-minify-font-values@6.1.0(postcss@8.4.39): @@ -11988,9 +13162,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-minify-font-values@7.0.0(postcss@8.4.39): + postcss-minify-font-values@6.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-font-values@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-minify-gradients@6.0.3(postcss@8.4.39): @@ -12000,11 +13179,18 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.4.39): + postcss-minify-gradients@6.0.3(postcss@8.4.49): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@7.0.0(postcss@8.4.49): + dependencies: + colord: 2.9.3 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.4.39): @@ -12014,11 +13200,18 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.1(postcss@8.4.39): + postcss-minify-params@6.1.0(postcss@8.4.49): dependencies: browserslist: 4.23.2 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-params@7.0.1(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-minify-selectors@6.0.4(postcss@8.4.39): @@ -12026,54 +13219,73 @@ snapshots: postcss: 8.4.39 postcss-selector-parser: 6.1.1 - postcss-minify-selectors@7.0.2(postcss@8.4.39): + postcss-minify-selectors@6.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + + postcss-minify-selectors@7.0.2(postcss@8.4.49): dependencies: cssesc: 3.0.0 - postcss: 8.4.39 + postcss: 8.4.49 postcss-selector-parser: 6.1.1 - postcss-modules-extract-imports@3.1.0(postcss@8.4.39): + postcss-modules-extract-imports@3.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 - postcss-modules-local-by-default@4.0.5(postcss@8.4.39): + postcss-modules-local-by-default@4.0.5(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-selector-parser: 6.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.4.39): + postcss-modules-scope@3.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 postcss-selector-parser: 6.1.1 - postcss-modules-values@4.0.0(postcss@8.4.39): + postcss-modules-values@4.0.0(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 postcss-selector-parser: 6.1.1 + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + postcss-normalize-charset@6.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-normalize-charset@7.0.0(postcss@8.4.39): + postcss-normalize-charset@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-normalize-charset@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-normalize-display-values@6.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-display-values@7.0.0(postcss@8.4.39): + postcss-normalize-display-values@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-display-values@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-positions@6.0.2(postcss@8.4.39): @@ -12081,9 +13293,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.4.39): + postcss-normalize-positions@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-repeat-style@6.0.2(postcss@8.4.39): @@ -12091,9 +13308,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.4.39): + postcss-normalize-repeat-style@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-string@6.0.2(postcss@8.4.39): @@ -12101,9 +13323,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.4.39): + postcss-normalize-string@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-timing-functions@6.0.2(postcss@8.4.39): @@ -12111,9 +13338,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.4.39): + postcss-normalize-timing-functions@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.4.39): @@ -12122,10 +13354,16 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.1(postcss@8.4.39): + postcss-normalize-unicode@6.1.0(postcss@8.4.49): dependencies: browserslist: 4.23.2 - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@7.0.1(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-url@6.0.2(postcss@8.4.39): @@ -12133,9 +13371,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.4.39): + postcss-normalize-url@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-whitespace@6.0.2(postcss@8.4.39): @@ -12143,9 +13386,14 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.4.39): + postcss-normalize-whitespace@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-ordered-values@6.0.2(postcss@8.4.39): @@ -12154,15 +13402,21 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.4.39): + postcss-ordered-values@6.0.2(postcss@8.4.49): dependencies: - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-reduce-idents@6.0.3(postcss@8.4.39): + postcss-ordered-values@7.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.39 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-reduce-idents@6.0.3(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-reduce-initial@6.1.0(postcss@8.4.39): @@ -12171,30 +13425,51 @@ snapshots: caniuse-api: 3.0.0 postcss: 8.4.39 - postcss-reduce-initial@7.0.1(postcss@8.4.39): + postcss-reduce-initial@6.1.0(postcss@8.4.49): dependencies: browserslist: 4.23.2 caniuse-api: 3.0.0 - postcss: 8.4.39 + postcss: 8.4.49 + + postcss-reduce-initial@7.0.1(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + caniuse-api: 3.0.0 + postcss: 8.4.49 postcss-reduce-transforms@6.0.2(postcss@8.4.39): dependencies: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-reduce-transforms@7.0.0(postcss@8.4.39): + postcss-reduce-transforms@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-reduce-transforms@7.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sort-media-queries@5.2.0(postcss@8.4.39): + postcss-selector-parser@6.1.2: dependencies: - postcss: 8.4.39 + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sort-media-queries@5.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 sort-css-media-queries: 2.2.0 postcss-svgo@6.0.3(postcss@8.4.39): @@ -12203,9 +13478,15 @@ snapshots: postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-svgo@7.0.1(postcss@8.4.39): + postcss-svgo@6.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + svgo: 3.3.2 + + postcss-svgo@7.0.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 svgo: 3.3.2 @@ -12214,16 +13495,21 @@ snapshots: postcss: 8.4.39 postcss-selector-parser: 6.1.1 - postcss-unique-selectors@7.0.1(postcss@8.4.39): + postcss-unique-selectors@6.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + + postcss-unique-selectors@7.0.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-selector-parser: 6.1.1 postcss-value-parser@4.2.0: {} - postcss-zindex@6.0.2(postcss@8.4.39): + postcss-zindex@6.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.39 + postcss: 8.4.49 postcss@8.4.39: dependencies: @@ -12231,8 +13517,27 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.6.3): + dependencies: + prettier: 3.4.2 + typescript: 5.6.3 + + prettier-plugin-tailwindcss@0.6.9(prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.6.3))(prettier@3.4.2): + dependencies: + prettier: 3.4.2 + optionalDependencies: + prettier-plugin-organize-imports: 4.1.0(prettier@3.4.2)(typescript@5.6.3) + prettier@3.3.3: {} + prettier@3.4.2: {} + pretty-bytes@6.1.1: {} pretty-error@4.0.0: @@ -12427,6 +13732,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 @@ -12475,6 +13784,16 @@ snapshots: dependencies: '@babel/runtime': 7.24.8 + regex-recursion@4.3.0: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@5.0.2: + dependencies: + regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -12515,6 +13834,12 @@ snapshots: hast-util-to-html: 9.0.1 unified: 11.0.5 + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.1 + unified: 11.0.5 + relateurl@0.2.7: {} remark-directive@3.0.0: @@ -12578,6 +13903,14 @@ snapshots: unified: 11.0.5 vfile: 6.0.2 + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.2 + remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -12624,11 +13957,11 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-dts@6.1.1(rollup@3.29.4)(typescript@5.5.4): + rollup-plugin-dts@6.1.1(rollup@3.29.4)(typescript@5.6.3): dependencies: magic-string: 0.30.10 rollup: 3.29.4 - typescript: 5.5.4 + typescript: 5.6.3 optionalDependencies: '@babel/code-frame': 7.24.7 @@ -12658,6 +13991,31 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 + rollup@4.28.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 + fsevents: 2.3.3 + rrweb-cssom@0.6.0: optional: true @@ -12670,7 +14028,7 @@ snapshots: dependencies: escalade: 3.1.2 picocolors: 1.0.1 - postcss: 8.4.39 + postcss: 8.4.49 strip-json-comments: 3.1.1 run-parallel@1.2.0: @@ -12857,6 +14215,15 @@ snapshots: '@shikijs/core': 1.13.0 '@types/hast': 3.0.4 + shiki@1.24.2: + dependencies: + '@shikijs/core': 1.24.2 + '@shikijs/engine-javascript': 1.24.2 + '@shikijs/engine-oniguruma': 1.24.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -12908,6 +14275,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -13059,12 +14428,28 @@ snapshots: postcss: 8.4.39 postcss-selector-parser: 6.1.1 - stylehacks@7.0.2(postcss@8.4.39): + stylehacks@6.1.1(postcss@8.4.49): dependencies: browserslist: 4.23.2 - postcss: 8.4.39 + postcss: 8.4.49 postcss-selector-parser: 6.1.1 + stylehacks@7.0.2(postcss@8.4.49): + dependencies: + browserslist: 4.23.2 + postcss: 8.4.49 + postcss-selector-parser: 6.1.1 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -13094,6 +14479,33 @@ snapshots: symbol-tree@3.2.4: optional: true + tailwindcss@3.4.16: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + tapable@1.1.3: {} tapable@2.2.1: {} @@ -13124,6 +14536,14 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + thunky@1.1.0: {} tiny-invariant@1.3.3: {} @@ -13165,6 +14585,8 @@ snapshots: trough@2.2.0: {} + ts-interface-checker@0.1.13: {} + tslib@2.6.3: {} tsx@4.17.0: @@ -13174,6 +14596,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tsx@4.19.2: + dependencies: + esbuild: 0.23.0 + get-tsconfig: 4.7.5 + optionalDependencies: + fsevents: 2.3.3 + type-fest@1.4.0: {} type-fest@2.19.0: {} @@ -13221,6 +14650,8 @@ snapshots: typescript@5.5.4: {} + typescript@5.6.3: {} + ufo@1.5.4: {} unbox-primitive@1.0.2: @@ -13230,7 +14661,7 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - unbuild@2.0.0(typescript@5.5.4): + unbuild@2.0.0(typescript@5.6.3): dependencies: '@rollup/plugin-alias': 5.1.0(rollup@3.29.4) '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.4) @@ -13247,23 +14678,25 @@ snapshots: hookable: 5.5.3 jiti: 1.21.6 magic-string: 0.30.10 - mkdist: 1.5.4(typescript@5.5.4) + mkdist: 1.5.4(typescript@5.6.3) mlly: 1.7.1 pathe: 1.1.2 pkg-types: 1.1.3 pretty-bytes: 6.1.1 rollup: 3.29.4 - rollup-plugin-dts: 6.1.1(rollup@3.29.4)(typescript@5.5.4) + rollup-plugin-dts: 6.1.1(rollup@3.29.4)(typescript@5.6.3) scule: 1.3.0 untyped: 1.4.2 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - sass - supports-color - vue-tsc - undici-types@6.18.2: {} + undici-types@6.19.8: {} + + undici-types@6.20.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -13349,6 +14782,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + update-notifier@6.0.2: dependencies: boxen: 7.1.1 @@ -13420,13 +14859,13 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@2.0.5(@types/node@22.3.0)(terser@5.31.6): + vite-node@2.0.5(@types/node@20.17.10)(terser@5.31.6): dependencies: cac: 6.7.14 debug: 4.3.5 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.3.4(@types/node@22.3.0)(terser@5.31.6) + vite: 5.3.4(@types/node@20.17.10)(terser@5.31.6) transitivePeerDependencies: - '@types/node' - less @@ -13437,17 +14876,30 @@ snapshots: - supports-color - terser - vite@5.3.4(@types/node@22.3.0)(terser@5.31.6): + vite@5.3.4(@types/node@20.17.10)(terser@5.31.6): dependencies: esbuild: 0.21.5 - postcss: 8.4.39 + postcss: 8.4.49 rollup: 4.18.1 optionalDependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 + fsevents: 2.3.3 + terser: 5.31.6 + + vite@6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.31.6)(tsx@4.19.2)(yaml@2.6.1): + dependencies: + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.28.1 + optionalDependencies: + '@types/node': 22.10.2 fsevents: 2.3.3 + jiti: 1.21.6 terser: 5.31.6 + tsx: 4.19.2 + yaml: 2.6.1 - vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.1)(terser@5.31.6): + vitest@2.0.5(@types/node@20.17.10)(jsdom@24.1.1)(terser@5.31.6): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 @@ -13465,11 +14917,11 @@ snapshots: tinybench: 2.8.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.3.4(@types/node@22.3.0)(terser@5.31.6) - vite-node: 2.0.5(@types/node@22.3.0)(terser@5.31.6) + vite: 5.3.4(@types/node@20.17.10)(terser@5.31.6) + vite-node: 2.0.5(@types/node@20.17.10)(terser@5.31.6) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.3.0 + '@types/node': 20.17.10 jsdom: 24.1.1 transitivePeerDependencies: - less @@ -13491,6 +14943,10 @@ snapshots: vscode-languageserver-types@3.17.5: {} + vscode-oniguruma@2.0.1: {} + + vscode-textmate@9.1.0: {} + w3c-keyname@2.2.8: {} w3c-xmlserializer@5.0.0: @@ -13683,6 +15139,12 @@ snapshots: wildcard@2.0.1: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 @@ -13718,6 +15180,8 @@ snapshots: yaml@1.10.2: {} + yaml@2.6.1: {} + yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d0dc15bf..238f9467 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'packages/*' - 'moonbit-docs' + - 'moonbit-tour'