From 904c984479a478372d840281f1b8452fac30c274 Mon Sep 17 00:00:00 2001 From: Owais Jamil Date: Thu, 11 Jun 2026 15:00:00 -0500 Subject: [PATCH] docs: split up --- CHANGELOG.md | 2 +- README.md | 13 +- docs/.gitignore | 5 +- docs/{ => book}/book.toml | 3 + docs/book/src/SUMMARY.md | 64 + docs/{ => book}/src/assets/css/custom.css | 0 .../src/assets/fonts/Outfit-Variable.woff2 | Bin .../src/assets/fonts/Switzer-Variable.woff2 | Bin .../assets/fonts/Switzer-VariableItalic.woff2 | Bin docs/{ => book}/src/chapter_1.md | 0 .../src/chapter_1/compiler_notes.md | 0 .../custom_types_records_tuples_lists.md | 0 .../src/chapter_1/functional_programming.md | 0 .../chapter_1/functions_values_expressions.md | 0 .../src/chapter_1/mods_imports_pkgs.md | 0 .../src/chapter_1/pattern_matching.md | 0 .../src/chapter_1/type_system_inference.md | 0 docs/{ => book}/src/chapter_10.md | 0 .../src/chapter_10/arena_allocator.md | 0 .../src/chapter_10/collector_families.md | 0 .../src/chapter_10/growth_and_failure.md | 0 .../src/chapter_10/host_pointers.md | 0 docs/{ => book}/src/chapter_2.md | 0 docs/{ => book}/src/chapter_2/bottom_up.md | 0 .../src/chapter_2/finite_state_machines.md | 0 .../{ => book}/src/chapter_2/gleam_grammar.md | 0 .../src/chapter_2/lexical_analysis.md | 0 docs/{ => book}/src/chapter_2/lexing.md | 0 docs/{ => book}/src/chapter_2/parsing.md | 0 docs/{ => book}/src/chapter_2/regex.md | 0 docs/{ => book}/src/chapter_2/syntax_trees.md | 0 docs/{ => book}/src/chapter_2/top_down.md | 0 docs/{ => book}/src/chapter_3.md | 0 .../src/chapter_3/current_resolver.md | 0 .../{ => book}/src/chapter_3/lexical_scope.md | 0 .../src/chapter_3/namespaces_and_imports.md | 0 .../chapter_3/patterns_visibility_packages.md | 0 .../src/chapter_3/symbols_and_scopes.md | 0 docs/{ => book}/src/chapter_4.md | 0 .../src/chapter_4/algebraic_data_types.md | 0 .../src/chapter_4/calls_operators_branches.md | 0 .../chapter_4/local_top_level_inference.md | 0 .../src/chapter_4/module_interfaces.md | 0 .../src/chapter_4/patterns_imports_opaque.md | 0 .../chapter_4/unification_and_substitution.md | 0 docs/{ => book}/src/chapter_5.md | 0 docs/{ => book}/src/chapter_6.md | 0 docs/{ => book}/src/chapter_7.md | 0 .../memory_tables_imports_exports.md | 0 .../src/chapter_7/modules_stack_machine.md | 0 .../src/chapter_7/running_wasmtime_browser.md | 0 .../src/chapter_7/text_binary_format.md | 0 docs/{ => book}/src/chapter_8.md | 0 .../src/chapter_8/binding_variables.md | 0 .../chapter_8/compiling_pattern_matching.md | 0 .../chapter_8/exhaustiveness_diagnostics.md | 0 docs/{ => book}/src/chapter_9.md | 0 .../src/chapter_9/artifacts_execution.md | 0 .../src/chapter_9/pass_pipeline_invariants.md | 0 .../src/chapter_9/phase_boundaries.md | 0 .../src/chapter_9/project_to_modules.md | 0 docs/{ => book}/src/favicon.png | Bin docs/{ => book}/src/favicon.svg | 0 docs/{ => book}/src/introduction.md | 7 +- docs/{ => book}/theme/book.js | 0 docs/{ => book}/theme/css/chrome.css | 0 docs/{ => book}/theme/css/general.css | 0 docs/{ => book}/theme/css/print.css | 0 docs/{ => book}/theme/css/variables.css | 0 docs/{ => book}/theme/highlight.css | 0 docs/{ => book}/theme/highlight.js | 0 docs/{ => book}/theme/index.hbs | 0 docs/internal/README.md | 30 + ...14_project_compilation_and_dependencies.md | 0 .../specs/15_stdlib_and_host_interop.md | 2 +- .../internal/specs/16_js_host_abi.md | 0 .../specs/17_cli_and_build_outputs.md | 9 +- .../internal/specs/18_example_projects.md | 0 .../specs/19_runtime_memory_hardening.md | 0 .../internal/specs/20_wasi_host_abi.md | 0 ...14_project_compilation_and_dependencies.md | 0 .../tasks/15_stdlib_and_host_interop.md | 0 .../internal/tasks/16_js_host_abi.md | 0 .../tasks/17_cli_and_build_outputs.md | 0 .../tasks/18_lustre_weather_example.md | 0 .../tasks/19_wisp_static_data_api_example.md | 0 .../tasks/20_runtime_memory_hardening.md | 0 .../internal/tasks/21_wasi_host_abi.md | 0 docs/src/SUMMARY.md | 131 -- docs/website/.vitepress/config.mts | 82 + docs/website/.vitepress/theme/custom.css | 52 + docs/website/.vitepress/theme/index.ts | 5 + .../CHANGELOG.md => website/changelog.md} | 0 .../development/core-ir.md} | 0 docs/website/development/index.md | 26 + .../development/runtime-memory.md} | 4 +- .../development/runtime-representation.md} | 0 .../development}/testing.md | 3 +- .../development/wasm-backend-and-runtime.md} | 2 +- docs/website/guide/examples.md | 32 + docs/website/guide/index.md | 13 + docs/website/guide/installation.md | 39 + docs/{src => website/guide}/usage.md | 14 +- docs/website/index.md | 27 + docs/website/package.json | 14 + docs/website/pnpm-lock.yaml | 1641 +++++++++++++++++ docs/website/pnpm-workspace.yaml | 2 + docs/website/public/favicon.svg | 16 + .../public/fonts/Switzer-Variable.woff2 | Bin 0 -> 43220 bytes .../reference/cli-and-build-outputs.md} | 2 +- .../reference}/closures.md | 0 .../reference/full-gleam-syntax.md} | 0 .../reference/full-name-resolution.md} | 0 .../reference/gleam-types-and-interfaces.md} | 0 docs/website/reference/index.md | 19 + .../reference/pattern-matching.md} | 0 .../reference/project-model-and-modules.md} | 0 .../reference/supported-subset.md} | 0 .../reference/type-and-generic-inference.md} | 0 119 files changed, 2096 insertions(+), 163 deletions(-) rename docs/{ => book}/book.toml (91%) create mode 100644 docs/book/src/SUMMARY.md rename docs/{ => book}/src/assets/css/custom.css (100%) rename docs/{ => book}/src/assets/fonts/Outfit-Variable.woff2 (100%) rename docs/{ => book}/src/assets/fonts/Switzer-Variable.woff2 (100%) rename docs/{ => book}/src/assets/fonts/Switzer-VariableItalic.woff2 (100%) rename docs/{ => book}/src/chapter_1.md (100%) rename docs/{ => book}/src/chapter_1/compiler_notes.md (100%) rename docs/{ => book}/src/chapter_1/custom_types_records_tuples_lists.md (100%) rename docs/{ => book}/src/chapter_1/functional_programming.md (100%) rename docs/{ => book}/src/chapter_1/functions_values_expressions.md (100%) rename docs/{ => book}/src/chapter_1/mods_imports_pkgs.md (100%) rename docs/{ => book}/src/chapter_1/pattern_matching.md (100%) rename docs/{ => book}/src/chapter_1/type_system_inference.md (100%) rename docs/{ => book}/src/chapter_10.md (100%) rename docs/{ => book}/src/chapter_10/arena_allocator.md (100%) rename docs/{ => book}/src/chapter_10/collector_families.md (100%) rename docs/{ => book}/src/chapter_10/growth_and_failure.md (100%) rename docs/{ => book}/src/chapter_10/host_pointers.md (100%) rename docs/{ => book}/src/chapter_2.md (100%) rename docs/{ => book}/src/chapter_2/bottom_up.md (100%) rename docs/{ => book}/src/chapter_2/finite_state_machines.md (100%) rename docs/{ => book}/src/chapter_2/gleam_grammar.md (100%) rename docs/{ => book}/src/chapter_2/lexical_analysis.md (100%) rename docs/{ => book}/src/chapter_2/lexing.md (100%) rename docs/{ => book}/src/chapter_2/parsing.md (100%) rename docs/{ => book}/src/chapter_2/regex.md (100%) rename docs/{ => book}/src/chapter_2/syntax_trees.md (100%) rename docs/{ => book}/src/chapter_2/top_down.md (100%) rename docs/{ => book}/src/chapter_3.md (100%) rename docs/{ => book}/src/chapter_3/current_resolver.md (100%) rename docs/{ => book}/src/chapter_3/lexical_scope.md (100%) rename docs/{ => book}/src/chapter_3/namespaces_and_imports.md (100%) rename docs/{ => book}/src/chapter_3/patterns_visibility_packages.md (100%) rename docs/{ => book}/src/chapter_3/symbols_and_scopes.md (100%) rename docs/{ => book}/src/chapter_4.md (100%) rename docs/{ => book}/src/chapter_4/algebraic_data_types.md (100%) rename docs/{ => book}/src/chapter_4/calls_operators_branches.md (100%) rename docs/{ => book}/src/chapter_4/local_top_level_inference.md (100%) rename docs/{ => book}/src/chapter_4/module_interfaces.md (100%) rename docs/{ => book}/src/chapter_4/patterns_imports_opaque.md (100%) rename docs/{ => book}/src/chapter_4/unification_and_substitution.md (100%) rename docs/{ => book}/src/chapter_5.md (100%) rename docs/{ => book}/src/chapter_6.md (100%) rename docs/{ => book}/src/chapter_7.md (100%) rename docs/{ => book}/src/chapter_7/memory_tables_imports_exports.md (100%) rename docs/{ => book}/src/chapter_7/modules_stack_machine.md (100%) rename docs/{ => book}/src/chapter_7/running_wasmtime_browser.md (100%) rename docs/{ => book}/src/chapter_7/text_binary_format.md (100%) rename docs/{ => book}/src/chapter_8.md (100%) rename docs/{ => book}/src/chapter_8/binding_variables.md (100%) rename docs/{ => book}/src/chapter_8/compiling_pattern_matching.md (100%) rename docs/{ => book}/src/chapter_8/exhaustiveness_diagnostics.md (100%) rename docs/{ => book}/src/chapter_9.md (100%) rename docs/{ => book}/src/chapter_9/artifacts_execution.md (100%) rename docs/{ => book}/src/chapter_9/pass_pipeline_invariants.md (100%) rename docs/{ => book}/src/chapter_9/phase_boundaries.md (100%) rename docs/{ => book}/src/chapter_9/project_to_modules.md (100%) rename docs/{ => book}/src/favicon.png (100%) rename docs/{ => book}/src/favicon.svg (100%) rename docs/{ => book}/src/introduction.md (91%) rename docs/{ => book}/theme/book.js (100%) rename docs/{ => book}/theme/css/chrome.css (100%) rename docs/{ => book}/theme/css/general.css (100%) rename docs/{ => book}/theme/css/print.css (100%) rename docs/{ => book}/theme/css/variables.css (100%) rename docs/{ => book}/theme/highlight.css (100%) rename docs/{ => book}/theme/highlight.js (100%) rename docs/{ => book}/theme/index.hbs (100%) create mode 100644 docs/internal/README.md rename docs/{src => }/internal/specs/14_project_compilation_and_dependencies.md (100%) rename docs/{src => }/internal/specs/15_stdlib_and_host_interop.md (99%) rename docs/{src => }/internal/specs/16_js_host_abi.md (100%) rename docs/{src => }/internal/specs/17_cli_and_build_outputs.md (89%) rename docs/{src => }/internal/specs/18_example_projects.md (100%) rename docs/{src => }/internal/specs/19_runtime_memory_hardening.md (100%) rename docs/{src => }/internal/specs/20_wasi_host_abi.md (100%) rename docs/{src => }/internal/tasks/14_project_compilation_and_dependencies.md (100%) rename docs/{src => }/internal/tasks/15_stdlib_and_host_interop.md (100%) rename docs/{src => }/internal/tasks/16_js_host_abi.md (100%) rename docs/{src => }/internal/tasks/17_cli_and_build_outputs.md (100%) rename docs/{src => }/internal/tasks/18_lustre_weather_example.md (100%) rename docs/{src => }/internal/tasks/19_wisp_static_data_api_example.md (100%) rename docs/{src => }/internal/tasks/20_runtime_memory_hardening.md (100%) rename docs/{src => }/internal/tasks/21_wasi_host_abi.md (100%) delete mode 100644 docs/src/SUMMARY.md create mode 100644 docs/website/.vitepress/config.mts create mode 100644 docs/website/.vitepress/theme/custom.css create mode 100644 docs/website/.vitepress/theme/index.ts rename docs/{src/CHANGELOG.md => website/changelog.md} (100%) rename docs/{src/internal/development/architecture/core_ir.md => website/development/core-ir.md} (100%) create mode 100644 docs/website/development/index.md rename docs/{src/internal/development/runtime_memory_management.md => website/development/runtime-memory.md} (93%) rename docs/{src/internal/development/architecture/runtime_representation.md => website/development/runtime-representation.md} (100%) rename docs/{src/internal/development/contributor => website/development}/testing.md (98%) rename docs/{src/internal/development/architecture/wasm_backend_and_runtime.md => website/development/wasm-backend-and-runtime.md} (98%) create mode 100644 docs/website/guide/examples.md create mode 100644 docs/website/guide/index.md create mode 100644 docs/website/guide/installation.md rename docs/{src => website/guide}/usage.md (82%) create mode 100644 docs/website/index.md create mode 100644 docs/website/package.json create mode 100644 docs/website/pnpm-lock.yaml create mode 100644 docs/website/pnpm-workspace.yaml create mode 100644 docs/website/public/favicon.svg create mode 100644 docs/website/public/fonts/Switzer-Variable.woff2 rename docs/{src/internal/development/cli_and_build_outputs.md => website/reference/cli-and-build-outputs.md} (97%) rename docs/{src/internal/development => website/reference}/closures.md (100%) rename docs/{src/internal/development/full_gleam_syntax.md => website/reference/full-gleam-syntax.md} (100%) rename docs/{src/internal/development/full_name_resolution.md => website/reference/full-name-resolution.md} (100%) rename docs/{src/internal/development/gleam_types_and_interfaces.md => website/reference/gleam-types-and-interfaces.md} (100%) create mode 100644 docs/website/reference/index.md rename docs/{src/internal/development/pattern_matching.md => website/reference/pattern-matching.md} (100%) rename docs/{src/internal/development/project_model_and_modules.md => website/reference/project-model-and-modules.md} (100%) rename docs/{src/internal/supported_subset.md => website/reference/supported-subset.md} (100%) rename docs/{src/internal/development/type_and_generic_inference.md => website/reference/type-and-generic-inference.md} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9602cb9..e4642f4 120000 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1 @@ -docs/src/CHANGELOG.md \ No newline at end of file +docs/website/changelog.md \ No newline at end of file diff --git a/README.md b/README.md index 6630ba0..84484a1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Regulus ("Reggie") is an experimental Gleam to WebAssembly compiler written in Rust. -Reggie +Reggie The compiler uses tree-sitter to parse Gleam source, builds compiler-owned data structures, lowers a supported subset of Gleam to core IR, and emits `.wasm` @@ -88,8 +88,9 @@ that each layer can be tested and explained. - [ ] Provide complete WASI adapters - [ ] Add garbage collection, reference counting, or heap growth checks -For more detail, see the book in [docs](./docs/src/introduction.md) and the -current [supported subset](./docs/src/internal/supported_subset.md). +For more detail, see the case-study book in +[docs/book](./docs/book/src/introduction.md) and the user/development docs in +[docs/website](./docs/website/index.md). ## Usage @@ -111,5 +112,9 @@ expressions, IR, and WAT. ```sh cargo fmt cargo test -mdbook build docs +mdbook build docs/book + +cd docs/website +pnpm install +pnpm docs:dev ``` diff --git a/docs/.gitignore b/docs/.gitignore index e9c0728..1b19b94 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1 +1,4 @@ -book \ No newline at end of file +book/dist +website/node_modules +website/.vitepress/cache +website/.vitepress/dist diff --git a/docs/book.toml b/docs/book/book.toml similarity index 91% rename from docs/book.toml rename to docs/book/book.toml index f72d87c..4f71a7b 100644 --- a/docs/book.toml +++ b/docs/book/book.toml @@ -3,6 +3,9 @@ title = "Compiling Gleam to WebAssembly" authors = ["Owais Jamil"] language = "en" +[build] +build-dir = "dist" + [output.html] theme = "theme" default-theme = "day" diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md new file mode 100644 index 0000000..6f40268 --- /dev/null +++ b/docs/book/src/SUMMARY.md @@ -0,0 +1,64 @@ +# Summary + +- [Introduction](./introduction.md) +- [The Gleam Programming Language](./chapter_1.md) + - [Modules, imports, and packages](./chapter_1/mods_imports_pkgs.md) + - [Functional programming in Gleam](./chapter_1/functional_programming.md) + - [Values and expressions](./chapter_1/functions_values_expressions.md) + - [Types and inference](./chapter_1/type_system_inference.md) + - [Custom types and records](./chapter_1/custom_types_records_tuples_lists.md) + - [Pattern matching](./chapter_1/pattern_matching.md) + - [Compiler notes](./chapter_1/compiler_notes.md) +- [Compiler architecture](./chapter_9.md) + - [Phase boundaries](./chapter_9/phase_boundaries.md) + - [Pass pipelines and invariants](./chapter_9/pass_pipeline_invariants.md) + - [Project input and module graph](./chapter_9/project_to_modules.md) + - [Artifacts and execution](./chapter_9/artifacts_execution.md) +- [Lexing, parsing, and syntax trees](./chapter_2.md) + - [Lexical Analysis](./chapter_2/lexical_analysis.md) + - [Lexing](./chapter_2/lexing.md) + - [Parsing](./chapter_2/parsing.md) + - [Top-Down Parsers](./chapter_2/top_down.md) + - [Bottom-Up Parsers](./chapter_2/bottom_up.md) + - [Finite-State Machines](./chapter_2/finite_state_machines.md) + - [Regular Expressions](./chapter_2/regex.md) + - [Syntax Trees](./chapter_2/syntax_trees.md) + - [Grammars](./chapter_2/gleam_grammar.md) +- [Name Resolution](./chapter_3.md) + - [Lexical scope and shadowing](./chapter_3/lexical_scope.md) + - [Symbols and scopes](./chapter_3/symbols_and_scopes.md) + - [Namespaces and imports](./chapter_3/namespaces_and_imports.md) + - [Patterns and visibility](./chapter_3/patterns_visibility_packages.md) + - [The current resolver](./chapter_3/current_resolver.md) +- [Type Checking & Inference](./chapter_4.md) + - [Local and top-level inference](./chapter_4/local_top_level_inference.md) + - [Algebraic data types](./chapter_4/algebraic_data_types.md) + - [Unification and substitution](./chapter_4/unification_and_substitution.md) + - [Calls, operators, and branches](./chapter_4/calls_operators_branches.md) + - [Patterns and imports](./chapter_4/patterns_imports_opaque.md) + - [Module interfaces](./chapter_4/module_interfaces.md) +- [Pattern matching](./chapter_8.md) + - [Compiling pattern matching](./chapter_8/compiling_pattern_matching.md) + - [Binding variables](./chapter_8/binding_variables.md) + - [Exhaustiveness diagnostics](./chapter_8/exhaustiveness_diagnostics.md) +- [IR & Lowering](./chapter_5.md) +- [Runtime Value Representation](./chapter_6.md) +- [Runtime Memory Management](./chapter_10.md) + - [The arena allocator](./chapter_10/arena_allocator.md) + - [Growth and allocation failure](./chapter_10/growth_and_failure.md) + - [Host pointers and reset boundaries](./chapter_10/host_pointers.md) + - [Future collectors](./chapter_10/collector_families.md) +- [WebAssembly Code Gen](./chapter_7.md) + - [Modules and stack machine](./chapter_7/modules_stack_machine.md) + - [Text and binary formats](./chapter_7/text_binary_format.md) + - [Memory and module boundaries](./chapter_7/memory_tables_imports_exports.md) + - [Wasmtime and browser](./chapter_7/running_wasmtime_browser.md) + + diff --git a/docs/src/assets/css/custom.css b/docs/book/src/assets/css/custom.css similarity index 100% rename from docs/src/assets/css/custom.css rename to docs/book/src/assets/css/custom.css diff --git a/docs/src/assets/fonts/Outfit-Variable.woff2 b/docs/book/src/assets/fonts/Outfit-Variable.woff2 similarity index 100% rename from docs/src/assets/fonts/Outfit-Variable.woff2 rename to docs/book/src/assets/fonts/Outfit-Variable.woff2 diff --git a/docs/src/assets/fonts/Switzer-Variable.woff2 b/docs/book/src/assets/fonts/Switzer-Variable.woff2 similarity index 100% rename from docs/src/assets/fonts/Switzer-Variable.woff2 rename to docs/book/src/assets/fonts/Switzer-Variable.woff2 diff --git a/docs/src/assets/fonts/Switzer-VariableItalic.woff2 b/docs/book/src/assets/fonts/Switzer-VariableItalic.woff2 similarity index 100% rename from docs/src/assets/fonts/Switzer-VariableItalic.woff2 rename to docs/book/src/assets/fonts/Switzer-VariableItalic.woff2 diff --git a/docs/src/chapter_1.md b/docs/book/src/chapter_1.md similarity index 100% rename from docs/src/chapter_1.md rename to docs/book/src/chapter_1.md diff --git a/docs/src/chapter_1/compiler_notes.md b/docs/book/src/chapter_1/compiler_notes.md similarity index 100% rename from docs/src/chapter_1/compiler_notes.md rename to docs/book/src/chapter_1/compiler_notes.md diff --git a/docs/src/chapter_1/custom_types_records_tuples_lists.md b/docs/book/src/chapter_1/custom_types_records_tuples_lists.md similarity index 100% rename from docs/src/chapter_1/custom_types_records_tuples_lists.md rename to docs/book/src/chapter_1/custom_types_records_tuples_lists.md diff --git a/docs/src/chapter_1/functional_programming.md b/docs/book/src/chapter_1/functional_programming.md similarity index 100% rename from docs/src/chapter_1/functional_programming.md rename to docs/book/src/chapter_1/functional_programming.md diff --git a/docs/src/chapter_1/functions_values_expressions.md b/docs/book/src/chapter_1/functions_values_expressions.md similarity index 100% rename from docs/src/chapter_1/functions_values_expressions.md rename to docs/book/src/chapter_1/functions_values_expressions.md diff --git a/docs/src/chapter_1/mods_imports_pkgs.md b/docs/book/src/chapter_1/mods_imports_pkgs.md similarity index 100% rename from docs/src/chapter_1/mods_imports_pkgs.md rename to docs/book/src/chapter_1/mods_imports_pkgs.md diff --git a/docs/src/chapter_1/pattern_matching.md b/docs/book/src/chapter_1/pattern_matching.md similarity index 100% rename from docs/src/chapter_1/pattern_matching.md rename to docs/book/src/chapter_1/pattern_matching.md diff --git a/docs/src/chapter_1/type_system_inference.md b/docs/book/src/chapter_1/type_system_inference.md similarity index 100% rename from docs/src/chapter_1/type_system_inference.md rename to docs/book/src/chapter_1/type_system_inference.md diff --git a/docs/src/chapter_10.md b/docs/book/src/chapter_10.md similarity index 100% rename from docs/src/chapter_10.md rename to docs/book/src/chapter_10.md diff --git a/docs/src/chapter_10/arena_allocator.md b/docs/book/src/chapter_10/arena_allocator.md similarity index 100% rename from docs/src/chapter_10/arena_allocator.md rename to docs/book/src/chapter_10/arena_allocator.md diff --git a/docs/src/chapter_10/collector_families.md b/docs/book/src/chapter_10/collector_families.md similarity index 100% rename from docs/src/chapter_10/collector_families.md rename to docs/book/src/chapter_10/collector_families.md diff --git a/docs/src/chapter_10/growth_and_failure.md b/docs/book/src/chapter_10/growth_and_failure.md similarity index 100% rename from docs/src/chapter_10/growth_and_failure.md rename to docs/book/src/chapter_10/growth_and_failure.md diff --git a/docs/src/chapter_10/host_pointers.md b/docs/book/src/chapter_10/host_pointers.md similarity index 100% rename from docs/src/chapter_10/host_pointers.md rename to docs/book/src/chapter_10/host_pointers.md diff --git a/docs/src/chapter_2.md b/docs/book/src/chapter_2.md similarity index 100% rename from docs/src/chapter_2.md rename to docs/book/src/chapter_2.md diff --git a/docs/src/chapter_2/bottom_up.md b/docs/book/src/chapter_2/bottom_up.md similarity index 100% rename from docs/src/chapter_2/bottom_up.md rename to docs/book/src/chapter_2/bottom_up.md diff --git a/docs/src/chapter_2/finite_state_machines.md b/docs/book/src/chapter_2/finite_state_machines.md similarity index 100% rename from docs/src/chapter_2/finite_state_machines.md rename to docs/book/src/chapter_2/finite_state_machines.md diff --git a/docs/src/chapter_2/gleam_grammar.md b/docs/book/src/chapter_2/gleam_grammar.md similarity index 100% rename from docs/src/chapter_2/gleam_grammar.md rename to docs/book/src/chapter_2/gleam_grammar.md diff --git a/docs/src/chapter_2/lexical_analysis.md b/docs/book/src/chapter_2/lexical_analysis.md similarity index 100% rename from docs/src/chapter_2/lexical_analysis.md rename to docs/book/src/chapter_2/lexical_analysis.md diff --git a/docs/src/chapter_2/lexing.md b/docs/book/src/chapter_2/lexing.md similarity index 100% rename from docs/src/chapter_2/lexing.md rename to docs/book/src/chapter_2/lexing.md diff --git a/docs/src/chapter_2/parsing.md b/docs/book/src/chapter_2/parsing.md similarity index 100% rename from docs/src/chapter_2/parsing.md rename to docs/book/src/chapter_2/parsing.md diff --git a/docs/src/chapter_2/regex.md b/docs/book/src/chapter_2/regex.md similarity index 100% rename from docs/src/chapter_2/regex.md rename to docs/book/src/chapter_2/regex.md diff --git a/docs/src/chapter_2/syntax_trees.md b/docs/book/src/chapter_2/syntax_trees.md similarity index 100% rename from docs/src/chapter_2/syntax_trees.md rename to docs/book/src/chapter_2/syntax_trees.md diff --git a/docs/src/chapter_2/top_down.md b/docs/book/src/chapter_2/top_down.md similarity index 100% rename from docs/src/chapter_2/top_down.md rename to docs/book/src/chapter_2/top_down.md diff --git a/docs/src/chapter_3.md b/docs/book/src/chapter_3.md similarity index 100% rename from docs/src/chapter_3.md rename to docs/book/src/chapter_3.md diff --git a/docs/src/chapter_3/current_resolver.md b/docs/book/src/chapter_3/current_resolver.md similarity index 100% rename from docs/src/chapter_3/current_resolver.md rename to docs/book/src/chapter_3/current_resolver.md diff --git a/docs/src/chapter_3/lexical_scope.md b/docs/book/src/chapter_3/lexical_scope.md similarity index 100% rename from docs/src/chapter_3/lexical_scope.md rename to docs/book/src/chapter_3/lexical_scope.md diff --git a/docs/src/chapter_3/namespaces_and_imports.md b/docs/book/src/chapter_3/namespaces_and_imports.md similarity index 100% rename from docs/src/chapter_3/namespaces_and_imports.md rename to docs/book/src/chapter_3/namespaces_and_imports.md diff --git a/docs/src/chapter_3/patterns_visibility_packages.md b/docs/book/src/chapter_3/patterns_visibility_packages.md similarity index 100% rename from docs/src/chapter_3/patterns_visibility_packages.md rename to docs/book/src/chapter_3/patterns_visibility_packages.md diff --git a/docs/src/chapter_3/symbols_and_scopes.md b/docs/book/src/chapter_3/symbols_and_scopes.md similarity index 100% rename from docs/src/chapter_3/symbols_and_scopes.md rename to docs/book/src/chapter_3/symbols_and_scopes.md diff --git a/docs/src/chapter_4.md b/docs/book/src/chapter_4.md similarity index 100% rename from docs/src/chapter_4.md rename to docs/book/src/chapter_4.md diff --git a/docs/src/chapter_4/algebraic_data_types.md b/docs/book/src/chapter_4/algebraic_data_types.md similarity index 100% rename from docs/src/chapter_4/algebraic_data_types.md rename to docs/book/src/chapter_4/algebraic_data_types.md diff --git a/docs/src/chapter_4/calls_operators_branches.md b/docs/book/src/chapter_4/calls_operators_branches.md similarity index 100% rename from docs/src/chapter_4/calls_operators_branches.md rename to docs/book/src/chapter_4/calls_operators_branches.md diff --git a/docs/src/chapter_4/local_top_level_inference.md b/docs/book/src/chapter_4/local_top_level_inference.md similarity index 100% rename from docs/src/chapter_4/local_top_level_inference.md rename to docs/book/src/chapter_4/local_top_level_inference.md diff --git a/docs/src/chapter_4/module_interfaces.md b/docs/book/src/chapter_4/module_interfaces.md similarity index 100% rename from docs/src/chapter_4/module_interfaces.md rename to docs/book/src/chapter_4/module_interfaces.md diff --git a/docs/src/chapter_4/patterns_imports_opaque.md b/docs/book/src/chapter_4/patterns_imports_opaque.md similarity index 100% rename from docs/src/chapter_4/patterns_imports_opaque.md rename to docs/book/src/chapter_4/patterns_imports_opaque.md diff --git a/docs/src/chapter_4/unification_and_substitution.md b/docs/book/src/chapter_4/unification_and_substitution.md similarity index 100% rename from docs/src/chapter_4/unification_and_substitution.md rename to docs/book/src/chapter_4/unification_and_substitution.md diff --git a/docs/src/chapter_5.md b/docs/book/src/chapter_5.md similarity index 100% rename from docs/src/chapter_5.md rename to docs/book/src/chapter_5.md diff --git a/docs/src/chapter_6.md b/docs/book/src/chapter_6.md similarity index 100% rename from docs/src/chapter_6.md rename to docs/book/src/chapter_6.md diff --git a/docs/src/chapter_7.md b/docs/book/src/chapter_7.md similarity index 100% rename from docs/src/chapter_7.md rename to docs/book/src/chapter_7.md diff --git a/docs/src/chapter_7/memory_tables_imports_exports.md b/docs/book/src/chapter_7/memory_tables_imports_exports.md similarity index 100% rename from docs/src/chapter_7/memory_tables_imports_exports.md rename to docs/book/src/chapter_7/memory_tables_imports_exports.md diff --git a/docs/src/chapter_7/modules_stack_machine.md b/docs/book/src/chapter_7/modules_stack_machine.md similarity index 100% rename from docs/src/chapter_7/modules_stack_machine.md rename to docs/book/src/chapter_7/modules_stack_machine.md diff --git a/docs/src/chapter_7/running_wasmtime_browser.md b/docs/book/src/chapter_7/running_wasmtime_browser.md similarity index 100% rename from docs/src/chapter_7/running_wasmtime_browser.md rename to docs/book/src/chapter_7/running_wasmtime_browser.md diff --git a/docs/src/chapter_7/text_binary_format.md b/docs/book/src/chapter_7/text_binary_format.md similarity index 100% rename from docs/src/chapter_7/text_binary_format.md rename to docs/book/src/chapter_7/text_binary_format.md diff --git a/docs/src/chapter_8.md b/docs/book/src/chapter_8.md similarity index 100% rename from docs/src/chapter_8.md rename to docs/book/src/chapter_8.md diff --git a/docs/src/chapter_8/binding_variables.md b/docs/book/src/chapter_8/binding_variables.md similarity index 100% rename from docs/src/chapter_8/binding_variables.md rename to docs/book/src/chapter_8/binding_variables.md diff --git a/docs/src/chapter_8/compiling_pattern_matching.md b/docs/book/src/chapter_8/compiling_pattern_matching.md similarity index 100% rename from docs/src/chapter_8/compiling_pattern_matching.md rename to docs/book/src/chapter_8/compiling_pattern_matching.md diff --git a/docs/src/chapter_8/exhaustiveness_diagnostics.md b/docs/book/src/chapter_8/exhaustiveness_diagnostics.md similarity index 100% rename from docs/src/chapter_8/exhaustiveness_diagnostics.md rename to docs/book/src/chapter_8/exhaustiveness_diagnostics.md diff --git a/docs/src/chapter_9.md b/docs/book/src/chapter_9.md similarity index 100% rename from docs/src/chapter_9.md rename to docs/book/src/chapter_9.md diff --git a/docs/src/chapter_9/artifacts_execution.md b/docs/book/src/chapter_9/artifacts_execution.md similarity index 100% rename from docs/src/chapter_9/artifacts_execution.md rename to docs/book/src/chapter_9/artifacts_execution.md diff --git a/docs/src/chapter_9/pass_pipeline_invariants.md b/docs/book/src/chapter_9/pass_pipeline_invariants.md similarity index 100% rename from docs/src/chapter_9/pass_pipeline_invariants.md rename to docs/book/src/chapter_9/pass_pipeline_invariants.md diff --git a/docs/src/chapter_9/phase_boundaries.md b/docs/book/src/chapter_9/phase_boundaries.md similarity index 100% rename from docs/src/chapter_9/phase_boundaries.md rename to docs/book/src/chapter_9/phase_boundaries.md diff --git a/docs/src/chapter_9/project_to_modules.md b/docs/book/src/chapter_9/project_to_modules.md similarity index 100% rename from docs/src/chapter_9/project_to_modules.md rename to docs/book/src/chapter_9/project_to_modules.md diff --git a/docs/src/favicon.png b/docs/book/src/favicon.png similarity index 100% rename from docs/src/favicon.png rename to docs/book/src/favicon.png diff --git a/docs/src/favicon.svg b/docs/book/src/favicon.svg similarity index 100% rename from docs/src/favicon.svg rename to docs/book/src/favicon.svg diff --git a/docs/src/introduction.md b/docs/book/src/introduction.md similarity index 91% rename from docs/src/introduction.md rename to docs/book/src/introduction.md index 1dae720..16eeb80 100644 --- a/docs/src/introduction.md +++ b/docs/book/src/introduction.md @@ -45,8 +45,9 @@ The Gleam chapter introduces the source language itself: modules, imports, functions, expressions, custom types, records, tuples, lists, pattern matching, and type inference. -The development pages describe what the compiler supports today and how tests -and documentation are organized. +The development docs are separate from this book. They explain how to install, +run, and contribute to Regulus. This book uses Regulus as a case study for +compiler concepts. ## What to expect from the compiler @@ -71,5 +72,5 @@ previous one. If you know compilers but are new to Gleam, start with the Gleam chapter, then come back to the pipeline chapters. -If you are working on the project, keep the development pages nearby. They show +If you are working on the project, keep the development docs nearby. They show what is supported, where fixtures live, and how tests should be structured. diff --git a/docs/theme/book.js b/docs/book/theme/book.js similarity index 100% rename from docs/theme/book.js rename to docs/book/theme/book.js diff --git a/docs/theme/css/chrome.css b/docs/book/theme/css/chrome.css similarity index 100% rename from docs/theme/css/chrome.css rename to docs/book/theme/css/chrome.css diff --git a/docs/theme/css/general.css b/docs/book/theme/css/general.css similarity index 100% rename from docs/theme/css/general.css rename to docs/book/theme/css/general.css diff --git a/docs/theme/css/print.css b/docs/book/theme/css/print.css similarity index 100% rename from docs/theme/css/print.css rename to docs/book/theme/css/print.css diff --git a/docs/theme/css/variables.css b/docs/book/theme/css/variables.css similarity index 100% rename from docs/theme/css/variables.css rename to docs/book/theme/css/variables.css diff --git a/docs/theme/highlight.css b/docs/book/theme/highlight.css similarity index 100% rename from docs/theme/highlight.css rename to docs/book/theme/highlight.css diff --git a/docs/theme/highlight.js b/docs/book/theme/highlight.js similarity index 100% rename from docs/theme/highlight.js rename to docs/book/theme/highlight.js diff --git a/docs/theme/index.hbs b/docs/book/theme/index.hbs similarity index 100% rename from docs/theme/index.hbs rename to docs/book/theme/index.hbs diff --git a/docs/internal/README.md b/docs/internal/README.md new file mode 100644 index 0000000..68c5b60 --- /dev/null +++ b/docs/internal/README.md @@ -0,0 +1,30 @@ +# Internal Docs + +This directory holds task trackers and specs for in-flight Regulus work. + +The public/user docs live in `docs/website`. The teaching book lives in +`docs/book`. + +## Specs + +- [Project compilation and dependencies][project-spec] +- [Stdlib and host interop](specs/15_stdlib_and_host_interop.md) +- [JS host ABI](specs/16_js_host_abi.md) +- [CLI and build outputs](specs/17_cli_and_build_outputs.md) +- [Example projects](specs/18_example_projects.md) +- [Runtime memory hardening](specs/19_runtime_memory_hardening.md) +- [WASI host ABI](specs/20_wasi_host_abi.md) + +## Task Trackers + +- [Project compilation and dependencies][project-task] +- [Stdlib and host interop](tasks/15_stdlib_and_host_interop.md) +- [JS host ABI](tasks/16_js_host_abi.md) +- [CLI and build outputs](tasks/17_cli_and_build_outputs.md) +- [Lustre weather SPA](tasks/18_lustre_weather_example.md) +- [Wisp Dev API](tasks/19_wisp_static_data_api_example.md) +- [Runtime memory hardening](tasks/20_runtime_memory_hardening.md) +- [WASI host ABI](tasks/21_wasi_host_abi.md) + +[project-spec]: specs/14_project_compilation_and_dependencies.md +[project-task]: tasks/14_project_compilation_and_dependencies.md diff --git a/docs/src/internal/specs/14_project_compilation_and_dependencies.md b/docs/internal/specs/14_project_compilation_and_dependencies.md similarity index 100% rename from docs/src/internal/specs/14_project_compilation_and_dependencies.md rename to docs/internal/specs/14_project_compilation_and_dependencies.md diff --git a/docs/src/internal/specs/15_stdlib_and_host_interop.md b/docs/internal/specs/15_stdlib_and_host_interop.md similarity index 99% rename from docs/src/internal/specs/15_stdlib_and_host_interop.md rename to docs/internal/specs/15_stdlib_and_host_interop.md index 05680cc..19fef06 100644 --- a/docs/src/internal/specs/15_stdlib_and_host_interop.md +++ b/docs/internal/specs/15_stdlib_and_host_interop.md @@ -158,7 +158,7 @@ and JS glue are defined in [JS host ABI](./16_js_host_abi.md). Compiler/runtime intrinsics must support the same closure semantics as ordinary Gleam code. The shared callback ABI, lowering rule, reuse requirements, and callback-taking stdlib members are defined in -[Closures and intrinsic callbacks](../development/closures.md). +[Closures and intrinsic callbacks](../../website/reference/closures.md). Unsupported callback shapes should be rejected before WAT assembly with a source-spanned diagnostic naming the intrinsic, closure type, and ABI shape. diff --git a/docs/src/internal/specs/16_js_host_abi.md b/docs/internal/specs/16_js_host_abi.md similarity index 100% rename from docs/src/internal/specs/16_js_host_abi.md rename to docs/internal/specs/16_js_host_abi.md diff --git a/docs/src/internal/specs/17_cli_and_build_outputs.md b/docs/internal/specs/17_cli_and_build_outputs.md similarity index 89% rename from docs/src/internal/specs/17_cli_and_build_outputs.md rename to docs/internal/specs/17_cli_and_build_outputs.md index c77403c..d2d033e 100644 --- a/docs/src/internal/specs/17_cli_and_build_outputs.md +++ b/docs/internal/specs/17_cli_and_build_outputs.md @@ -1,13 +1,14 @@ # CLI and build outputs -Current single-file CLI behavior is documented in -[CLI and build outputs](../development/cli_and_build_outputs.md). This spec -tracks the remaining user-facing command and artifact work that is not specific -to project linking. +Current single-file CLI behavior is documented in [CLI and build outputs][cli]. +This spec tracks the remaining user-facing command and artifact work that is not +specific to project linking. Project compilation itself is defined in [Project compilation and dependencies](./14_project_compilation_and_dependencies.md). +[cli]: ../../website/reference/cli-and-build-outputs.md + ## Responsibilities The CLI should provide predictable commands and stable artifacts for both users diff --git a/docs/src/internal/specs/18_example_projects.md b/docs/internal/specs/18_example_projects.md similarity index 100% rename from docs/src/internal/specs/18_example_projects.md rename to docs/internal/specs/18_example_projects.md diff --git a/docs/src/internal/specs/19_runtime_memory_hardening.md b/docs/internal/specs/19_runtime_memory_hardening.md similarity index 100% rename from docs/src/internal/specs/19_runtime_memory_hardening.md rename to docs/internal/specs/19_runtime_memory_hardening.md diff --git a/docs/src/internal/specs/20_wasi_host_abi.md b/docs/internal/specs/20_wasi_host_abi.md similarity index 100% rename from docs/src/internal/specs/20_wasi_host_abi.md rename to docs/internal/specs/20_wasi_host_abi.md diff --git a/docs/src/internal/tasks/14_project_compilation_and_dependencies.md b/docs/internal/tasks/14_project_compilation_and_dependencies.md similarity index 100% rename from docs/src/internal/tasks/14_project_compilation_and_dependencies.md rename to docs/internal/tasks/14_project_compilation_and_dependencies.md diff --git a/docs/src/internal/tasks/15_stdlib_and_host_interop.md b/docs/internal/tasks/15_stdlib_and_host_interop.md similarity index 100% rename from docs/src/internal/tasks/15_stdlib_and_host_interop.md rename to docs/internal/tasks/15_stdlib_and_host_interop.md diff --git a/docs/src/internal/tasks/16_js_host_abi.md b/docs/internal/tasks/16_js_host_abi.md similarity index 100% rename from docs/src/internal/tasks/16_js_host_abi.md rename to docs/internal/tasks/16_js_host_abi.md diff --git a/docs/src/internal/tasks/17_cli_and_build_outputs.md b/docs/internal/tasks/17_cli_and_build_outputs.md similarity index 100% rename from docs/src/internal/tasks/17_cli_and_build_outputs.md rename to docs/internal/tasks/17_cli_and_build_outputs.md diff --git a/docs/src/internal/tasks/18_lustre_weather_example.md b/docs/internal/tasks/18_lustre_weather_example.md similarity index 100% rename from docs/src/internal/tasks/18_lustre_weather_example.md rename to docs/internal/tasks/18_lustre_weather_example.md diff --git a/docs/src/internal/tasks/19_wisp_static_data_api_example.md b/docs/internal/tasks/19_wisp_static_data_api_example.md similarity index 100% rename from docs/src/internal/tasks/19_wisp_static_data_api_example.md rename to docs/internal/tasks/19_wisp_static_data_api_example.md diff --git a/docs/src/internal/tasks/20_runtime_memory_hardening.md b/docs/internal/tasks/20_runtime_memory_hardening.md similarity index 100% rename from docs/src/internal/tasks/20_runtime_memory_hardening.md rename to docs/internal/tasks/20_runtime_memory_hardening.md diff --git a/docs/src/internal/tasks/21_wasi_host_abi.md b/docs/internal/tasks/21_wasi_host_abi.md similarity index 100% rename from docs/src/internal/tasks/21_wasi_host_abi.md rename to docs/internal/tasks/21_wasi_host_abi.md diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md deleted file mode 100644 index c03529e..0000000 --- a/docs/src/SUMMARY.md +++ /dev/null @@ -1,131 +0,0 @@ -# Summary - -# The Book - -- [Introduction](./introduction.md) -- [Usage](./usage.md) -- [Compiler architecture](./chapter_9.md) - - [Phase boundaries](./chapter_9/phase_boundaries.md) - - [Pass pipelines and invariants](./chapter_9/pass_pipeline_invariants.md) - - [Project input and module graph](./chapter_9/project_to_modules.md) - - [Artifacts and execution](./chapter_9/artifacts_execution.md) -- [The Gleam Programming Language](./chapter_1.md) - - [Modules, imports, and packages](./chapter_1/mods_imports_pkgs.md) - - [Functional programming in Gleam](./chapter_1/functional_programming.md) - - [Values and expressions](./chapter_1/functions_values_expressions.md) - - [Type Checker](./chapter_1/type_system_inference.md) - - [Custom types and records](./chapter_1/custom_types_records_tuples_lists.md) - - [Pattern matching](./chapter_1/pattern_matching.md) - - [Compilation](./chapter_1/compiler_notes.md) -- [Lexing, parsing, and syntax trees](./chapter_2.md) - - [Lexical Analysis](./chapter_2/lexical_analysis.md) - - [Lexing](./chapter_2/lexing.md) - - [Parsing](./chapter_2/parsing.md) - - [Top-Down Parsers](./chapter_2/top_down.md) - - [Bottom-Up Parsers](./chapter_2/bottom_up.md) - - [Finite-State Machines](./chapter_2/finite_state_machines.md) - - [Regular Expressions](./chapter_2/regex.md) - - [Syntax Trees](./chapter_2/syntax_trees.md) - - [Grammars](./chapter_2/gleam_grammar.md) -- [Name Resolution](./chapter_3.md) - - [Lexical scope and shadowing](./chapter_3/lexical_scope.md) - - [Symbols and scopes](./chapter_3/symbols_and_scopes.md) - - [Namespaces and imports](./chapter_3/namespaces_and_imports.md) - - [Patterns and visibility](./chapter_3/patterns_visibility_packages.md) - - [The current resolver](./chapter_3/current_resolver.md) -- [Type Checking & Inference](./chapter_4.md) - - [Local and top-level inference](./chapter_4/local_top_level_inference.md) - - [Algebraic data types](./chapter_4/algebraic_data_types.md) - - [Unification and substitution](./chapter_4/unification_and_substitution.md) - - [Calls, operators, and branches](./chapter_4/calls_operators_branches.md) - - [Patterns and imports](./chapter_4/patterns_imports_opaque.md) - - [Module interfaces](./chapter_4/module_interfaces.md) -- [IR & Lowering](./chapter_5.md) -- [Runtimes (TODO)]() - - [Runtime Value Representation](./chapter_6.md) - - [Runtime Memory Management](./chapter_10.md) - - [Register allocation]() - - [The arena allocator](./chapter_10/arena_allocator.md) - - [Growth and allocation failure](./chapter_10/growth_and_failure.md) - - [Host pointers and reset boundaries](./chapter_10/host_pointers.md) - - [Future collectors](./chapter_10/collector_families.md) -- [WebAssembly Code Gen](./chapter_7.md) - - [Modules and stack machine](./chapter_7/modules_stack_machine.md) - - [Text and binary formats](./chapter_7/text_binary_format.md) - - [Memory and module boundaries](./chapter_7/memory_tables_imports_exports.md) - - [Wasmtime and browser](./chapter_7/running_wasmtime_browser.md) -- [Pattern matching](./chapter_8.md) - - [Compiling pattern matching](./chapter_8/compiling_pattern_matching.md) - - [Binding variables](./chapter_8/binding_variables.md) - - [Exhaustiveness diagnostics](./chapter_8/exhaustiveness_diagnostics.md) -- [WebAssembly In-Depth (TODO)]() -- [interprocedural analysis (TODO)]() - - [Linking modules (TODO)]() - - [handling dependencies (TODO)]() - - [pointer analysis (TODO)]() - - [aliasing (TODO)]() - - [data-flow (TODO)]() -- [Code Optimization (TODO)]() - - [Parallelization (TODO)]() - - [Loop optimizations (TODO)]() - - [Flow Graphs (TODO)]() - - [Tarjan's algorithm and SCCs (TODO)]() - - [Other Algorithms (TODO)]() - - - -# Development - -- [Supported subset](internal/supported_subset.md) -- [CHANGELOG](./CHANGELOG.md) -- [Architecture]() - - [Core IR](internal/development/architecture/core_ir.md) - - [Runtime representation](internal/development/architecture/runtime_representation.md) - - [WASM backend and runtime](internal/development/architecture/wasm_backend_and_runtime.md) - - [Runtime memory](internal/development/runtime_memory_management.md) - - [Outputs](internal/development/cli_and_build_outputs.md) -- [Contributing]() - - [Tests & Documentation](internal/development/contributor/testing.md) - - [Reference]() - - [Project model](internal/development/project_model_and_modules.md) - - [Gleam syntax](internal/development/full_gleam_syntax.md) - - [Name resolution](internal/development/full_name_resolution.md) - - [Types and interfaces](internal/development/gleam_types_and_interfaces.md) - - [Type inference](internal/development/type_and_generic_inference.md) - - [Pattern matching](internal/development/pattern_matching.md) - - - -# Inflight Work - -- [Specs]() - - [Project compilation and dependencies](internal/specs/14_project_compilation_and_dependencies.md) - - [Stdlib and host interop](internal/specs/15_stdlib_and_host_interop.md) - - [JS host ABI](internal/specs/16_js_host_abi.md) - - [CLI and build outputs](internal/specs/17_cli_and_build_outputs.md) - - [Example projects](internal/specs/18_example_projects.md) - - [Runtime memory hardening](internal/specs/19_runtime_memory_hardening.md) - - [WASI host ABI](internal/specs/20_wasi_host_abi.md) -- [Task Trackers]() - - [Project compilation and dependencies](internal/tasks/14_project_compilation_and_dependencies.md) - - [Stdlib and host interop](internal/tasks/15_stdlib_and_host_interop.md) - - [JS host ABI](internal/tasks/16_js_host_abi.md) - - [CLI and build outputs](internal/tasks/17_cli_and_build_outputs.md) - - [Example Projects]() - - [Lustre weather SPA](internal/tasks/18_lustre_weather_example.md) - - [Wisp Dev API](internal/tasks/19_wisp_static_data_api_example.md) - - [Runtime memory hardening](internal/tasks/20_runtime_memory_hardening.md) - - [WASI host ABI](internal/tasks/21_wasi_host_abi.md) diff --git a/docs/website/.vitepress/config.mts b/docs/website/.vitepress/config.mts new file mode 100644 index 0000000..51c640c --- /dev/null +++ b/docs/website/.vitepress/config.mts @@ -0,0 +1,82 @@ +import { defineConfig } from "vitepress"; + +const sidebar = [ + { + text: "Guide", + items: [ + { text: "Overview", link: "/guide/" }, + { text: "Installation", link: "/guide/installation" }, + { text: "Usage", link: "/guide/usage" }, + { text: "Examples", link: "/guide/examples" }, + ], + }, + { + text: "Reference", + items: [ + { text: "Overview", link: "/reference/" }, + { text: "Supported subset", link: "/reference/supported-subset" }, + { text: "CLI and outputs", link: "/reference/cli-and-build-outputs" }, + { text: "Project model", link: "/reference/project-model-and-modules" }, + { text: "Gleam syntax", link: "/reference/full-gleam-syntax" }, + { text: "Name resolution", link: "/reference/full-name-resolution" }, + { + text: "Types and interfaces", + link: "/reference/gleam-types-and-interfaces", + }, + { text: "Type inference", link: "/reference/type-and-generic-inference" }, + { text: "Pattern matching", link: "/reference/pattern-matching" }, + { text: "Closures", link: "/reference/closures" }, + ], + }, + { + text: "Development", + items: [ + { text: "Overview", link: "/development/" }, + { text: "Testing", link: "/development/testing" }, + { text: "Core IR", link: "/development/core-ir" }, + { + text: "Runtime representation", + link: "/development/runtime-representation", + }, + { text: "Runtime memory", link: "/development/runtime-memory" }, + { text: "Wasm backend", link: "/development/wasm-backend-and-runtime" }, + ], + }, + { + text: "Project", + items: [{ text: "Changelog", link: "/changelog" }], + }, +]; + +export default defineConfig({ + title: "Regulus", + description: "Use and develop the experimental Gleam to WebAssembly compiler.", + cleanUrls: true, + lastUpdated: true, + markdown: { + theme: { + light: "catppuccin-latte", + dark: "catppuccin-macchiato", + }, + }, + themeConfig: { + logo: "/favicon.svg", + siteTitle: "Regulus", + nav: [ + { text: "Guide", link: "/guide/" }, + { text: "Reference", link: "/reference/" }, + { text: "Development", link: "/development/" }, + { text: "Changelog", link: "/changelog" }, + ], + sidebar, + search: { + provider: "local", + }, + outline: { + level: [2, 3], + }, + socialLinks: [ + { icon: "github", link: "https://github.com/desertthunder/regulus" }, + ], + }, +}); diff --git a/docs/website/.vitepress/theme/custom.css b/docs/website/.vitepress/theme/custom.css new file mode 100644 index 0000000..014a55c --- /dev/null +++ b/docs/website/.vitepress/theme/custom.css @@ -0,0 +1,52 @@ +:root { + --vp-font-family-base: + "Switzer", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, + "Segoe UI", sans-serif; + --vp-font-family-mono: + "SFMono-Regular", "Cascadia Code", "Liberation Mono", monospace; + --vp-c-brand-1: #8aadf4; + --vp-c-brand-2: #7dc4e4; + --vp-c-brand-3: #91d7e3; + --vp-home-hero-name-color: #8aadf4; + --vp-layout-max-width: 1500px; +} + +@font-face { + font-family: "Switzer"; + src: url("/fonts/Switzer-Variable.woff2") format("woff2"); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} + +.VPHome { + background: + linear-gradient(180deg, rgba(36, 39, 58, 0.18), transparent 36rem), + radial-gradient(circle at top left, rgba(138, 173, 244, 0.18), transparent 32rem); +} + +.VPHomeHero .text { + max-width: 48rem; + letter-spacing: 0; +} + +.VPHomeHero .tagline { + max-width: 43rem; +} + +.VPFeature { + border-radius: 8px; +} + +.VPDoc { + letter-spacing: 0; +} + +.vp-doc h2 { + border-top: 0; +} + +.vp-doc table { + display: table; + width: 100%; +} diff --git a/docs/website/.vitepress/theme/index.ts b/docs/website/.vitepress/theme/index.ts new file mode 100644 index 0000000..a399a32 --- /dev/null +++ b/docs/website/.vitepress/theme/index.ts @@ -0,0 +1,5 @@ +import DefaultTheme from "vitepress/theme"; +import "@catppuccin/vitepress/theme/macchiato/blue.css"; +import "./custom.css"; + +export default DefaultTheme; diff --git a/docs/src/CHANGELOG.md b/docs/website/changelog.md similarity index 100% rename from docs/src/CHANGELOG.md rename to docs/website/changelog.md diff --git a/docs/src/internal/development/architecture/core_ir.md b/docs/website/development/core-ir.md similarity index 100% rename from docs/src/internal/development/architecture/core_ir.md rename to docs/website/development/core-ir.md diff --git a/docs/website/development/index.md b/docs/website/development/index.md new file mode 100644 index 0000000..92619de --- /dev/null +++ b/docs/website/development/index.md @@ -0,0 +1,26 @@ +# Development + +These pages describe how Regulus is built and how to work on it. + +## Compiler phases + +Regulus keeps compiler phases explicit: + +```text +Gleam source + -> tree-sitter syntax tree + -> AST + -> name resolution + -> type checking + -> core IR + -> WebAssembly +``` + +## Useful references + +- [Testing](./testing.md) +- [Core IR](./core-ir.md) +- [Runtime representation](./runtime-representation.md) +- [Runtime memory](./runtime-memory.md) +- [Wasm backend and runtime](./wasm-backend-and-runtime.md) +- [Project model](../reference/project-model-and-modules.md) diff --git a/docs/src/internal/development/runtime_memory_management.md b/docs/website/development/runtime-memory.md similarity index 93% rename from docs/src/internal/development/runtime_memory_management.md rename to docs/website/development/runtime-memory.md index d233ab0..d508fe9 100644 --- a/docs/src/internal/development/runtime_memory_management.md +++ b/docs/website/development/runtime-memory.md @@ -52,5 +52,5 @@ rules, and tests for pointer lifetime across host calls. See also: -- [Runtime representation](./architecture/runtime_representation.md) -- [WASM backend and runtime](./architecture/wasm_backend_and_runtime.md) +- [Runtime representation](./runtime-representation.md) +- [WASM backend and runtime](./wasm-backend-and-runtime.md) diff --git a/docs/src/internal/development/architecture/runtime_representation.md b/docs/website/development/runtime-representation.md similarity index 100% rename from docs/src/internal/development/architecture/runtime_representation.md rename to docs/website/development/runtime-representation.md diff --git a/docs/src/internal/development/contributor/testing.md b/docs/website/development/testing.md similarity index 98% rename from docs/src/internal/development/contributor/testing.md rename to docs/website/development/testing.md index 246d197..be18363 100644 --- a/docs/src/internal/development/contributor/testing.md +++ b/docs/website/development/testing.md @@ -84,7 +84,8 @@ Before considering a change done, run: ```bash cargo fmt cargo test -mdbook build docs +cd docs/website +pnpm docs:build ``` Changes that add generated output should also check that snapshots are diff --git a/docs/src/internal/development/architecture/wasm_backend_and_runtime.md b/docs/website/development/wasm-backend-and-runtime.md similarity index 98% rename from docs/src/internal/development/architecture/wasm_backend_and_runtime.md rename to docs/website/development/wasm-backend-and-runtime.md index 2e089e4..eb99162 100644 --- a/docs/src/internal/development/architecture/wasm_backend_and_runtime.md +++ b/docs/website/development/wasm-backend-and-runtime.md @@ -43,7 +43,7 @@ plain scalar WebAssembly. Static managed literals are emitted as data segments before the dynamic heap. The object layout is documented in -[Runtime representation](./runtime_representation.md). +[Runtime representation](./runtime-representation.md). ## Supported emitted forms diff --git a/docs/website/guide/examples.md b/docs/website/guide/examples.md new file mode 100644 index 0000000..924d347 --- /dev/null +++ b/docs/website/guide/examples.md @@ -0,0 +1,32 @@ +# Examples + +The `examples/` directory contains checked projects and fixtures that show the +compiler's current surface area. + +## Working examples + +```sh +gleam-wasm build examples/scalar_project +gleam-wasm build examples/multi_module_project +gleam-wasm build examples/browser_scalar --target browser +``` + +## Example projects + +| Example | Purpose | +| --- | --- | +| `examples/scalar_project` | Smallest normal project build. | +| `examples/multi_module_project` | Same-project imports and linked output. | +| `examples/browser_scalar` | Browser-target Wasm with host glue. | +| `examples/diagnostics/duplicate_modules` | Intentional project diagnostic. | + +Diagnostic examples are expected to fail before Wasm emission. + +## Fixture workflow + +Use `fixtures/` for focused compiler behavior. End-to-end fixtures should stay +small and should exercise one feature or diagnostic at a time. + +```sh +cargo test -p compiler_core +``` diff --git a/docs/website/guide/index.md b/docs/website/guide/index.md new file mode 100644 index 0000000..ac84ad3 --- /dev/null +++ b/docs/website/guide/index.md @@ -0,0 +1,13 @@ +# Guide + +These docs explain how to install, run, inspect, and contribute to Regulus. + +Start here if you want to compile code, inspect output, or understand what +Regulus supports today. + +## Common paths + +- Install or run the CLI locally: [Installation](./installation.md) +- Compile Gleam to Wasm: [Usage](./usage.md) +- Try checked fixtures and examples: [Examples](./examples.md) +- Check language support: [Supported subset](../reference/supported-subset.md) diff --git a/docs/website/guide/installation.md b/docs/website/guide/installation.md new file mode 100644 index 0000000..ab58fac --- /dev/null +++ b/docs/website/guide/installation.md @@ -0,0 +1,39 @@ +# Installation + +Regulus is developed from source. Build and run it with Cargo. + +## Requirements + +- `git` +- Rust and Cargo (I recommended `rustup`) +- `pnpm` if you want to run the docs site + +## Build the CLI + +```sh +cargo build -p compiler_cli +``` + +Run the CLI through Cargo while developing: + +```sh +cargo run -q -p compiler_cli -- --help +``` + +## Run checks + +```sh +cargo fmt +cargo test +cargo clippy --workspace --all-targets +``` + +## Documentation Site + +Run the docs site: + +```sh +cd docs/website +pnpm install +pnpm docs:dev +``` diff --git a/docs/src/usage.md b/docs/website/guide/usage.md similarity index 82% rename from docs/src/usage.md rename to docs/website/guide/usage.md index 7754cff..3cca03e 100644 --- a/docs/src/usage.md +++ b/docs/website/guide/usage.md @@ -87,20 +87,8 @@ Use `list` to inspect discovered modules without building artifacts. gleam-wasm list examples/multi_module_project ``` -## Examples - -The `examples/` directory contains checked examples: - -- `examples/scalar_project`: smallest working project build. -- `examples/multi_module_project`: same-project imports and linking. -- `examples/browser_scalar`: browser-target Wasm plus minimal JS host glue. -- `examples/diagnostics/duplicate_modules`: intentional project diagnostic. - -Working examples should compile with `gleam-wasm build`. Diagnostic examples -are expected to fail before Wasm emission. - ## Current limitations Project compilation is still growing. Dependency interfaces, dependency source loading, general external functions, and richer host ABI adapters are tracked in -the inflight work section of this book. +`docs/internal`. diff --git a/docs/website/index.md b/docs/website/index.md new file mode 100644 index 0000000..0c5f9ea --- /dev/null +++ b/docs/website/index.md @@ -0,0 +1,27 @@ +--- +layout: home + +hero: + name: Regulus + tagline: Compile Gleam to WebAssembly. + actions: + - theme: brand + text: Get started + link: /guide/ + - theme: alt + text: Supported subset + link: /reference/supported-subset + +features: + - title: Use the compiler + details: Build & compile your Gleam projects + compiler dumps. + link: /guide/usage + - title: Check support + details: See the supported language subset, runtime shape, and current + limitations. + link: /reference/supported-subset + - title: Work on Regulus + details: Learn about the project architecture & conventions + link: /development/ +--- diff --git a/docs/website/package.json b/docs/website/package.json new file mode 100644 index 0000000..71559a2 --- /dev/null +++ b/docs/website/package.json @@ -0,0 +1,14 @@ +{ + "name": "regulus-docs", + "private": true, + "type": "module", + "scripts": { + "docs:dev": "vitepress dev .", + "docs:build": "vitepress build .", + "docs:preview": "vitepress preview ." + }, + "devDependencies": { + "@catppuccin/vitepress": "^0.1.2", + "vitepress": "^1.6.4" + } +} diff --git a/docs/website/pnpm-lock.yaml b/docs/website/pnpm-lock.yaml new file mode 100644 index 0000000..95382a9 --- /dev/null +++ b/docs/website/pnpm-lock.yaml @@ -0,0 +1,1641 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@catppuccin/vitepress': + specifier: ^0.1.2 + version: 0.1.2(typescript@5.9.3) + vitepress: + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.54.0)(postcss@8.5.15)(search-insights@2.17.3)(typescript@5.9.3) + +packages: + + '@algolia/abtesting@1.20.0': + resolution: {integrity: sha512-5CqkS592H3+24b6H6CQ2RVpphdmAuIElZzv0Hngqo/ZEZpUZJ+KGLcueBhx33fv2wYBXyuuvskG5aQ7Ti+lR0g==} + engines: {node: '>= 14.0.0'} + + '@algolia/autocomplete-core@1.17.7': + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.7': + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.7': + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.54.0': + resolution: {integrity: sha512-IXnH1x3DBsPQA4/FRO0Pvkfy79tKy5Qr+ugAV9jdcGkpzHc476D0WV1MFJ+pZxtbts0xh2JqzUVmYEqA6LkOpA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.54.0': + resolution: {integrity: sha512-pBpRqm1wpE0GnGy2rNLk9rjDn0Le4iywNRtnAWblLeqfjxpWKg8lWnk7nmSoTShFO31sz2jatXXzxK2lz8ipbA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.54.0': + resolution: {integrity: sha512-WbuwRUlFvSOsuxqTDjSSmgusuF5KFt+oFPzobvPDvodra6EWnVwUXjz0elkNSsnsIlZGtcXlX3LhxkO7rF90jw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.54.0': + resolution: {integrity: sha512-/HNLVi3kPI+JhO59WbglLjPM2c4uECU+x4gk1iADseKtE5eYqJ/RJ+FIwM8xzPFKhFJaw+8hVq4lkd0nn8HDDg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.54.0': + resolution: {integrity: sha512-6TolyyDRumIKeLGBGSFAZsSIJ8hrm6NFCGR1jO7pQTiOtSWgAIxcFE5/JRpZ3g+unG4OkNOFy+I0dUEquIDbig==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.54.0': + resolution: {integrity: sha512-AxW2MLBhjBtGX5kIZrVLO2SP2vRkZxJw5qHGxnQJfLcYhA04mFNP0fWRtHshlcVnDk9M8L9lwfr2lGpf3Er+hw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.54.0': + resolution: {integrity: sha512-ngdgVGp05lJzUyA+sUzr0MDZ7AMtANcJpwIzq4ZsfpZL5B3S7A4XYfMcU2sECZc3bx3ysOhYcdbbaTjc3ve0WQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.54.0': + resolution: {integrity: sha512-hee59Z7FgZ6/13FYL05ANPwRJY1pfvIlrwC8eBZYdiRFXTJVvf94IyTWOxLqRVpbseDP6eQQTW+PT7/DxTZIng==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.54.0': + resolution: {integrity: sha512-diCjZVbIO7Pzw98tEKqLWIAgmQBI3Zt1sHsXyAPNGZgn32derpIXTnjjpJbZl+uAhSSznd6SfxFGdC9uYdN1TA==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.54.0': + resolution: {integrity: sha512-6zeslypRAGWDgVJEJYAPuqmyquHvnw4MQwG+XXdrw5dTNDjXYIcCJdQQcCY06xPF9tUvmzy/1vHiH9QxhgwuOQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.54.0': + resolution: {integrity: sha512-iHZax214LPXd7XizQ4BNnTsegl8f3IeKm8JcrmSNZ/5x1rZ5xLkbG/anltAWtLpoRNnfpr4Z80YdYeVVPpx6wQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.54.0': + resolution: {integrity: sha512-YKtuG5YwPxZ+kkfd4HmUO7Z9aICPUSMlHslzKTmtMMhxGnetxEqGj9T/v2r/PdcuOUC5oW0CHe8akJk8cpS3gQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.54.0': + resolution: {integrity: sha512-zyZDJ4WS5TnjZZ5pqywTBFO9olW7QMtY2kf2dbLnu+UTzfc9ri/HGf27jRN2NTbX9FcRPxSqPqzUhF/BZIx0VA==} + engines: {node: '>= 14.0.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@catppuccin/vitepress@0.1.2': + resolution: {integrity: sha512-dqhgo6U6GWbgh3McAgwemUC8Y2Aj48rRcQx/9iuPzBPAgo7NA3yi7ZcR0wolAENMmoOMAHBV+rz/5DfiGxtZLA==} + peerDependencies: + typescript: ^5.0.0 + + '@docsearch/css@3.8.2': + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + + '@docsearch/js@3.8.2': + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + + '@docsearch/react@3.8.2': + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@iconify-json/simple-icons@1.2.86': + resolution: {integrity: sha512-t3jck5qPQuK1qy+bRn9eCoDQhIB7XSazKz1Fjp8hcan3XOAsTI5Mq/s3F0ekOKSvMQqkVORYK6ns6o6T9f5EMA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@rollup/rollup-android-arm-eabi@4.61.1': + resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.61.1': + resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.61.1': + resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.61.1': + resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.61.1': + resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.61.1': + resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.61.1': + resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.61.1': + resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.61.1': + resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.61.1': + resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.61.1': + resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.61.1': + resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.61.1': + resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.61.1': + resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.61.1': + resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.61.1': + resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.61.1': + resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.61.1': + resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.61.1': + resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.61.1': + resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.61.1': + resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} + cpu: [x64] + os: [win32] + + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.38': + resolution: {integrity: sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==} + + '@vue/compiler-dom@3.5.38': + resolution: {integrity: sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==} + + '@vue/compiler-sfc@3.5.38': + resolution: {integrity: sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==} + + '@vue/compiler-ssr@3.5.38': + resolution: {integrity: sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/reactivity@3.5.38': + resolution: {integrity: sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==} + + '@vue/runtime-core@3.5.38': + resolution: {integrity: sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==} + + '@vue/runtime-dom@3.5.38': + resolution: {integrity: sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==} + + '@vue/server-renderer@3.5.38': + resolution: {integrity: sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==} + peerDependencies: + vue: 3.5.38 + + '@vue/shared@3.5.38': + resolution: {integrity: sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + + algoliasearch@5.54.0: + resolution: {integrity: sha512-APAX4ajIOgsmYoUlGe++oNZkSTBgmXYM4maHC0OxC+Yo7xkaKQElV0ATZYCZA7jzrSJX1OBiqEs7mk+ZxXgYqA==} + engines: {node: '>= 14.0.0'} + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + focus-trap@7.8.0: + resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.29.2: + resolution: {integrity: sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.61.1: + resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitepress@1.6.4: + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue@3.5.38: + resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/abtesting@1.20.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0) + '@algolia/client-search': 5.54.0 + algoliasearch: 5.54.0 + + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)': + dependencies: + '@algolia/client-search': 5.54.0 + algoliasearch: 5.54.0 + + '@algolia/client-abtesting@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/client-analytics@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/client-common@5.54.0': {} + + '@algolia/client-insights@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/client-personalization@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/client-query-suggestions@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/client-search@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/ingestion@1.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/monitoring@1.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/recommend@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + '@algolia/requester-browser-xhr@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + + '@algolia/requester-fetch@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + + '@algolia/requester-node-http@5.54.0': + dependencies: + '@algolia/client-common': 5.54.0 + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@catppuccin/vitepress@0.1.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@docsearch/css@3.8.2': {} + + '@docsearch/js@3.8.2(@algolia/client-search@5.54.0)(search-insights@2.17.3)': + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.54.0)(search-insights@2.17.3) + preact: 10.29.2 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.8.2(@algolia/client-search@5.54.0)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.54.0)(algoliasearch@5.54.0) + '@docsearch/css': 3.8.2 + algoliasearch: 5.54.0 + optionalDependencies: + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@iconify-json/simple-icons@1.2.86': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@rollup/rollup-android-arm-eabi@4.61.1': + optional: true + + '@rollup/rollup-android-arm64@4.61.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.61.1': + optional: true + + '@rollup/rollup-darwin-x64@4.61.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.61.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.61.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.61.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.61.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.61.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.61.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.61.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.61.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.61.1': + optional: true + + '@shikijs/core@2.5.0': + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + + '@shikijs/engine-oniguruma@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/themes@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/transformers@2.5.0': + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + + '@shikijs/types@2.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.1': {} + + '@vitejs/plugin-vue@5.2.4(vite@5.4.21)(vue@3.5.38(typescript@5.9.3))': + dependencies: + vite: 5.4.21 + vue: 3.5.38(typescript@5.9.3) + + '@vue/compiler-core@3.5.38': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.38 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.38': + dependencies: + '@vue/compiler-core': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/compiler-sfc@3.5.38': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.38 + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.38': + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.38': + dependencies: + '@vue/shared': 3.5.38 + + '@vue/runtime-core@3.5.38': + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/shared': 3.5.38 + + '@vue/runtime-dom@3.5.38': + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/runtime-core': 3.5.38 + '@vue/shared': 3.5.38 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.38(vue@3.5.38(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + vue: 3.5.38(typescript@5.9.3) + + '@vue/shared@3.5.38': {} + + '@vueuse/core@12.8.2(typescript@5.9.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/integrations@12.8.2(focus-trap@7.8.0)(typescript@5.9.3)': + dependencies: + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) + optionalDependencies: + focus-trap: 7.8.0 + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.9.3)': + dependencies: + vue: 3.5.38(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + algoliasearch@5.54.0: + dependencies: + '@algolia/abtesting': 1.20.0 + '@algolia/client-abtesting': 5.54.0 + '@algolia/client-analytics': 5.54.0 + '@algolia/client-common': 5.54.0 + '@algolia/client-insights': 5.54.0 + '@algolia/client-personalization': 5.54.0 + '@algolia/client-query-suggestions': 5.54.0 + '@algolia/client-search': 5.54.0 + '@algolia/ingestion': 1.54.0 + '@algolia/monitoring': 1.54.0 + '@algolia/recommend': 5.54.0 + '@algolia/requester-browser-xhr': 5.54.0 + '@algolia/requester-fetch': 5.54.0 + '@algolia/requester-node-http': 5.54.0 + + birpc@2.9.0: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + comma-separated-tokens@2.0.3: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + csstype@3.2.3: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + emoji-regex-xs@1.0.0: {} + + entities@7.0.1: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + estree-walker@2.0.2: {} + + focus-trap@7.8.0: + dependencies: + tabbable: 6.4.0 + + fsevents@2.3.3: + optional: true + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + 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.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + + is-what@5.5.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mark.js@8.11.1: {} + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + minisearch@7.2.0: {} + + mitt@3.0.1: {} + + nanoid@3.3.12: {} + + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.1.0 + regex-recursion: 6.0.2 + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.29.2: {} + + property-information@7.2.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rfdc@1.4.1: {} + + rollup@4.61.1: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.61.1 + '@rollup/rollup-android-arm64': 4.61.1 + '@rollup/rollup-darwin-arm64': 4.61.1 + '@rollup/rollup-darwin-x64': 4.61.1 + '@rollup/rollup-freebsd-arm64': 4.61.1 + '@rollup/rollup-freebsd-x64': 4.61.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 + '@rollup/rollup-linux-arm-musleabihf': 4.61.1 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 + '@rollup/rollup-linux-arm64-musl': 4.61.1 + '@rollup/rollup-linux-loong64-gnu': 4.61.1 + '@rollup/rollup-linux-loong64-musl': 4.61.1 + '@rollup/rollup-linux-ppc64-gnu': 4.61.1 + '@rollup/rollup-linux-ppc64-musl': 4.61.1 + '@rollup/rollup-linux-riscv64-gnu': 4.61.1 + '@rollup/rollup-linux-riscv64-musl': 4.61.1 + '@rollup/rollup-linux-s390x-gnu': 4.61.1 + '@rollup/rollup-linux-x64-gnu': 4.61.1 + '@rollup/rollup-linux-x64-musl': 4.61.1 + '@rollup/rollup-openbsd-x64': 4.61.1 + '@rollup/rollup-openharmony-arm64': 4.61.1 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 + '@rollup/rollup-win32-ia32-msvc': 4.61.1 + '@rollup/rollup-win32-x64-gnu': 4.61.1 + '@rollup/rollup-win32-x64-msvc': 4.61.1 + fsevents: 2.3.3 + + search-insights@2.17.3: {} + + shiki@2.5.0: + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + tabbable@6.4.0: {} + + trim-lines@3.0.1: {} + + typescript@5.9.3: {} + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@5.4.21: + dependencies: + esbuild: 0.21.5 + postcss: 8.5.15 + rollup: 4.61.1 + optionalDependencies: + fsevents: 2.3.3 + + vitepress@1.6.4(@algolia/client-search@5.54.0)(postcss@8.5.15)(search-insights@2.17.3)(typescript@5.9.3): + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.54.0)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.86 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21)(vue@3.5.38(typescript@5.9.3)) + '@vue/devtools-api': 7.7.9 + '@vue/shared': 3.5.38 + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(focus-trap@7.8.0)(typescript@5.9.3) + focus-trap: 7.8.0 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 2.5.0 + vite: 5.4.21 + vue: 3.5.38(typescript@5.9.3) + optionalDependencies: + postcss: 8.5.15 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + + vue@3.5.38(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-sfc': 3.5.38 + '@vue/runtime-dom': 3.5.38 + '@vue/server-renderer': 3.5.38(vue@3.5.38(typescript@5.9.3)) + '@vue/shared': 3.5.38 + optionalDependencies: + typescript: 5.9.3 + + zwitch@2.0.4: {} diff --git a/docs/website/pnpm-workspace.yaml b/docs/website/pnpm-workspace.yaml new file mode 100644 index 0000000..5ed0b5a --- /dev/null +++ b/docs/website/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: true diff --git a/docs/website/public/favicon.svg b/docs/website/public/favicon.svg new file mode 100644 index 0000000..1504642 --- /dev/null +++ b/docs/website/public/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/website/public/fonts/Switzer-Variable.woff2 b/docs/website/public/fonts/Switzer-Variable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..91f868af412a2aac5ab291edbcae1573d5a7117d GIT binary patch literal 43220 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­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 literal 0 HcmV?d00001 diff --git a/docs/src/internal/development/cli_and_build_outputs.md b/docs/website/reference/cli-and-build-outputs.md similarity index 97% rename from docs/src/internal/development/cli_and_build_outputs.md rename to docs/website/reference/cli-and-build-outputs.md index c704d4b..4b15bb4 100644 --- a/docs/src/internal/development/cli_and_build_outputs.md +++ b/docs/website/reference/cli-and-build-outputs.md @@ -39,7 +39,7 @@ contract: - `examples/browser_scalar` builds a browser-target artifact with JS glue. - `examples/diagnostics/duplicate_modules` documents a failing project shape. -See `docs/src/usage.md` for user-facing commands. +See `docs/website/guide/usage.md` for user-facing commands. ## Targets diff --git a/docs/src/internal/development/closures.md b/docs/website/reference/closures.md similarity index 100% rename from docs/src/internal/development/closures.md rename to docs/website/reference/closures.md diff --git a/docs/src/internal/development/full_gleam_syntax.md b/docs/website/reference/full-gleam-syntax.md similarity index 100% rename from docs/src/internal/development/full_gleam_syntax.md rename to docs/website/reference/full-gleam-syntax.md diff --git a/docs/src/internal/development/full_name_resolution.md b/docs/website/reference/full-name-resolution.md similarity index 100% rename from docs/src/internal/development/full_name_resolution.md rename to docs/website/reference/full-name-resolution.md diff --git a/docs/src/internal/development/gleam_types_and_interfaces.md b/docs/website/reference/gleam-types-and-interfaces.md similarity index 100% rename from docs/src/internal/development/gleam_types_and_interfaces.md rename to docs/website/reference/gleam-types-and-interfaces.md diff --git a/docs/website/reference/index.md b/docs/website/reference/index.md new file mode 100644 index 0000000..55a2fae --- /dev/null +++ b/docs/website/reference/index.md @@ -0,0 +1,19 @@ +# Reference + +Reference pages describe the compiler surface and internal models in a stable, +lookup-friendly form. + +## User-facing reference + +- [Supported subset](./supported-subset.md) +- [CLI and build outputs](./cli-and-build-outputs.md) + +## Compiler reference + +- [Project model](./project-model-and-modules.md) +- [Gleam syntax](./full-gleam-syntax.md) +- [Name resolution](./full-name-resolution.md) +- [Types and interfaces](./gleam-types-and-interfaces.md) +- [Type inference](./type-and-generic-inference.md) +- [Pattern matching](./pattern-matching.md) +- [Closures](./closures.md) diff --git a/docs/src/internal/development/pattern_matching.md b/docs/website/reference/pattern-matching.md similarity index 100% rename from docs/src/internal/development/pattern_matching.md rename to docs/website/reference/pattern-matching.md diff --git a/docs/src/internal/development/project_model_and_modules.md b/docs/website/reference/project-model-and-modules.md similarity index 100% rename from docs/src/internal/development/project_model_and_modules.md rename to docs/website/reference/project-model-and-modules.md diff --git a/docs/src/internal/supported_subset.md b/docs/website/reference/supported-subset.md similarity index 100% rename from docs/src/internal/supported_subset.md rename to docs/website/reference/supported-subset.md diff --git a/docs/src/internal/development/type_and_generic_inference.md b/docs/website/reference/type-and-generic-inference.md similarity index 100% rename from docs/src/internal/development/type_and_generic_inference.md rename to docs/website/reference/type-and-generic-inference.md -- 2.51.2