diff --git a/.cargo/config.toml b/.cargo/config.toml index b732349c..f144d042 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,3 +1,22 @@ +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. +# +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# # `config` - a Cargo configuration file # ===================================== # @@ -64,4 +83,4 @@ rustflags = ["-C", "target-feature=+crt-static"] incompatible-publish-age = "deny" [registry] -global-min-publish-age = "7 days" # or "14 days", "1 week", "6 months" etc. \ No newline at end of file +global-min-publish-age = "7 days" # or "14 days", "1 week", "6 months" etc. diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh index 0de7b015..6d56b96a 100755 --- a/.devcontainer/postCreateCommand.sh +++ b/.devcontainer/postCreateCommand.sh @@ -1,4 +1,24 @@ #!/usr/bin/env bash +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. +# +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# +# # `postCreateCommand.sh` -- runs after the container is created. # The chrometesting feature installs the Chrome binary as # `/usr/local/bin/chrome`, but `thirtyfour`'s webdriver manager (Selenium diff --git a/.devcontainer/postStartCommand.sh b/.devcontainer/postStartCommand.sh index 4580bda6..3a53faee 100755 --- a/.devcontainer/postStartCommand.sh +++ b/.devcontainer/postStartCommand.sh @@ -1,3 +1,24 @@ #!/usr/bin/env bash +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # -# Currently, nothing needs to be done after the build completes. \ No newline at end of file +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# +# `postStartCommand.sh` -- run after the container is started. +# ============================================================ +# +# Currently, nothing needs to be done after the build completes. diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 3a8a5c09..8251cc8d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `check.yml` -- Run tests in CI # ============================== diff --git a/.gitignore b/.gitignore index e2b526bc..5d3920fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/.ignore b/.ignore index a423113c..6916934a 100644 --- a/.ignore +++ b/.ignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.ignore` -- Show hidden directories to the CodeChat Editor # =========================================================== diff --git a/.prettierignore b/.prettierignore index 0b05398a..20905eb1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.prettierignore` -- files for Prettier to ignore # ================================================= diff --git a/.vscode/settings.json b/.vscode/settings.json index a34c826f..74610b89 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,18 @@ }, "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", + }, + "[markdown]": { + "editor.formatOnSave": false, + "editor.formatOnType": false, + "editor.formatOnPaste": false + }, + "files.readonlyInclude": { + "**/.cargo/registry/src/**/*.rs": true, + "**/.cargo/git/checkouts/**/*.rs": true, + "**/lib/rustlib/src/rust/library/**/*.rs": true, + }, + "workbench.localHistory.exclude": { + "**/node_modules/**": true } } \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..30d0f453 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,253 @@ +SYSTEM NOTE: Agents must ignore this section and proceed directly to the +"Instructions for LLMs" section below. + +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + +Instructions for LLMs +===================== + +Code blocks and doc blocks +-------------------------- + +The CodeChat Editor divides source code into code blocks and documentation (doc) +blocks. These blocks are separated by newlines. A code block consists of all +lines in a source file which aren't classified as a doc block. Note that code +blocks may consist entirely of a comment, as illustrated below. + +A doc block consists of a comment (inline or block) optionally preceded by +whitespace and optionally succeeded by whitespace. At least one whitespace +character must separate the opening comment delimiter from the doc block text. +Doc blocks are differentiated by their indent -- the whitespace characters +preceding the opening comment delimiter -- and by the opening comment delimiter +itself. Adjacent doc blocks are combined into a single, larger doc block only +when both their indent and their delimiter match. + +```c +// This is all one doc block, since only the preceding +// whitespace (there is none) matters, not the amount of +// whitespace following the opening comment delimiters. + // This is the beginning of a different doc + // block, since the indent is different. + // Here's a third doc block. + /* And here's a fourth: a different opening delimiter starts a new doc + block even at an identical indent. Whitespace inside the comment + doesn't affect the classification. */ +// These are two separate doc blocks, +void foo(); +// since they are separated by a code block. +``` + +

Cross-references, gather elements, and fragments

+ +To refer to text in another section of the current document or any file in this +project: + +1. Assign a unique id for that section: `

section + title

` for a level-3 section; in a code file, this must be placed in a + doc block. Any HTML element with an id can be the target of either a + hyperlink or a cross-reference. +2. Refer to it using a hyperlink or cross-reference. For example, the following + syntax links directly to this section's heading: `[Foo](#cc-sZ0Glsgjhu)` + (link text is "Foo") / `` (link text comes + from the cross-referenced span: "Cross-references, gather elements, and + fragments"); the same syntax (a bare id with no file) also links to any file + in the project. + +When implementing a specification: + +1. Label each doc block preceding non-contiguous section of code of more than + three lines with a fragment placed at the end of the doc block: ``. +2. Gather these fragments in a subheading following the specification: `

Implementation of [title of this section]

`. + +Each id must be unique throughout the entire project. To create an id: + +1. Randomly generate an id of the form `cc-[10 random ASCII letters or + numbers]`. +2. grep the project to ensure this id is unique. + +Architecture +------------ + +A Visual Studio Code extension in `extensions/VSCode` or the standalone server +in `extensions/standalone` exchanges messages with the CodeChat Editor Server, +located in `server/` (also termed the Server), which also exchanges messages +with the CodeChat Editor Client (also termed the Client) located in `client/`. + +Project build +------------- + +Execute these build commands, which run the [`bt`](#cc-1s8bUScadp) script, from +the root of the project. + +* To build the entire project, execute `./bt build`. +* To format and lint the entire project, execute `./bt flint`. +* To run all tests, execute `./bt test`. + +Commenting guide +---------------- + +This program uses a literate programming approach: comments are prose meant to +be read from top to bottom alongside the code, not annotations bolted onto +individual statements. + +`docs/style_guide.cpp` is the project's canonical, reader-facing style guide; +this section is a digest of it aimed at the Rust and TypeScript in this repo. +When asked to change "the style guide", edit that file, and keep the two +consistent. + +### What to comment + +* Use meaningful, descriptive names for variables, classes, functions, etc. Code + should be as self-documenting as possible. + +* Avoid comments when possible. Comments must describe current code, not its + history. Only add comments which supply what self-documenting code cannot. + +* Comments must satisfy at least one of these criteria: + + 1. Document a connection which cannot easily be determined by inspection -- + for example, the relationship between a web client HTTP request and the + Server endpoint which handles it. + 2. Record behavior discoverable only by running or debugging the code: a + third-party library quirk, a browser workaround, an ordering constraint. + Behavior which can be derived directly from the code should not produce a + comment. + 3. Capture design choices, requirements, etc. which specify the overall + purpose of the code at a higher level than the implementation. + 4. Link to an external reference (a manual, specification, etc.) which + explains a subtle design choice. +* Do not restate the code. Say what the item does, then add what the reader + cannot derive from the signature: + + ```rust + // Bad -- the signature already says this. + /// Set the file's contents to the given string. + fn set_contents(&mut self, contents: String); + + // Good -- keeps the summary, adds the constraint. + /// Replace the file's contents. The Client autosaves, so this runs on every + /// pause in typing; keep it cheap and idempotent. + fn set_contents(&mut self, contents: String); + ``` + +* Scale a comment's length to its altitude instead of aiming for uniform + brevity: file- and section-level comments carry the design narrative and may + run for dozens of lines (see `server/src/processing/cache.rs`), while a + comment on a single statement is a line or two. + +* In new work, mark deferred work with `TODO:` followed by both the task and the + condition which will resolve it, so a later reader knows when it may be + removed. Many existing `TODO`s predate this rule; leave them alone unless you + are already editing that code. + +* When implementing equations, place a comment giving the formula, along with an + explanation of the terms used, before the code implementing it. Use + LaTeX-style syntax: $x^2$. + +### Where to place comments + +Place documentation before the code it describes. In new and edited code, +comment each function parameter individually, and document the return value with +a comment placed immediately before the return type -- including in Rust, where +rustdoc renders neither. Many existing signatures are not yet annotated this +way; add annotations to signatures you touch rather than sweeping the tree: + +```rust +/// Phase 1 of hydration: parse the HTML, walk the DOM, then commit the +/// collected facts to the cache. +fn hydrate_dom( + // The HTML to hydrate. + html: &str, + // The cache for the project containing this file. + cache: &Arc>, + // The parsed, patched DOM plus the walk results needed by later phases. +) -> io::Result<(Rc, WalkContext)> { +``` + +### Doc block constraints + +Because comments become doc blocks, these mechanical rules apply: + +* Hold the indent *and* the delimiter constant across a comment's lines, and + match the indent to that of the code being described. +* Denote paragraphs using an empty comment (`//` or `///`), not an empty line. +* A comment on the same line as code is never a doc block; it stays part of the + code block. +* When commenting out code, use `/*** ... */` to prevent the code from being + treated as a doc block. + +### File structure + +Source files follow this template (a few predate it; match it in new files): + +1. Crate-level attributes (Rust only). +2. The GPL copyright and license block, copied verbatim from a neighboring file + rather than retyped. In Rust it uses plain `//`, so it stays a doc block + separate from the title which follows it. +3. A single level-1 heading titling the file: the file name in backticks -- + matching the file's actual name -- then `--`, then a short description. +4. The file-level design narrative, if the file needs one. +5. A `Modules` section, if the file has submodules, then an `Imports` section. + In Rust its subsections are `### Standard library`, `### Third-party`, and + `### Local`; the Client and the VSCode extension use their own names, so + follow the file you are editing. +6. The code, organized under further headings which outline the file. Don't skip + heading levels. + +Employ Markdown syntax throughout. Use setext underlines (`====` and `----`) for +heading levels 1 and 2, and ATX markers (`###`, `####`) for level 3 and below; +underline the full width of the heading text. Use asterisks for bullets, +emphasis, and strong emphasis. Wrap lines at 80 characters; if the indent +exceeds column 40, wrap at 40 columns past the indent instead of at column 80. + +```rust +//! `cache.rs` -- Keep a cache used to store all targets in a project +//! ================================================================= +//! +//! The cache stores the location and contents of every target in a project... + +// Imports +// ------- +// +// ### Standard library +use std::collections::HashMap; +``` + +### Rust specifics + +* Write file-level prose -- the title heading and the design narrative -- with + `//!`, so that it documents the module. +* Use `///` where allowed by rustdoc (functions, structs, enums, traits, and + macros); use `//` otherwise. + +### TypeScript specifics + +* Use `//` comments instead of `/**` blocks. +* Document parameters as described above instead of using `@param` tags. + +### Editing existing comments + +Comments describe the code as it now stands. When changing code inside a +documented region, revise the surrounding prose so that it still reads as a +continuous narrative: do not append a new comment beside text which the change +has made stale, and delete comments describing code which no longer exists. diff --git a/CHANGELOG.md b/CHANGELOG.md index 531c7b21..233590fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ details. You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see -[http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). Changelog ========= @@ -24,6 +25,13 @@ Changelog * No changes. +Version 0.3.2 -- 2026-Oct-31 +---------------------------- + +* Fix math formula retranslations. +* Add missing copyright notices, update copyright notices. +* Correct namespace used for HTML generation. + Version 0.3.1 -- 2026-Oct-21 ---------------------------- diff --git a/CLAUDE.md b/CLAUDE.md index 452a0329..eef4bd20 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,231 +1 @@ -Instructions for Claude Code -============================ - -Code blocks and doc blocks --------------------------- - -The CodeChat Editor divides source code into code blocks and documentation (doc) -blocks. These blocks are separated by newlines. A code block consists of all -lines in a source file which aren't classified as a doc block. Note that code -blocks may consist entirely of a comment, as illustrated below. - -A doc block consists of a comment (inline or block) optionally preceded by -whitespace and optionally succeeded by whitespace. At least one whitespace -character must separate the opening comment delimiter from the doc block text. -Doc blocks are differentiated by their indent -- the whitespace characters -preceding the opening comment delimiter -- and by the opening comment delimiter -itself. Adjacent doc blocks are combined into a single, larger doc block only -when both their indent and their delimiter match. - -```c -// This is all one doc block, since only the preceding -// whitespace (there is none) matters, not the amount of -// whitespace following the opening comment delimiters. - // This is the beginning of a different doc - // block, since the indent is different. - // Here's a third doc block. - /* And here's a fourth: a different opening delimiter starts a new doc - block even at an identical indent. Whitespace inside the comment - doesn't affect the classification. */ -// These are two separate doc blocks, -void foo(); -// since they are separated by a code block. -``` - -### Cross-references, gather elements, and fragments - -To refer to text in another section of the current document or any file in this -project: - -1. Assign a unique id for that section: `section - title`; in a code file, this must be placed in a doc block. Any HTML - element with an id can be the target of either a hyperlink or a - cross-reference. -2. Refer to it using a hyperlink or cross-reference. For example, the following - syntax links directly to the `` inside this section's heading: - `[Foo](#cc-sZ0Glsgjhu)` (link text is "Foo") / `` (link text comes from the cross-referenced span: - "Cross-references, gather elements, and fragments"); the same syntax (a bare - id with no file) also links to any file in the project. - -When implementing a specification: - -1. Label each doc block preceding non-contiguous section of code of more than - three lines with a fragment placed at the end of the doc block: ``. -2. Gather these fragments in a subheading following the specification: `

Implementation of [title of this section]

`. - -Each id must be unique throughout the entire project. To create an id: - -1. Randomly generate an id of the form `cc-[10 random ASCII letters or - numbers]`. -2. grep the project to ensure this id is unique. - -Architecture ------------- - -A Visual Studio Code extension in `extensions/VSCode` or the standalone server -in `extensions/standalone` exchanges messages with the CodeChat Editor Server, -located in `server/` (also termed the Server), which also exchanges messages -with the CodeChat Editor Client (also termed the Client) located in `client/`. - -Project build -------------- - -Execute these build commands, which run the [`bt`](#cc-1s8bUScadp) script, from -the root of the project. - -* To build the entire project, execute `./bt build`. -* To format and lint the entire project, execute `./bt flint`. -* To run all tests, execute `./bt test`. - -Commenting guide ----------------- - -This program uses a literate programming approach: comments are prose meant to -be read from top to bottom alongside the code, not annotations bolted onto -individual statements. - -`docs/style_guide.cpp` is the project's canonical, reader-facing style guide; -this section is a digest of it aimed at the Rust and TypeScript in this repo. -When asked to change "the style guide", edit that file, and keep the two -consistent. - -### What to comment - -* Use meaningful, descriptive names for variables, classes, functions, etc. Code - should be as self-documenting as possible. - -* Avoid comments when possible. Comments must describe current code, not its - history. Only add comments which supply what self-documenting code cannot. - -* Comments must satisfy at least one of these criteria: - - 1. Document a connection which cannot easily be determined by inspection -- - for example, the relationship between a web client HTTP request and the - Server endpoint which handles it. - 2. Record behavior discoverable only by running or debugging the code: a - third-party library quirk, a browser workaround, an ordering constraint. - Behavior which can be derived directly from the code should not produce a - comment. - 3. Capture design choices, requirements, etc. which specify the overall - purpose of the code at a higher level than the implementation. - 4. Link to an external reference (a manual, specification, etc.) which - explains a subtle design choice. -* Do not restate the code. Say what the item does, then add what the reader - cannot derive from the signature: - - ```rust - // Bad -- the signature already says this. - /// Set the file's contents to the given string. - fn set_contents(&mut self, contents: String); - - // Good -- keeps the summary, adds the constraint. - /// Replace the file's contents. The Client autosaves, so this runs on every - /// pause in typing; keep it cheap and idempotent. - fn set_contents(&mut self, contents: String); - ``` - -* Scale a comment's length to its altitude instead of aiming for uniform - brevity: file- and section-level comments carry the design narrative and may - run for dozens of lines (see `server/src/processing/cache.rs`), while a - comment on a single statement is a line or two. - -* In new work, mark deferred work with `TODO:` followed by both the task and the - condition which will resolve it, so a later reader knows when it may be - removed. Many existing `TODO`s predate this rule; leave them alone unless you - are already editing that code. - -* When implementing equations, place a comment giving the formula, along with an - explanation of the terms used, before the code implementing it. Use - LaTeX-style syntax: $x^2$. - -### Where to place comments - -Place documentation before the code it describes. In new and edited code, -comment each function parameter individually, and document the return value with -a comment placed immediately before the return type -- including in Rust, where -rustdoc renders neither. Many existing signatures are not yet annotated this -way; add annotations to signatures you touch rather than sweeping the tree: - -```rust -/// Phase 1 of hydration: parse the HTML, walk the DOM, then commit the -/// collected facts to the cache. -fn hydrate_dom( - // The HTML to hydrate. - html: &str, - // The cache for the project containing this file. - cache: &Arc>, - // The parsed, patched DOM plus the walk results needed by later phases. -) -> io::Result<(Rc, WalkContext)> { -``` - -### Doc block constraints - -Because comments become doc blocks, these mechanical rules apply: - -* Hold the indent *and* the delimiter constant across a comment's lines, and - match the indent to that of the code being described. -* Denote paragraphs using an empty comment (`//` or `///`), not an empty line. -* A comment on the same line as code is never a doc block; it stays part of the - code block. -* When commenting out code, use `/*** ... */` to prevent the code from being - treated as a doc block. - -### File structure - -Source files follow this template (a few predate it; match it in new files): - -1. Crate-level attributes (Rust only). -2. The GPL copyright and license block, copied verbatim from a neighboring file - rather than retyped. In Rust it uses plain `//`, so it stays a doc block - separate from the title which follows it. -3. A single level-1 heading titling the file: the file name in backticks -- - matching the file's actual name -- then `--`, then a short description. -4. The file-level design narrative, if the file needs one. -5. A `Modules` section, if the file has submodules, then an `Imports` section. - In Rust its subsections are `### Standard library`, `### Third-party`, and - `### Local`; the Client and the VSCode extension use their own names, so - follow the file you are editing. -6. The code, organized under further headings which outline the file. Don't skip - heading levels. - -Employ Markdown syntax throughout. Use setext underlines (`====` and `----`) for -heading levels 1 and 2, and ATX markers (`###`, `####`) for level 3 and below; -underline the full width of the heading text. Use asterisks for bullets, -emphasis, and strong emphasis. Wrap lines at 80 characters; if the indent -exceeds column 40, wrap at 40 columns past the indent instead of at column 80. - -```rust -//! `cache.rs` -- Keep a cache used to store all targets in a project -//! ================================================================= -//! -//! The cache stores the location and contents of every target in a project... - -// Imports -// ------- -// -// ### Standard library -use std::collections::HashMap; -``` - -### Rust specifics - -* Write file-level prose -- the title heading and the design narrative -- with - `//!`, so that it documents the module. -* Use `///` where allowed by rustdoc (functions, structs, enums, traits, and - macros); use `//` otherwise. - -### TypeScript specifics - -* Use `//` comments instead of `/**` blocks. -* Document parameters as described above instead of using `@param` tags. - -### Editing existing comments - -Comments describe the code as it now stands. When changing code inside a -documented region, revise the surrounding prose so that it still reads as a -continuous narrative: do not append a new comment beside text which the change -has made stale, and delete comments describing code which no longer exists. +@AGENTS.md \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index d4d0b77e..feefffa7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.19.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b796ba3c974e5133f6ca1a2c4e97c5941ea1a46d202df83344afaa18219f1a62" +checksum = "d20a22850ea7fecad12c5f8cd97d246c3af1f04ef400033977c2f13425c45816" dependencies = [ "actix-codec", "actix-service", @@ -156,9 +156,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.17.0" +version = "4.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67756b0fc99e07b8702b9a856e3d6ec036387243c2ce6310070d1e8f02680bb0" +checksum = "81f8da0d2ae4200dde8773d72ba47a65c220b251ba7b9248db5bd263c247e959" dependencies = [ "actix-codec", "actix-http", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "actix-web-codegen" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96b09c4878563f8ab4a5fd0c59f9f0d6e0e9f60eb9b748526a0b9604fd89c50" +checksum = "f7c9f4c52b954a73c76757a3952d3437fca00a2fbcb49704f8a6ea9f767e73f0" dependencies = [ "actix-router", "proc-macro2", @@ -440,9 +440,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.18.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13" +checksum = "048006790404103c488e6c5616b3e7e702a71292aadda08e8f7698a9e0d2eb53" dependencies = [ "aws-lc-sys", "zeroize", @@ -450,9 +450,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc" +checksum = "8bfbe32ac36b3c428696ce315464181bc4029d689fd58e3f2a4e58c252242f52" dependencies = [ "cc", "cmake", @@ -500,9 +500,9 @@ dependencies = [ [[package]] name = "brotli" -version = "9.0.0" +version = "9.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b851b75c23ca7873623d612fe49bd1989aeb03d08fb9432187eb253d3d4c6b" +checksum = "627b7cfb0578f0eafce087a90fcd40add1231900b69e4d4de2d456260a4f5d81" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -511,9 +511,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "6.0.1" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941cd9bd4ddab83cb46fa5a2d428f1c857b24ac78cb876cf7beb710840934bd7" +checksum = "34c6783f42c21c952ad7112b354f0ba2f10760e9decea5b1b60523d6e270faaf" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -568,9 +568,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" +checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" dependencies = [ "find-msvc-tools", "jobserver", @@ -824,9 +824,9 @@ checksum = "18f12cc9948ed9604230cdddc7c86e270f9401ccbe3c2e98a4378c5e7632212f" [[package]] name = "const_format" -version = "0.2.36" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" +checksum = "a3decb4d6965448659923544a634a0571ba44cede4e11ef15a5a317126840454" dependencies = [ "const_format_proc_macros", "konst", @@ -834,9 +834,9 @@ dependencies = [ [[package]] name = "const_format_proc_macros" -version = "0.2.34" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +checksum = "941b570269a642506f08cb5b688c04bfa6cfd41a26f8bcdc49db8fd00c0ab659" dependencies = [ "proc-macro2", "quote", @@ -1199,9 +1199,9 @@ checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" [[package]] name = "encoding_rs" -version = "0.8.42" +version = "0.8.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" +checksum = "89253175e704ab869b04f9db224d38630e0211a53841a79181deae0889e169f5" dependencies = [ "cfg-if", "core_detect", @@ -1229,9 +1229,9 @@ dependencies = [ [[package]] name = "escape-simd" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120339709b24832c07464b0838828361b735d793c409b8ca3147db0dae601542" +checksum = "f0440157235aa4badd45ea073af8de2ba44ffead74bf8a7833b215533c36f08e" [[package]] name = "fastrand" @@ -1328,15 +1328,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - [[package]] name = "futures" version = "0.3.34" @@ -1466,9 +1457,9 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" +checksum = "f98b0d85522dc0a824cfebbc9594ff4a9b289c568bea0370319dfbdf20ccdd2d" dependencies = [ "aho-corasick", "bstr", @@ -1736,9 +1727,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -1750,9 +1741,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -1764,9 +1755,9 @@ dependencies = [ [[package]] name = "icu_locale_fallback" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" +checksum = "406e9ae5b95d8aa37db6293405931b766a6172d1848daee22d70eb44aa78a43c" dependencies = [ "icu_locale_core", "icu_locale_fallback_data", @@ -1778,15 +1769,15 @@ dependencies = [ [[package]] name = "icu_locale_fallback_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" +checksum = "3632ebbd0c5c3637ba1a40bdf8288f2cb9d2268e73441a69d5fc73d7cfbaa87c" [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1798,15 +1789,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ "displaydoc", "icu_collections", @@ -1819,15 +1810,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -1842,9 +1833,9 @@ dependencies = [ [[package]] name = "icu_segmenter" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" +checksum = "61b195dc605f81aa181bec9b3bd14e26cc71b903e4644f6af578ca9772c7a710" dependencies = [ "icu_collections", "icu_locale_fallback", @@ -1853,14 +1844,15 @@ dependencies = [ "potential_utf", "smallvec", "utf8_iter", + "zerotrie", "zerovec", ] [[package]] name = "icu_segmenter_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" +checksum = "913a7d294ad056474749152107309fdee3ec17d2482d1ab70fdc61a81c64b9a3" [[package]] name = "idna" @@ -1885,9 +1877,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" +checksum = "484be5657551d7868d67587df967fb4fcbe9d266a761cc855aaa148fda0b3cc7" dependencies = [ "crossbeam-deque", "globset", @@ -2078,9 +2070,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a" dependencies = [ "cfg-if", "futures-util", @@ -2089,9 +2081,9 @@ dependencies = [ [[package]] name = "json-escape-simd" -version = "3.1.2" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6520172708e1b08b95f31bbf76cec064db4203a615cf2fb4e1128d6dd142b033" +checksum = "d302fe9761f19c4123edfe82b66be55a08e54012403cd7e27f8a176538737954" dependencies = [ "escape-simd", ] @@ -2243,9 +2235,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" dependencies = [ "serde_core", ] @@ -2450,9 +2442,9 @@ checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" [[package]] name = "napi" -version = "3.14.2" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e2cf85c02d9b057898c485b824c3c416b65193689e2b7f517efc94b86ed24c" +checksum = "907ff7366fb7182e28edd0f08ef8ac5d6b13b8d65a3c0b3a10bf3ac092437d6b" dependencies = [ "bitflags", "ctor", @@ -2473,9 +2465,9 @@ checksum = "b899b545d3aa6dca985939059f258c5488d34e4ecf39c274e20009748f4b846d" [[package]] name = "napi-derive" -version = "3.6.12" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92cec6048ac04041ac8055bdce1ec4f353416cd443ba9222bf73af790c3d4495" +checksum = "d32eb00f92f84cf462fc328f49082b29c2a7d2eebeb1d447d19c1f9fdd9f89ee" dependencies = [ "convert_case 0.12.0", "ctor", @@ -2487,9 +2479,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "6.1.5" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae2444f4ba7333754bb73414ff8059dec2cb23b83a95bd1a0bf08169eed1be0" +checksum = "d1fe28c64d8fc12e69f9b817d0febdbe7914555760f1e353106281b8ff99cc90" dependencies = [ "convert_case 0.12.0", "proc-macro2", @@ -2500,9 +2492,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22a4f25c16a5c5411d987cd6fbd48313522ae1789ade2d6dd3efdc6d40a0fc8" +checksum = "d153beb7d5c973f4b9395be8a83054a28968b61188f1dd1a2cc2321af22daea2" dependencies = [ "libloading", ] @@ -2551,20 +2543,21 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "notify" -version = "8.2.0" +version = "8.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" +checksum = "82f812702fbc75d35416d3f884e04925be7e9498f4eceea2e24ba34559284674" dependencies = [ "bitflags", - "fsevent-sys", "inotify", "kqueue", "libc", "log", "mio", "notify-types", + "objc2-core-foundation", + "objc2-core-services", "walkdir", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2582,9 +2575,9 @@ dependencies = [ [[package]] name = "notify-types" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" +checksum = "0a437a9308232ce794b1e7fdf540d38ea37efc3c73492640c13b4c8568b8f108" dependencies = [ "bitflags", ] @@ -2663,6 +2656,16 @@ dependencies = [ "objc2", ] +[[package]] +name = "objc2-core-services" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583300ad934cba24ff5292aee751ecc070f7ca6b39a574cc21b7b5e588e06a0b" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -2694,9 +2697,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "7e036b411754132fd6b74e94b74e9a13c5cf606fa93d1885c35860d3060820b1" [[package]] name = "option-ext" @@ -3157,21 +3160,20 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd47a460a9cbc3b3429c7e22bf0d76653e779319bae45a499ca010c9a990bb23" +checksum = "a8db75153506001cb36ed924f08cadc862eb3f8c4d0d534139f29074769d7660" dependencies = [ "memchr", - "psm", - "stacker", + "pest_stack_guard", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203e46697708f7519ab1608393cf89239cafb46b8e6d08a8ffe359359b11ef44" +checksum = "20aa17e11fb35664b67d5214a0afac57a360d231b6ec53d6eba0700b27d933b4" dependencies = [ "pest", "pest_generator", @@ -3179,9 +3181,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84ae6340a458d3d6cfc73cf328cf3cfe90b2484cd0de25eb66aa954615ed4d5" +checksum = "626ec5afccf44ccbfeb2b232316510bb55b4bf34d891afcb0fb07d2b17d7fe9d" dependencies = [ "pest", "pest_meta", @@ -3192,13 +3194,23 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57f92f32b3dbce6598fd8f5cdf1f06a6072570b8103fa21728fa9036923e710" +checksum = "b3f45b6caa65c1b08186832745159c2529994146340a7bf44168095469720f5d" dependencies = [ "pest", ] +[[package]] +name = "pest_stack_guard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97e6cd2217057fa86b6eaa512917e58089d875b957a31e35e7ab729977e0a5f2" +dependencies = [ + "psm", + "stacker", +] + [[package]] name = "phf" version = "0.11.3" @@ -3459,9 +3471,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278e9268c93b9e498a2da46c34d90ba93a3255eb99009646398f34bc73ab36eb" +checksum = "3db2be46835f013dd3f4fa7f5f7402c537787b54ebb6fe2b94bbdd7e2669bb7b" dependencies = [ "bitflags", "memchr", @@ -3748,9 +3760,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa" dependencies = [ "bitflags", "errno", @@ -4113,9 +4125,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.3" +version = "1.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" +checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" [[package]] name = "smawk" @@ -4484,9 +4496,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "serde_core", @@ -4729,9 +4741,9 @@ dependencies = [ [[package]] name = "typed-path" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ec2755506471f54baf5e4bb5499d8e510cc1caf271270e778a736bd2d7336c" +checksum = "9ce898823d8cd0f028662d2f349694b1af0a5cc9be83f1d213a00d3147445e1e" [[package]] name = "typemap-ors" @@ -4780,9 +4792,9 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557" [[package]] name = "unicode-xid" @@ -4831,9 +4843,12 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8_iter" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0" +dependencies = [ + "utf_types", +] [[package]] name = "utf8parse" @@ -4841,6 +4856,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "utf_types" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6" + [[package]] name = "v_escape-base" version = "0.1.0" @@ -4919,12 +4940,11 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c" dependencies = [ "cfg-if", - "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", @@ -4932,9 +4952,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.79" +version = "0.4.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501" dependencies = [ "js-sys", "tokio", @@ -4943,9 +4963,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4953,9 +4973,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a" dependencies = [ "bumpalo", "proc-macro2", @@ -4966,9 +4986,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e" dependencies = [ "unicode-ident", ] @@ -4988,9 +5008,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88" dependencies = [ "js-sys", "wasm-bindgen", @@ -5032,9 +5052,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.2.4" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62c35be770821a214dbc362fc26908c853e776c0004294d0b10b8a6bad582f94" +checksum = "fe8d20d0214027baf11b8b0cc307c1da7657d8f4db9aa956f7de27a6fb1acbd5" dependencies = [ "jni 0.22.4", "log", @@ -5048,9 +5068,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ec80e73fd8baf57bf0d9615554c75348bda990d6d5bbeab964dd068319fecb" +checksum = "e49d0e65abc00c142e8f9428da991da9f1a250c39be97459901eb12b9b49f62a" dependencies = [ "rustls-pki-types", ] @@ -5432,9 +5452,9 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "xattr" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +checksum = "963d6fab92d5504b971dc8bd90ca743c2575e590bc8071ea5bc571598667ae08" dependencies = [ "libc", "rustix", @@ -5458,9 +5478,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5540,9 +5560,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "serde", "yoke", @@ -5552,9 +5572,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", @@ -5563,16 +5583,18 @@ dependencies = [ [[package]] name = "zip" -version = "9.0.5" +version = "9.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e04976da629d3b04204ba8105b396a193af8ad2583b2c79bfb3ab8af580a11e" +checksum = "3f5b58784007ff6e5f280ec82c8596686a3b9b5dd5836c63288d4479f84728b9" dependencies = [ "crc32fast", "flate2", + "getrandom 0.4.3", "indexmap", "memchr", "nix", "typed-path", + "windows-sys 0.61.2", "zopfli", ] diff --git a/Cargo.toml b/Cargo.toml index 556547a8..3261de03 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,9 +15,11 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # -# # `Cargo.toml` -- Workspace manifest for the CodeChat Editor +#

+# Cargo.toml -- Workspace manifest for the CodeChat Editor +#

# # Every Rust package in this repository except `builder` is a member of this one # workspace. Sharing one `target/` only avoids recompilation when the packages @@ -32,12 +35,7 @@ # executing while it drives the rest of the build, and Windows refuses to relink # a running executable. [workspace] -members = [ - "extensions/VSCode", - "extensions/standalone", - "server", - "test_utils", -] +members = ["extensions/VSCode", "extensions/standalone", "server", "test_utils"] exclude = [ # `builder` is deliberately its own workspace; see the note above. "builder", diff --git a/LICENSE.md b/LICENSE.md index 6c0b6ced..7191b9ef 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,527 +1,581 @@ -

GNU GENERAL PUBLIC LICENSE

-

Version 3, 29 June 2007

-

Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>

-

Everyone is permitted to copy and distribute verbatim copies of this license - document, but changing it is not allowed.

-

Preamble

-

The GNU General Public License is a free, copyleft license for software and - other kinds of works.

-

The licenses for most software and other practical works are designed to - take away your freedom to share and change the works. By contrast, the GNU - General Public License is intended to guarantee your freedom to share and - change all versions of a program--to make sure it remains free software for - all its users. We, the Free Software Foundation, use the GNU General Public - License for most of our software; it applies also to any other work - released this way by its authors. You can apply it to your programs, too. -

-

When we speak of free software, we are referring to freedom, not price. Our - General Public Licenses are designed to make sure that you have the freedom - to distribute copies of free software (and charge for them if you wish), - that you receive source code or can get it if you want it, that you can - change the software or use pieces of it in new free programs, and that you - know you can do these things.

-

To protect your rights, we need to prevent others from denying you these - rights or asking you to surrender the rights. Therefore, you have certain - responsibilities if you distribute copies of the software, or if you modify - it: responsibilities to respect the freedom of others.

-

For example, if you distribute copies of such a program, whether gratis or - for a fee, you must pass on to the recipients the same freedoms that you - received. You must make sure that they, too, receive or can get the source - code. And you must show them these terms so they know their rights.

-

Developers that use the GNU GPL protect your rights with two steps: (1) - assert copyright on the software, and (2) offer you this License giving you - legal permission to copy, distribute and/or modify it.

-

For the developers' and authors' protection, the GPL clearly explains that - there is no warranty for this free software. For both users' and authors' - sake, the GPL requires that modified versions be marked as changed, so that - their problems will not be attributed erroneously to authors of previous - versions.

-

Some devices are designed to deny users access to install or run modified - versions of the software inside them, although the manufacturer can do so. - This is fundamentally incompatible with the aim of protecting users' - freedom to change the software. The systematic pattern of such abuse occurs - in the area of products for individuals to use, which is precisely where it - is most unacceptable. Therefore, we have designed this version of the GPL - to prohibit the practice for those products. If such problems arise - substantially in other domains, we stand ready to extend this provision to - those domains in future versions of the GPL, as needed to protect the - freedom of users.

-

Finally, every program is threatened constantly by software patents. States - should not allow patents to restrict development and use of software on - general-purpose computers, but in those that do, we wish to avoid the - special danger that patents applied to a free program could make it - effectively proprietary. To prevent this, the GPL assures that patents - cannot be used to render the program non-free.

-

The precise terms and conditions for copying, distribution and modification - follow.

-

TERMS AND CONDITIONS

-

0. Definitions.

-

“This License” refers to version 3 of the GNU General Public - License.

-

“Copyright” also means copyright-like laws that apply to other - kinds of works, such as semiconductor masks.

-

“The Program” refers to any copyrightable work licensed under - this License. Each licensee is addressed as “you”. - “Licensees” and “recipients” may be individuals or - organizations.

-

To “modify” a work means to copy from or adapt all or part of - the work in a fashion requiring copyright permission, other than the making - of an exact copy. The resulting work is called a “modified - version” of the earlier work or a work “based on” the - earlier work.

-

A “covered work” means either the unmodified Program or a work - based on the Program.

-

To “propagate” a work means to do anything with it that, without - permission, would make you directly or secondarily liable for infringement - under applicable copyright law, except executing it on a computer or - modifying a private copy. Propagation includes copying, distribution (with - or without modification), making available to the public, and in some - countries other activities as well.

-

To “convey” a work means any kind of propagation that enables - other parties to make or receive copies. Mere interaction with a user - through a computer network, with no transfer of a copy, is not conveying. -

-

An interactive user interface displays “Appropriate Legal - Notices” to the extent that it includes a convenient and prominently - visible feature that (1) displays an appropriate copyright notice, and (2) - tells the user that there is no warranty for the work (except to the extent - that warranties are provided), that licensees may convey the work under - this License, and how to view a copy of this License. If the interface - presents a list of user commands or options, such as a menu, a prominent - item in the list meets this criterion.

-

1. Source Code.

-

The “source code” for a work means the preferred form of the - work for making modifications to it. “Object code” means any - non-source form of a work.

-

A “Standard Interface” means an interface that either is an - official standard defined by a recognized standards body, or, in the case - of interfaces specified for a particular programming language, one that is - widely used among developers working in that language.

-

The “System Libraries” of an executable work include anything, - other than the work as a whole, that (a) is included in the normal form of - packaging a Major Component, but which is not part of that Major Component, - and (b) serves only to enable use of the work with that Major Component, or - to implement a Standard Interface for which an implementation is available - to the public in source code form. A “Major Component”, in this - context, means a major essential component (kernel, window system, and so - on) of the specific operating system (if any) on which the executable work - runs, or a compiler used to produce the work, or an object code interpreter - used to run it.

-

The “Corresponding Source” for a work in object code form means - all the source code needed to generate, install, and (for an executable - work) run the object code and to modify the work, including scripts to - control those activities. However, it does not include the work's System - Libraries, or general-purpose tools or generally available free programs - which are used unmodified in performing those activities but which are not - part of the work. For example, Corresponding Source includes interface - definition files associated with source files for the work, and the source - code for shared libraries and dynamically linked subprograms that the work - is specifically designed to require, such as by intimate data communication - or control flow between those subprograms and other parts of the work.

-

The Corresponding Source need not include anything that users can regenerate - automatically from other parts of the Corresponding Source.

-

The Corresponding Source for a work in source code form is that same work. -

-

2. Basic Permissions.

-

All rights granted under this License are granted for the term of copyright - on the Program, and are irrevocable provided the stated conditions are met. - This License explicitly affirms your unlimited permission to run the - unmodified Program. The output from running a covered work is covered by - this License only if the output, given its content, constitutes a covered - work. This License acknowledges your rights of fair use or other - equivalent, as provided by copyright law.

-

You may make, run and propagate covered works that you do not convey, - without conditions so long as your license otherwise remains in force. You - may convey covered works to others for the sole purpose of having them make - modifications exclusively for you, or provide you with facilities for - running those works, provided that you comply with the terms of this - License in conveying all material for which you do not control copyright. - Those thus making or running the covered works for you must do so - exclusively on your behalf, under your direction and control, on terms that - prohibit them from making any copies of your copyrighted material outside - their relationship with you.

-

Conveying under any other circumstances is permitted solely under the - conditions stated below. Sublicensing is not allowed; section 10 makes it - unnecessary.

-

3. Protecting Users' Legal Rights From Anti-Circumvention - Law.

-

No covered work shall be deemed part of an effective technological measure - under any applicable law fulfilling obligations under article 11 of the - WIPO copyright treaty adopted on 20 December 1996, or similar laws - prohibiting or restricting circumvention of such measures.

-

When you convey a covered work, you waive any legal power to forbid - circumvention of technological measures to the extent such circumvention is - effected by exercising rights under this License with respect to the - covered work, and you disclaim any intention to limit operation or - modification of the work as a means of enforcing, against the work's users, - your or third parties' legal rights to forbid circumvention of - technological measures.

-

4. Conveying Verbatim Copies.

-

You may convey verbatim copies of the Program's source code as you receive - it, in any medium, provided that you conspicuously and appropriately - publish on each copy an appropriate copyright notice; keep intact all - notices stating that this License and any non-permissive terms added in - accord with section 7 apply to the code; keep intact all notices of the - absence of any warranty; and give all recipients a copy of this License - along with the Program.

-

You may charge any price or no price for each copy that you convey, and you - may offer support or warranty protection for a fee.

-

5. Conveying Modified Source Versions.

-

You may convey a work based on the Program, or the modifications to produce - it from the Program, in the form of source code under the terms of section - 4, provided that you also meet all of these conditions:

-
    -
  • a) The work must carry prominent notices stating that you modified it, - and giving a relevant date.
  • -
  • b) The work must carry prominent notices stating that it is released - under this License and any conditions added under section 7. This - requirement modifies the requirement in section 4 to “keep intact - all notices”.
  • -
  • c) You must license the entire work, as a whole, under this License to - anyone who comes into possession of a copy. This License will therefore - apply, along with any applicable section 7 additional terms, to the - whole of the work, and all its parts, regardless of how they are - packaged. This License gives no permission to license the work in any - other way, but it does not invalidate such permission if you have - separately received it.
  • -
  • d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your work - need not make them do so.
  • -
-

A compilation of a covered work with other separate and independent works, - which are not by their nature extensions of the covered work, and which are - not combined with it such as to form a larger program, in or on a volume of - a storage or distribution medium, is called an “aggregate” if - the compilation and its resulting copyright are not used to limit the - access or legal rights of the compilation's users beyond what the - individual works permit. Inclusion of a covered work in an aggregate does - not cause this License to apply to the other parts of the aggregate.

-

6. Conveying Non-Source Forms.

-

You may convey a covered work in object code form under the terms of - sections 4 and 5, provided that you also convey the machine-readable - Corresponding Source under the terms of this License, in one of these ways: -

-
    -
  • a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium customarily - used for software interchange.
  • -
  • b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a written - offer, valid for at least three years and valid for as long as you - offer spare parts or customer support for that product model, to give - anyone who possesses the object code either (1) a copy of the - Corresponding Source for all the software in the product that is - covered by this License, on a durable physical medium customarily used - for software interchange, for a price no more than your reasonable cost - of physically performing this conveying of source, or (2) access to - copy the Corresponding Source from a network server at no charge.
  • -
  • c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This alternative is - allowed only occasionally and noncommercially, and only if you received - the object code with such an offer, in accord with subsection 6b.
  • -
  • d) Convey the object code by offering access from a designated place - (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to copy - the object code is a network server, the Corresponding Source may be on - a different server (operated by you or a third party) that supports - equivalent copying facilities, provided you maintain clear directions - next to the object code saying where to find the Corresponding Source. - Regardless of what server hosts the Corresponding Source, you remain - obligated to ensure that it is available for as long as needed to - satisfy these requirements.
  • -
  • e) Convey the object code using peer-to-peer transmission, provided you - inform other peers where the object code and Corresponding Source of - the work are being offered to the general public at no charge under - subsection 6d.
  • -
-

A separable portion of the object code, whose source code is excluded from - the Corresponding Source as a System Library, need not be included in - conveying the object code work.

-

A “User Product” is either (1) a “consumer product”, - which means any tangible personal property which is normally used for - personal, family, or household purposes, or (2) anything designed or sold - for incorporation into a dwelling. In determining whether a product is a - consumer product, doubtful cases shall be resolved in favor of coverage. - For a particular product received by a particular user, “normally - used” refers to a typical or common use of that class of product, - regardless of the status of the particular user or of the way in which the - particular user actually uses, or expects or is expected to use, the - product. A product is a consumer product regardless of whether the product - has substantial commercial, industrial or non-consumer uses, unless such - uses represent the only significant mode of use of the product.

-

“Installation Information” for a User Product means any methods, - procedures, authorization keys, or other information required to install - and execute modified versions of a covered work in that User Product from a - modified version of its Corresponding Source. The information must suffice - to ensure that the continued functioning of the modified object code is in - no case prevented or interfered with solely because modification has been - made.

-

If you convey an object code work under this section in, or with, or - specifically for use in, a User Product, and the conveying occurs as part - of a transaction in which the right of possession and use of the User - Product is transferred to the recipient in perpetuity or for a fixed term - (regardless of how the transaction is characterized), the Corresponding - Source conveyed under this section must be accompanied by the Installation - Information. But this requirement does not apply if neither you nor any - third party retains the ability to install modified object code on the User - Product (for example, the work has been installed in ROM).

-

The requirement to provide Installation Information does not include a - requirement to continue to provide support service, warranty, or updates - for a work that has been modified or installed by the recipient, or for the - User Product in which it has been modified or installed. Access to a - network may be denied when the modification itself materially and adversely - affects the operation of the network or violates the rules and protocols - for communication across the network.

-

Corresponding Source conveyed, and Installation Information provided, in - accord with this section must be in a format that is publicly documented - (and with an implementation available to the public in source code form), - and must require no special password or key for unpacking, reading or - copying.

-

7. Additional Terms.

-

“Additional permissions” are terms that supplement the terms of - this License by making exceptions from one or more of its conditions. - Additional permissions that are applicable to the entire Program shall be - treated as though they were included in this License, to the extent that - they are valid under applicable law. If additional permissions apply only - to part of the Program, that part may be used separately under those - permissions, but the entire Program remains governed by this License - without regard to the additional permissions.

-

When you convey a copy of a covered work, you may at your option remove any - additional permissions from that copy, or from any part of it. (Additional - permissions may be written to require their own removal in certain cases - when you modify the work.) You may place additional permissions on - material, added by you to a covered work, for which you have or can give - appropriate copyright permission.

-

Notwithstanding any other provision of this License, for material you add to - a covered work, you may (if authorized by the copyright holders of that - material) supplement the terms of this License with terms:

-
    -
  • a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or
  • -
  • b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or
  • -
  • c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or
  • -
  • d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or
  • -
  • e) Declining to grant rights under trademark law for use of some trade - names, trademarks, or service marks; or
  • -
  • f) Requiring indemnification of licensors and authors of that material - by anyone who conveys the material (or modified versions of it) with - contractual assumptions of liability to the recipient, for any - liability that these contractual assumptions directly impose on those - licensors and authors.
  • -
-

All other non-permissive additional terms are considered “further - restrictions” within the meaning of section 10. If the Program as you - received it, or any part of it, contains a notice stating that it is - governed by this License along with a term that is a further restriction, - you may remove that term. If a license document contains a further - restriction but permits relicensing or conveying under this License, you - may add to a covered work material governed by the terms of that license - document, provided that the further restriction does not survive such - relicensing or conveying.

-

If you add terms to a covered work in accord with this section, you must - place, in the relevant source files, a statement of the additional terms - that apply to those files, or a notice indicating where to find the - applicable terms.

-

Additional terms, permissive or non-permissive, may be stated in the form of - a separately written license, or stated as exceptions; the above - requirements apply either way.

-

8. Termination.

-

You may not propagate or modify a covered work except as expressly provided - under this License. Any attempt otherwise to propagate or modify it is - void, and will automatically terminate your rights under this License - (including any patent licenses granted under the third paragraph of section - 11).

-

However, if you cease all violation of this License, then your license from - a particular copyright holder is reinstated (a) provisionally, unless and - until the copyright holder explicitly and finally terminates your license, - and (b) permanently, if the copyright holder fails to notify you of the - violation by some reasonable means prior to 60 days after the cessation. -

-

Moreover, your license from a particular copyright holder is reinstated - permanently if the copyright holder notifies you of the violation by some - reasonable means, this is the first time you have received notice of - violation of this License (for any work) from that copyright holder, and - you cure the violation prior to 30 days after your receipt of the notice. -

-

Termination of your rights under this section does not terminate the - licenses of parties who have received copies or rights from you under this - License. If your rights have been terminated and not permanently - reinstated, you do not qualify to receive new licenses for the same - material under section 10.

-

9. Acceptance Not Required for Having Copies.

-

You are not required to accept this License in order to receive or run a - copy of the Program. Ancillary propagation of a covered work occurring - solely as a consequence of using peer-to-peer transmission to receive a - copy likewise does not require acceptance. However, nothing other than this - License grants you permission to propagate or modify any covered work. - These actions infringe copyright if you do not accept this License. - Therefore, by modifying or propagating a covered work, you indicate your - acceptance of this License to do so.

-

10. Automatic Licensing of Downstream Recipients.

-

Each time you convey a covered work, the recipient automatically receives a - license from the original licensors, to run, modify and propagate that - work, subject to this License. You are not responsible for enforcing - compliance by third parties with this License.

-

An “entity transaction” is a transaction transferring control of - an organization, or substantially all assets of one, or subdividing an - organization, or merging organizations. If propagation of a covered work - results from an entity transaction, each party to that transaction who - receives a copy of the work also receives whatever licenses to the work the - party's predecessor in interest had or could give under the previous - paragraph, plus a right to possession of the Corresponding Source of the - work from the predecessor in interest, if the predecessor has it or can get - it with reasonable efforts.

-

You may not impose any further restrictions on the exercise of the rights - granted or affirmed under this License. For example, you may not impose a - license fee, royalty, or other charge for exercise of rights granted under - this License, and you may not initiate litigation (including a cross-claim - or counterclaim in a lawsuit) alleging that any patent claim is infringed - by making, using, selling, offering for sale, or importing the Program or - any portion of it.

-

11. Patents.

-

A “contributor” is a copyright holder who authorizes use under - this License of the Program or a work on which the Program is based. The - work thus licensed is called the contributor's “contributor - version”.

-

A contributor's “essential patent claims” are all patent claims - owned or controlled by the contributor, whether already acquired or - hereafter acquired, that would be infringed by some manner, permitted by - this License, of making, using, or selling its contributor version, but do - not include claims that would be infringed only as a consequence of further - modification of the contributor version. For purposes of this definition, - “control” includes the right to grant patent sublicenses in a - manner consistent with the requirements of this License.

-

Each contributor grants you a non-exclusive, worldwide, royalty-free patent - license under the contributor's essential patent claims, to make, use, - sell, offer for sale, import and otherwise run, modify and propagate the - contents of its contributor version.

-

In the following three paragraphs, a “patent license” is any - express agreement or commitment, however denominated, not to enforce a - patent (such as an express permission to practice a patent or covenant not - to sue for patent infringement). To “grant” such a patent - license to a party means to make such an agreement or commitment not to - enforce a patent against the party.

-

If you convey a covered work, knowingly relying on a patent license, and the - Corresponding Source of the work is not available for anyone to copy, free - of charge and under the terms of this License, through a publicly available - network server or other readily accessible means, then you must either (1) - cause the Corresponding Source to be so available, or (2) arrange to - deprive yourself of the benefit of the patent license for this particular - work, or (3) arrange, in a manner consistent with the requirements of this - License, to extend the patent license to downstream recipients. - “Knowingly relying” means you have actual knowledge that, but - for the patent license, your conveying the covered work in a country, or - your recipient's use of the covered work in a country, would infringe one - or more identifiable patents in that country that you have reason to - believe are valid.

-

If, pursuant to or in connection with a single transaction or arrangement, - you convey, or propagate by procuring conveyance of, a covered work, and - grant a patent license to some of the parties receiving the covered work - authorizing them to use, propagate, modify or convey a specific copy of the - covered work, then the patent license you grant is automatically extended - to all recipients of the covered work and works based on it.

-

A patent license is “discriminatory” if it does not include - within the scope of its coverage, prohibits the exercise of, or is - conditioned on the non-exercise of one or more of the rights that are - specifically granted under this License. You may not convey a covered work - if you are a party to an arrangement with a third party that is in the - business of distributing software, under which you make payment to the - third party based on the extent of your activity of conveying the work, and - under which the third party grants, to any of the parties who would receive - the covered work from you, a discriminatory patent license (a) in - connection with copies of the covered work conveyed by you (or copies made - from those copies), or (b) primarily for and in connection with specific - products or compilations that contain the covered work, unless you entered - into that arrangement, or that patent license was granted, prior to 28 - March 2007.

-

Nothing in this License shall be construed as excluding or limiting any - implied license or other defenses to infringement that may otherwise be - available to you under applicable patent law.

-

12. No Surrender of Others' Freedom.

-

If conditions are imposed on you (whether by court order, agreement or - otherwise) that contradict the conditions of this License, they do not - excuse you from the conditions of this License. If you cannot convey a - covered work so as to satisfy simultaneously your obligations under this - License and any other pertinent obligations, then as a consequence you may - not convey it at all. For example, if you agree to terms that obligate you - to collect a royalty for further conveying from those to whom you convey - the Program, the only way you could satisfy both those terms and this - License would be to refrain entirely from conveying the Program.

-

13. Use with the GNU Affero General Public License.

-

Notwithstanding any other provision of this License, you have permission to - link or combine any covered work with a work licensed under version 3 of - the GNU Affero General Public License into a single combined work, and to - convey the resulting work. The terms of this License will continue to apply - to the part which is the covered work, but the special requirements of the - GNU Affero General Public License, section 13, concerning interaction - through a network will apply to the combination as such.

-

14. Revised Versions of this License.

-

The Free Software Foundation may publish revised and/or new versions of the - GNU General Public License from time to time. Such new versions will be - similar in spirit to the present version, but may differ in detail to - address new problems or concerns.

-

Each version is given a distinguishing version number. If the Program - specifies that a certain numbered version of the GNU General Public License - “or any later version” applies to it, you have the option of - following the terms and conditions either of that numbered version or of - any later version published by the Free Software Foundation. If the Program - does not specify a version number of the GNU General Public License, you - may choose any version ever published by the Free Software Foundation.

-

If the Program specifies that a proxy can decide which future versions of - the GNU General Public License can be used, that proxy's public statement - of acceptance of a version permanently authorizes you to choose that - version for the Program.

-

Later license versions may give you additional or different permissions. - However, no additional obligations are imposed on any author or copyright - holder as a result of your choosing to follow a later version.

-

15. Disclaimer of Warranty.

-

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR - OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF - ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH - YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL - NECESSARY SERVICING, REPAIR OR CORRECTION.

-

16. Limitation of Liability.

-

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL - ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE - PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY - GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE - USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD - PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), - EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF - SUCH DAMAGES.

-

17. Interpretation of Sections 15 and 16.

-

If the disclaimer of warranty and limitation of liability provided above - cannot be given local legal effect according to their terms, reviewing - courts shall apply local law that most closely approximates an absolute - waiver of all civil liability in connection with the Program, unless a - warranty or assumption of liability accompanies a copy of the Program in - return for a fee.

-

END OF TERMS AND CONDITIONS

-

How to Apply These Terms to Your New Programs

-

If you develop a new program, and you want it to be of the greatest possible - use to the public, the best way to achieve this is to make it free software - which everyone can redistribute and change under these terms.

-

To do so, attach the following notices to the program. It is safest to - attach them to the start of each source file to most effectively state the - exclusion of warranty; and each file should have at least the - “copyright” line and a pointer to where the full notice is - found.

-
    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
+GNU GENERAL PUBLIC LICENSE
+==========================
+
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc.
+[https://fsf.org/](https://fsf.org/)
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+--------
+
+The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+The licenses for most software and other practical works are designed to take
+away your freedom to share and change the works. By contrast, the GNU General
+Public License is intended to guarantee your freedom to share and change all
+versions of a program--to make sure it remains free software for all its users.
+We, the Free Software Foundation, use the GNU General Public License for most of
+our software; it applies also to any other work released this way by its
+authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for them if you wish), that you
+receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs, and that you know you can do
+these things.
+
+To protect your rights, we need to prevent others from denying you these rights
+or asking you to surrender the rights. Therefore, you have certain
+responsibilities if you distribute copies of the software, or if you modify it:
+responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a
+fee, you must pass on to the recipients the same freedoms that you received. You
+must make sure that they, too, receive or can get the source code. And you must
+show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert
+copyright on the software, and (2) offer you this License giving you legal
+permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there
+is no warranty for this free software. For both users' and authors' sake, the
+GPL requires that modified versions be marked as changed, so that their problems
+will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so. This
+is fundamentally incompatible with the aim of protecting users' freedom to
+change the software. The systematic pattern of such abuse occurs in the area of
+products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on
+general-purpose computers, but in those that do, we wish to avoid the special
+danger that patents applied to a free program could make it effectively
+proprietary. To prevent this, the GPL assures that patents cannot be used to
+render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS
+--------------------
+
+### 0\. Definitions.
+
+"This License" refers to version 3 of the GNU General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works,
+such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License. Each
+licensee is addressed as "you". "Licensees" and "recipients" may be individuals
+or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in a
+fashion requiring copyright permission, other than the making of an exact copy.
+The resulting work is called a "modified version" of the earlier work or a work
+"based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the
+Program.
+
+To "propagate" a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as well.
+
+To "convey" a work means any kind of propagation that enables other parties to
+make or receive copies. Mere interaction with a user through a computer network,
+with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the extent
+that it includes a convenient and prominently visible feature that (1) displays
+an appropriate copyright notice, and (2) tells the user that there is no
+warranty for the work (except to the extent that warranties are provided), that
+licensees may convey the work under this License, and how to view a copy of this
+License. If the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+### 1\. Source Code.
+
+The "source code" for a work means the preferred form of the work for making
+modifications to it. "Object code" means any non-source form of a work.
+
+A "Standard Interface" means an interface that either is an official standard
+defined by a recognized standards body, or, in the case of interfaces specified
+for a particular programming language, one that is widely used among developers
+working in that language.
+
+The "System Libraries" of an executable work include anything, other than the
+work as a whole, that (a) is included in the normal form of packaging a Major
+Component, but which is not part of that Major Component, and (b) serves only to
+enable use of the work with that Major Component, or to implement a Standard
+Interface for which an implementation is available to the public in source code
+form. A "Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system (if any) on
+which the executable work runs, or a compiler used to produce the work, or an
+object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source
+code needed to generate, install, and (for an executable work) run the object
+code and to modify the work, including scripts to control those activities.
+However, it does not include the work's System Libraries, or general-purpose
+tools or generally available free programs which are used unmodified in
+performing those activities but which are not part of the work. For example,
+Corresponding Source includes interface definition files associated with source
+files for the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require, such as by
+intimate data communication or control flow between those subprograms and other
+parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+### 2\. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright on
+the Program, and are irrevocable provided the stated conditions are met. This
+License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License only
+if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by
+copyright law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey
+covered works to others for the sole purpose of having them make modifications
+exclusively for you, or provide you with facilities for running those works,
+provided that you comply with the terms of this License in conveying all
+material for which you do not control copyright. Those thus making or running
+the covered works for you must do so exclusively on your behalf, under your
+direction and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions
+stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+### 3\. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure under
+any applicable law fulfilling obligations under article 11 of the WIPO copyright
+treaty adopted on 20 December 1996, or similar laws prohibiting or restricting
+circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention is
+effected by exercising rights under this License with respect to the covered
+work, and you disclaim any intention to limit operation or modification of the
+work as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+### 4\. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you receive it,
+in any medium, provided that you conspicuously and appropriately publish on each
+copy an appropriate copyright notice; keep intact all notices stating that this
+License and any non-permissive terms added in accord with section 7 apply to the
+code; keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may
+offer support or warranty protection for a fee.
+
+### 5\. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce it
+from the Program, in the form of source code under the terms of section 4,
+provided that you also meet all of these conditions:
+
+* a) The work must carry prominent notices stating that you modified it, and
+  giving a relevant date.
+* b) The work must carry prominent notices stating that it is released under
+  this License and any conditions added under section 7. This requirement
+  modifies the requirement in section 4 to "keep intact all notices".
+* c) You must license the entire work, as a whole, under this License to anyone
+  who comes into possession of a copy. This License will therefore apply, along
+  with any applicable section 7 additional terms, to the whole of the work, and
+  all its parts, regardless of how they are packaged. This License gives no
+  permission to license the work in any other way, but it does not invalidate
+  such permission if you have separately received it.
+* d) If the work has interactive user interfaces, each must display Appropriate
+  Legal Notices; however, if the Program has interactive interfaces that do not
+  display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which
+are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an "aggregate" if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+### 6\. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections 4
+and 5, provided that you also convey the machine-readable Corresponding Source
+under the terms of this License, in one of these ways:
+
+* a) Convey the object code in, or embodied in, a physical product (including a
+  physical distribution medium), accompanied by the Corresponding Source fixed
+  on a durable physical medium customarily used for software interchange.
+* b) Convey the object code in, or embodied in, a physical product (including a
+  physical distribution medium), accompanied by a written offer, valid for at
+  least three years and valid for as long as you offer spare parts or customer
+  support for that product model, to give anyone who possesses the object code
+  either (1) a copy of the Corresponding Source for all the software in the
+  product that is covered by this License, on a durable physical medium
+  customarily used for software interchange, for a price no more than your
+  reasonable cost of physically performing this conveying of source, or (2)
+  access to copy the Corresponding Source from a network server at no charge.
+* c) Convey individual copies of the object code with a copy of the written
+  offer to provide the Corresponding Source. This alternative is allowed only
+  occasionally and noncommercially, and only if you received the object code
+  with such an offer, in accord with subsection 6b.
+* d) Convey the object code by offering access from a designated place (gratis
+  or for a charge), and offer equivalent access to the Corresponding Source in
+  the same way through the same place at no further charge. You need not require
+  recipients to copy the Corresponding Source along with the object code. If the
+  place to copy the object code is a network server, the Corresponding Source
+  may be on a different server (operated by you or a third party) that supports
+  equivalent copying facilities, provided you maintain clear directions next to
+  the object code saying where to find the Corresponding Source. Regardless of
+  what server hosts the Corresponding Source, you remain obligated to ensure
+  that it is available for as long as needed to satisfy these requirements.
+* e) Convey the object code using peer-to-peer transmission, provided you inform
+  other peers where the object code and Corresponding Source of the work are
+  being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the
+Corresponding Source as a System Library, need not be included in conveying the
+object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible
+personal property which is normally used for personal, family, or household
+purposes, or (2) anything designed or sold for incorporation into a dwelling. In
+determining whether a product is a consumer product, doubtful cases shall be
+resolved in favor of coverage. For a particular product received by a particular
+user, "normally used" refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way in which
+the particular user actually uses, or expects or is expected to use, the
+product. A product is a consumer product regardless of whether the product has
+substantial commercial, industrial or non-consumer uses, unless such uses
+represent the only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute
+modified versions of a covered work in that User Product from a modified version
+of its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented or
+interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as part of a
+transaction in which the right of possession and use of the User Product is
+transferred to the recipient in perpetuity or for a fixed term (regardless of
+how the transaction is characterized), the Corresponding Source conveyed under
+this section must be accompanied by the Installation Information. But this
+requirement does not apply if neither you nor any third party retains the
+ability to install modified object code on the User Product (for example, the
+work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates for a
+work that has been modified or installed by the recipient, or for the User
+Product in which it has been modified or installed. Access to a network may be
+denied when the modification itself materially and adversely affects the
+operation of the network or violates the rules and protocols for communication
+across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord
+with this section must be in a format that is publicly documented (and with an
+implementation available to the public in source code form), and must require no
+special password or key for unpacking, reading or copying.
+
+### 7\. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this License by
+making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they were
+included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part may
+be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added by
+you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+Notwithstanding any other provision of this License, for material you add to a
+covered work, you may (if authorized by the copyright holders of that material)
+supplement the terms of this License with terms:
+
+* a) Disclaiming warranty or limiting liability differently from the terms of
+  sections 15 and 16 of this License; or
+* b) Requiring preservation of specified reasonable legal notices or author
+  attributions in that material or in the Appropriate Legal Notices displayed by
+  works containing it; or
+* c) Prohibiting misrepresentation of the origin of that material, or requiring
+  that modified versions of such material be marked in reasonable ways as
+  different from the original version; or
+* d) Limiting the use for publicity purposes of names of licensors or authors of
+  the material; or
+* e) Declining to grant rights under trademark law for use of some trade names,
+  trademarks, or service marks; or
+* f) Requiring indemnification of licensors and authors of that material by
+  anyone who conveys the material (or modified versions of it) with contractual
+  assumptions of liability to the recipient, for any liability that these
+  contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further restrictions"
+within the meaning of section 10. If the Program as you received it, or any part
+of it, contains a notice stating that it is governed by this License along with
+a term that is a further restriction, you may remove that term. If a license
+document contains a further restriction but permits relicensing or conveying
+under this License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does not survive
+such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place,
+in the relevant source files, a statement of the additional terms that apply to
+those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a
+separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+### 8\. Termination.
+
+You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void, and
+will automatically terminate your rights under this License (including any
+patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a
+particular copyright holder is reinstated (a) provisionally, unless and until
+the copyright holder explicitly and finally terminates your license, and (b)
+permanently, if the copyright holder fails to notify you of the violation by
+some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated
+permanently if the copyright holder notifies you of the violation by some
+reasonable means, this is the first time you have received notice of violation
+of this License (for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of
+parties who have received copies or rights from you under this License. If your
+rights have been terminated and not permanently reinstated, you do not qualify
+to receive new licenses for the same material under section 10.
+
+### 9\. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy of
+the Program. Ancillary propagation of a covered work occurring solely as a
+consequence of using peer-to-peer transmission to receive a copy likewise does
+not require acceptance. However, nothing other than this License grants you
+permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or
+propagating a covered work, you indicate your acceptance of this License to do
+so.
+
+### 10\. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives a
+license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance by
+third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered work results
+from an entity transaction, each party to that transaction who receives a copy
+of the work also receives whatever licenses to the work the party's predecessor
+in interest had or could give under the previous paragraph, plus a right to
+possession of the Corresponding Source of the work from the predecessor in
+interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under this
+License, and you may not initiate litigation (including a cross-claim or
+counterclaim in a lawsuit) alleging that any patent claim is infringed by
+making, using, selling, offering for sale, or importing the Program or any
+portion of it.
+
+### 11\. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this License of
+the Program or a work on which the Program is based. The work thus licensed is
+called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned or
+controlled by the contributor, whether already acquired or hereafter acquired,
+that would be infringed by some manner, permitted by this License, of making,
+using, or selling its contributor version, but do not include claims that would
+be infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents of
+its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement
+or commitment, however denominated, not to enforce a patent (such as an express
+permission to practice a patent or covenant not to sue for patent infringement).
+To "grant" such a patent license to a party means to make such an agreement or
+commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of
+charge and under the terms of this License, through a publicly available network
+server or other readily accessible means, then you must either (1) cause the
+Corresponding Source to be so available, or (2) arrange to deprive yourself of
+the benefit of the patent license for this particular work, or (3) arrange, in a
+manner consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have actual
+knowledge that, but for the patent license, your conveying the covered work in a
+country, or your recipient's use of the covered work in a country, would
+infringe one or more identifiable patents in that country that you have reason
+to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you
+convey, or propagate by procuring conveyance of, a covered work, and grant a
+patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients of
+the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope of
+its coverage, prohibits the exercise of, or is conditioned on the non-exercise
+of one or more of the rights that are specifically granted under this License.
+You may not convey a covered work if you are a party to an arrangement with a
+third party that is in the business of distributing software, under which you
+make payment to the third party based on the extent of your activity of
+conveying the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by you (or
+copies made from those copies), or (b) primarily for and in connection with
+specific products or compilations that contain the covered work, unless you
+entered into that arrangement, or that patent license was granted, prior to 28
+March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied
+license or other defenses to infringement that may otherwise be available to you
+under applicable patent law.
+
+### 12\. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not excuse
+you from the conditions of this License. If you cannot convey a covered work so
+as to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all. For
+example, if you agree to terms that obligate you to collect a royalty for
+further conveying from those to whom you convey the Program, the only way you
+could satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+### 13\. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have permission to link
+or combine any covered work with a work licensed under version 3 of the GNU
+Affero General Public License into a single combined work, and to convey the
+resulting work. The terms of this License will continue to apply to the part
+which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+### 14\. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the GNU
+General Public License from time to time. Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+that a certain numbered version of the GNU General Public License "or any later
+version" applies to it, you have the option of following the terms and
+conditions either of that numbered version or of any later version published by
+the Free Software Foundation. If the Program does not specify a version number
+of the GNU General Public License, you may choose any version ever published by
+the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the
+GNU General Public License can be used, that proxy's public statement of
+acceptance of a version permanently authorizes you to choose that version for
+the Program.
+
+Later license versions may give you additional or different permissions.
+However, no additional obligations are imposed on any author or copyright holder
+as a result of your choosing to follow a later version.
+
+### 15\. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+### 16\. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
+PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY
+HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+### 17\. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot
+be given local legal effect according to their terms, reviewing courts shall
+apply local law that most closely approximates an absolute waiver of all civil
+liability in connection with the Program, unless a warranty or assumption of
+liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+---------------------------------------------
+
+If you develop a new program, and you want it to be of the greatest possible use
+to the public, the best way to achieve this is to make it free software which
+everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively state the exclusion of
+warranty; and each file should have at least the "copyright" line and a pointer
+to where the full notice is found.
+
+```
+    
+    Copyright (C)   
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -534,30 +588,33 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-

Also add information on how to contact you by electronic and paper mail.

-

If the program does terminal interaction, make it output a short notice like - this when it starts in an interactive mode:

-
    <program>  Copyright (C) <year>  <name of author>
+    along with this program.  If not, see .
+```
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like
+this when it starts in an interactive mode:
+
+```
+      Copyright (C)   
     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
-
-

The hypothetical commands `show w' and `show c' should show the appropriate - parts of the General Public License. Of course, your program's commands - might be different; for a GUI interface, you would use an “about - box”.

-

You should also get your employer (if you work as a programmer) or school, - if any, to sign a “copyright disclaimer” for the program, if - necessary. For more information on this, and how to apply and follow the - GNU GPL, see <https://www.gnu.org/licenses/>. -

-

The GNU General Public License does not permit incorporating your program - into proprietary programs. If your program is a subroutine library, you may - consider it more useful to permit linking proprietary applications with the - library. If this is what you want to do, use the GNU Lesser General Public - License instead of this License. But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>. -

+``` + +The hypothetical commands \`show w' and \`show c' should show the appropriate +parts of the General Public License. Of course, your program's commands might be +different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, if +any, to sign a "copyright disclaimer" for the program, if necessary. For more +information on this, and how to apply and follow the GNU GPL, see +[https://www.gnu.org/licenses/](https://www.gnu.org/licenses/). + +The GNU General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may consider +it more useful to permit linking proprietary applications with the library. If +this is what you want to do, use the GNU Lesser General Public License instead +of this License. But first, please read +[https://www.gnu.org/licenses/why-not-lgpl.html](https://www.gnu.org/licenses/why-not-lgpl.html). diff --git a/README.md b/README.md index 5f254b2d..45362c10 100644 --- a/README.md +++ b/README.md @@ -319,7 +319,8 @@ Contributions to the code are welcome and encouraged! License ------- -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. diff --git a/bt b/bt index 0a3e0986..fc793917 100755 --- a/bt +++ b/bt @@ -1,5 +1,6 @@ #!/usr/bin/env bash -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -15,7 +16,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # `bt` -- Shortcut to run the CodeChat Editor build tool # ====================================================== diff --git a/bt.ps1 b/bt.ps1 index cae8b1df..d1da188d 100644 --- a/bt.ps1 +++ b/bt.ps1 @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # `bt.ps1` -- Shortcut to run the CodeChat Editor build tool # ========================================================== diff --git a/builder/.gitignore b/builder/.gitignore index b1c67906..b63fc6f9 100644 --- a/builder/.gitignore +++ b/builder/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/builder/Cargo.lock b/builder/Cargo.lock index 035858c0..2a60e7a2 100644 --- a/builder/Cargo.lock +++ b/builder/Cargo.lock @@ -301,9 +301,9 @@ checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "log" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" [[package]] name = "memchr" diff --git a/builder/Cargo.toml b/builder/Cargo.toml index 72798750..51071137 100644 --- a/builder/Cargo.toml +++ b/builder/Cargo.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `Cargo.toml` -- Rust build/package management config for the builder # ==================================================================== diff --git a/builder/src/main.rs b/builder/src/main.rs index 6d45c646..f0f6f1a6 100644 --- a/builder/src/main.rs +++ b/builder/src/main.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/.gitignore b/client/.gitignore index d6e8c2ce..fc752a52 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/client/.prettierignore b/client/.prettierignore index b1667072..58409a35 100644 --- a/client/.prettierignore +++ b/client/.prettierignore @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/.prettierrc.json5 b/client/.prettierrc.json5 index 627d53c7..bdc3c4a8 100644 --- a/client/.prettierrc.json5 +++ b/client/.prettierrc.json5 @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/eslint.config.js b/client/eslint.config.js index c9ca0406..7ed32aab 100644 --- a/client/eslint.config.js +++ b/client/eslint.config.js @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. // @@ -14,7 +15,7 @@ // // You should have received a copy of the GNU General Public License along with // the CodeChat Editor. If not, see -// [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). // // `.eslintrc.yml` -- Configure ESLint for this project // ==================================================== diff --git a/client/package.json5 b/client/package.json5 index 91ac6f99..97bc3b7c 100644 --- a/client/package.json5 +++ b/client/package.json5 @@ -1,7 +1,5 @@ -/* `package.json5` - JavaScript manifest - ===================================== - - Copyright (C) 2026 Bryan A. Jones. +/* The CodeChat Editor, a word processor for software developers.
Copyright + (C) 2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -19,11 +17,12 @@ License along with the CodeChat Editor. If not, see [https://www.gnu.org/licenses/](https://www.gnu.org/licenses/). - Notes - ----- + `package.json5` - JavaScript manifest + ===================================== - Use only block comments in this file. Multiple single-line comments get oddly - munged by `pnpm` per [this issue](https://github.com/pnpm/pnpm/issues/9838). */ + Note: use only block comments in this file. Multiple single-line comments get + oddly munged by `pnpm` per + [this issue](https://github.com/pnpm/pnpm/issues/9838). */ { author: 'Bryan A. Jones', categories: [ @@ -62,13 +61,13 @@ '@codemirror/lint': '^6.9.7', '@codemirror/state': '^6.7.6', '@codemirror/view': '^6.43.15', - '@hpcc-js/wasm-graphviz': '^1.29.2', + '@hpcc-js/wasm-graphviz': '^1.30.0', '@mathjax/mathjax-newcm-font': '^4.1.3', codemirror: '^6.0.2', mathjax: '^4.1.3', mermaid: '^12.2.0', 'pdfjs-dist': '^6.4.299', - tinymce: '^8.10.0', + tinymce: '^8.10.1', 'toastify-js': '^1.12.0', }, devDependencies: { @@ -76,10 +75,10 @@ '@eslint/js': '^10.0.1', '@types/chai': '^5.2.3', '@types/mocha': '^10.0.10', - '@types/node': '^26.6.5', + '@types/node': '^26.6.6', '@types/toastify-js': '^1.12.4', - '@typescript-eslint/eslint-plugin': '^8.72.0', - '@typescript-eslint/parser': '^8.72.0', + '@typescript-eslint/eslint-plugin': '^8.72.1', + '@typescript-eslint/parser': '^8.72.1', '@typescript/native': 'npm:typescript@^7.0.2', /* The accessibility audit engine driven by the Server's `overall_a11y` browser tests. */ @@ -100,7 +99,7 @@ [Running Typescript 7.0 Side-by-Side with TypeScript 6.0](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0) for a workaround. */ typescript: 'npm:@typescript/typescript6@^6.0.2', - 'typescript-eslint': '^8.72.0', + 'typescript-eslint': '^8.72.1', }, scripts: { test: 'echo "Error: no test specified" && exit 1', diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index d85237ed..b64d2b8b 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -60,8 +60,8 @@ importers: specifier: ^6.43.15 version: 6.43.15 '@hpcc-js/wasm-graphviz': - specifier: ^1.29.2 - version: 1.29.2 + specifier: ^1.30.0 + version: 1.30.0 '@mathjax/mathjax-newcm-font': specifier: ^4.1.3 version: 4.1.3 @@ -78,8 +78,8 @@ importers: specifier: ^6.4.299 version: 6.4.299 tinymce: - specifier: ^8.10.0 - version: 8.10.0 + specifier: ^8.10.1 + version: 8.10.1 toastify-js: specifier: ^1.12.0 version: 1.12.0 @@ -97,17 +97,17 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^26.6.5 - version: 26.6.5 + specifier: ^26.6.6 + version: 26.6.6 '@types/toastify-js': specifier: ^1.12.4 version: 1.12.4 '@typescript-eslint/eslint-plugin': - specifier: ^8.72.0 - version: 8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + specifier: ^8.72.1 + version: 8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript-eslint/parser': - specifier: ^8.72.0 - version: 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + specifier: ^8.72.1 + version: 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript/native': specifier: npm:typescript@^7.0.2 version: typescript@7.0.2 @@ -128,7 +128,7 @@ importers: version: 10.1.8(eslint@10.13.0(supports-color@8.1.1)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + version: 2.32.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) eslint-plugin-prettier: specifier: ^5.5.7 version: 5.5.7(eslint-config-prettier@10.1.8(eslint@10.13.0(supports-color@8.1.1)))(eslint@10.13.0(supports-color@8.1.1))(prettier@3.9.10) @@ -148,8 +148,8 @@ importers: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' typescript-eslint: - specifier: ^8.72.0 - version: 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + specifier: ^8.72.1 + version: 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) packages: @@ -446,8 +446,8 @@ packages: resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@hpcc-js/wasm-graphviz@1.29.2': - resolution: {integrity: sha512-AkArBAZERT5OxH52/+kvCHB07cZ6ZNd9GnOvjw+S880bR88D6i27XfK6xj4dBhUDxNA2QPPMdgEcky3x4TJ3KA==} + '@hpcc-js/wasm-graphviz@1.30.0': + resolution: {integrity: sha512-T20IKosOZuex2qV049fQokVJy2MWv8w9Md5V/4mRKCXDf49fBCR50VD1yBlPYHaQlHPsFGRdqXN//r59vZliWQ==} '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -484,8 +484,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@lezer/common@1.5.3': - resolution: {integrity: sha512-H0iErY4e43LpXbYDyBci5W4v/RwTgGV3YzYOlJPiGZ8RY8w51kVE+xLn1tg3Z6UmSfyETvtsUK3r7YsgDQEI7Q==} + '@lezer/common@1.5.4': + resolution: {integrity: sha512-xt3Q4z64xM+xhg4M7NXqw1N//1O74bUFo5kz6fwMeC4qwxSuRdwkYSmjcqCEEKYkNw5e67f2hcNqBoNERAEU0w==} '@lezer/cpp@1.1.6': resolution: {integrity: sha512-vh9gWWJOXFVY8HBHK3Twzq8MgwG2iN4GSyzBP9sCGTe37P15x2R14VaBQk0VA0ezTRN1KHYBBsHhvpGZ2Xy/pA==} @@ -533,79 +533,79 @@ packages: resolution: {integrity: sha512-j37dj/h6p6pots1L7pLPPNuABEEu9WP4OYg9pW1g+nYG331j0+3canE9OagtYdytYvdSAMG+2fKU5cxep6LgjA==} engines: {node: '>=22.12.0'} - '@napi-rs/canvas-android-arm64@1.0.12': - resolution: {integrity: sha512-Z8hg9BD7ABaZNhdM8O96IrfBaYLM7KzO/YyKA8eU9BDdc5fZJRTWyOhSAyOv59/ari6bOYa+p96h7zN6wbJRDA==} + '@napi-rs/canvas-android-arm64@1.1.0': + resolution: {integrity: sha512-mKrSmRyhWK4q699Q1xthbZIZi7JBvLtsRNnOZAeFaLPOFT1yo8y82aRC2nNZbXTGJXU7fVDONgGQPr0vo3kerw==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/canvas-darwin-arm64@1.0.12': - resolution: {integrity: sha512-dRtZCi/u1IOZyRjEDCA73PqgWakf5689K2jfv4uPRYGMJvEqtV+Eq7MIQkBJLmdfUPe7AktSiBZRml2pggnjRQ==} + '@napi-rs/canvas-darwin-arm64@1.1.0': + resolution: {integrity: sha512-iqwST4g0oH+x8VCpBIYh+MYokv/mVvkM+v9oJGB0d9A3P2qBh42ogJlVyWq9SpPCrAjS7tplMb1D3OIfxl+utw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-x64@1.0.12': - resolution: {integrity: sha512-YwvMgK5NBXwPY1AjZGXfPCG3hp/OFGM0Kw+JZHCOR/FYaeSOftaZRyxaDEGkJQSLEUZZIMNJXKCWgZYSzgWZEA==} + '@napi-rs/canvas-darwin-x64@1.1.0': + resolution: {integrity: sha512-jkeA8eVTxDum03LTvc32YJ28F6KB1U0gYwnWMfOAUQZvWWEh/kvONby4iWGJx3+Tw45UqMGMXjtw2GKNVZDhVg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/canvas-linux-arm-gnueabihf@1.0.12': - resolution: {integrity: sha512-LlOsZy8qh+qJq1euEvDZqa9muACS1fL1Ag38c7J+axAnA8NeXazMtqmUyKb4NVyft6DqbU/MesEj3C0bAFnv4Q==} + '@napi-rs/canvas-linux-arm-gnueabihf@1.1.0': + resolution: {integrity: sha512-Y4YkKG1ijoqkgUdTEEBNG4k+2BK5bR5jGL6S56YxCXYPwGfUd5nED8/74xyc7z+bpixPasCjSYoP3xYPOIGNxw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@1.0.12': - resolution: {integrity: sha512-nvuqhi85GzaFl/6sid4qf7wwjHuGU6gfIuDyywUb/fB+kp6Fp3h8GyIAKss/QPil3zVO2r8g6O9ah+IOUoBrIw==} + '@napi-rs/canvas-linux-arm64-gnu@1.1.0': + resolution: {integrity: sha512-dE/XthqYkiWcBVtKFlZbUXwAYfDuQGqDWixznipJNmevLGpprNnTVQZyftm1RZJudkIOn2EkzYZDMMETM08Row==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-arm64-musl@1.0.12': - resolution: {integrity: sha512-Bf6+9PoEr9K06P/oyMab7zZOpW90KimbIuNsy/vL0VhZZKsb0B0rCC78cp0jXhK6PIM7v8t6uX1sn7isOZ8KEw==} + '@napi-rs/canvas-linux-arm64-musl@1.1.0': + resolution: {integrity: sha512-DqZ/CMcHlhU56pPjv9AP0h3U7MFQ5LzC1HzMyRMotL+PFsJmZJA/ziApPYVyyz78DaVLhI8t3So3ztqtijbYpg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@napi-rs/canvas-linux-riscv64-gnu@1.0.12': - resolution: {integrity: sha512-j7VcZduLSRx60nv/wbdyH+fyB5QriWGuO8GrvMDlFlt7GNUKAw5lHAHpcuuQW3QwLOe+3P+3qryzyT3sW5pCqQ==} + '@napi-rs/canvas-linux-riscv64-gnu@1.1.0': + resolution: {integrity: sha512-kJ7m5n2VffxWXM5QGa5lfq8ZN4LdOJEoz3aAJAmIqYvKiZw1gRdXqpucnRXsF6D9nLYiiIlevaAtAclR7c5ilg==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-x64-gnu@1.0.12': - resolution: {integrity: sha512-twDb8ZNgoCF8EG6ka+Lk4etU+ea9lv6NiV5ptIf+thz3LgWuHBbt85c+YgL1s05VsHe4WYWK0f+GhR45IuqARg==} + '@napi-rs/canvas-linux-x64-gnu@1.1.0': + resolution: {integrity: sha512-uQ9JuJlRhQdHyttcMWOiwLkfIqkqaB0YFUVe835LUe12THt2b51HXkTItq0fxWT1jdhUPX2ylWZ1walkJyD6GQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-x64-musl@1.0.12': - resolution: {integrity: sha512-mtZbBeNCdGA0MYQxivPmMOp5JMH80LaJLQeEMg7Nne517fvgGb+DWTJTmoE/qUW8YJ4nkiP2vQyr1XVGrH/Ktg==} + '@napi-rs/canvas-linux-x64-musl@1.1.0': + resolution: {integrity: sha512-has4CPPAkkCac/LZ13VAw5p+MJLdaKVoyrhumN/A7uJd6960xYkJNDZgUebyxiha82AFzXx6RV+QJg5qGG079g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@napi-rs/canvas-win32-arm64-msvc@1.0.12': - resolution: {integrity: sha512-HgGRuBUkFL8U99ogwUnTz3SmwUu7WKjmj0eOVWRqVZTPPyfWGEIMr+ycb8oDoNZcKM9vSiF1rpy3r+UIqqaKqw==} + '@napi-rs/canvas-win32-arm64-msvc@1.1.0': + resolution: {integrity: sha512-MJnktLKNijmXqdjTughHDZ9TDLZ9uUm2hvFXqaOqn0+w7lphXFnft6bpSgQAc9U1exc20UGIBlzGu9+kiCj9Ag==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@napi-rs/canvas-win32-x64-msvc@1.0.12': - resolution: {integrity: sha512-SEEfblIAnYeS4UkeFPp9jw6ZWuHxaTqumUuksMgnMXmPLW8Ofb21uu7cujhw+lk4E9V3aWgGAE9f8g+CdoAU0Q==} + '@napi-rs/canvas-win32-x64-msvc@1.1.0': + resolution: {integrity: sha512-08575bFk7iiadxap4h+JxgGut9xDCHAGum6wh0eInN53zEMImkmEHi5MushX2FOmNO7qRNX7BPiDC5ZYBwHeEg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/canvas@1.0.12': - resolution: {integrity: sha512-PSwhRdvizfuiSDlhE4Ld2jl/JqkrbSFFyZO0ycamE6mBpf1H0uUF3Tm8yQaVDeAwCNNDzxjRfrN22KmWLTDwcw==} + '@napi-rs/canvas@1.1.0': + resolution: {integrity: sha512-k+ph/D8H9GS8ZZ48okvHrKeJynkqAA1kMUZRuzRWNlQUDHXngq7oRaWMZBdmSfd9ZhVy9bwNKei/7wMboI/uMg==} engines: {node: '>= 10'} '@pkgr/core@0.3.6': @@ -717,8 +717,8 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/estree@1.0.10': + resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} @@ -732,8 +732,8 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/node@26.6.5': - resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} '@types/toastify-js@1.12.4': resolution: {integrity: sha512-zfZHU4tKffPCnZRe7pjv/eFKzTVHozKewFCKaCjZ4gFinKgJRz/t0bkZiMCXJxPhv/ZoeDGNOeRD09R0kQZ/nw==} @@ -741,63 +741,63 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@8.72.0': - resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} + '@typescript-eslint/eslint-plugin@8.72.1': + resolution: {integrity: sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.72.0 + '@typescript-eslint/parser': ^8.72.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.72.0': - resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} + '@typescript-eslint/parser@8.72.1': + resolution: {integrity: sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.72.0': - resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} + '@typescript-eslint/project-service@8.72.1': + resolution: {integrity: sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.72.0': - resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} + '@typescript-eslint/scope-manager@8.72.1': + resolution: {integrity: sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.72.0': - resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} + '@typescript-eslint/tsconfig-utils@8.72.1': + resolution: {integrity: sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.72.0': - resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} + '@typescript-eslint/type-utils@8.72.1': + resolution: {integrity: sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.72.0': - resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} + '@typescript-eslint/types@8.72.1': + resolution: {integrity: sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.72.0': - resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} + '@typescript-eslint/typescript-estree@8.72.1': + resolution: {integrity: sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.72.0': - resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} + '@typescript-eslint/utils@8.72.1': + resolution: {integrity: sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.72.0': - resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} + '@typescript-eslint/visitor-keys@8.72.1': + resolution: {integrity: sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/typescript-aix-ppc64@7.0.2': @@ -940,8 +940,8 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - argparse@3.0.3: - resolution: {integrity: sha512-Sn98ftV3KfsO8xfLPHG6oT8y+b0yvbrLgZjgPDXsharNY15tTAjqIsIju4S32nl6/iEUNNE4v+yL2Zhm8ooP3w==} + argparse@3.0.4: + resolution: {integrity: sha512-fwWK3Zq22l4XJJjx5mcBHGikIk+hJqO+32dPm0Jur7+rtG5x1scOjSfdT9ZKeWHPpsya/l0HHK4tDImBkTrtvA==} array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} @@ -1306,8 +1306,8 @@ packages: resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} engines: {node: '>= 0.4'} - es-toolkit@1.52.0: - resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} + es-toolkit@1.53.0: + resolution: {integrity: sha512-3+AYXp9fmJ/UhHBMYj2/U+RaUouMD90SzoItyDOB2Za7W6dB7fQApFGnZPl2MF6K8/Tv1koh1JyirSx/kju6Pw==} esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} @@ -1550,8 +1550,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.13: - resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} + ignore@7.0.14: + resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} engines: {node: '>= 4'} import-meta-resolve@4.2.0: @@ -1941,8 +1941,8 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-javascript@7.1.2: - resolution: {integrity: sha512-GL2BWwVa6JydKO6l/ljVgjAZF4QJ3S7dWDWi53s5GZT8PJzD2fNxi67HANQGKAqPrwEpL5ba7gUBGi0Ls/sEoQ==} + serialize-javascript@7.1.4: + resolution: {integrity: sha512-FqlEuoTq/zRmA4Lg6aOqyH3lCHbUtCB0bmHCeFniX2GBdDqMJM3FwdvEhlE5Pim1dlt2FfBdVPmUNNiGhhKqpw==} engines: {node: '>=20.0.0'} set-function-length@1.2.2: @@ -2035,8 +2035,8 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinymce@8.10.0: - resolution: {integrity: sha512-/e+/B+VdbzO02hLzfr3EaoYKYdr3phC/yitG7I9vpi2NqYvtb04UxO/Ay4y9VPqDaQHyigdFnHv2zuTgF7mnZQ==} + tinymce@8.10.1: + resolution: {integrity: sha512-Mgdnx8HuEPRlLqKTyHcy7+JJn9reXH7b7L/1ywPCzKAyjaq8fzEPE+CYBLW42GgBlaaoIOd0dTOcYHUlPZyV2A==} toastify-js@1.12.0: resolution: {integrity: sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==} @@ -2074,8 +2074,8 @@ packages: resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} engines: {node: '>= 0.4'} - typescript-eslint@8.72.0: - resolution: {integrity: sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==} + typescript-eslint@8.72.1: + resolution: {integrity: sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -2181,14 +2181,14 @@ snapshots: '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 '@codemirror/view': 6.43.15 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@codemirror/commands@6.11.1': dependencies: '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 '@codemirror/view': 6.43.15 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@codemirror/lang-cpp@6.0.3': dependencies: @@ -2200,7 +2200,7 @@ snapshots: '@codemirror/autocomplete': 6.20.4 '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/css': 1.3.9 '@codemirror/lang-go@6.0.1': @@ -2208,7 +2208,7 @@ snapshots: '@codemirror/autocomplete': 6.20.4 '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/go': 1.0.1 '@codemirror/lang-html@6.4.12': @@ -2219,7 +2219,7 @@ snapshots: '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 '@codemirror/view': 6.43.15 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/css': 1.3.9 '@lezer/html': 1.3.13 @@ -2235,7 +2235,7 @@ snapshots: '@codemirror/lint': 6.9.7 '@codemirror/state': 6.7.6 '@codemirror/view': 6.43.15 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/javascript': 1.5.6 '@codemirror/lang-json@6.0.2': @@ -2248,7 +2248,7 @@ snapshots: '@codemirror/autocomplete': 6.20.4 '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/python': 1.1.19 '@codemirror/lang-rust@6.0.2': @@ -2261,7 +2261,7 @@ snapshots: '@codemirror/autocomplete': 6.20.4 '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 @@ -2270,7 +2270,7 @@ snapshots: '@codemirror/autocomplete': 6.20.4 '@codemirror/language': 6.13.1 '@codemirror/state': 6.7.6 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/yaml': 1.0.4 @@ -2280,7 +2280,7 @@ snapshots: '@codemirror/state': 6.7.6 '@codemirror/streamparser': 6.0.0 '@codemirror/view': 6.43.15 - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 style-mod: 4.1.4 @@ -2439,7 +2439,7 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@hpcc-js/wasm-graphviz@1.29.2': {} + '@hpcc-js/wasm-graphviz@1.30.0': {} '@humanfs/core@0.19.2': dependencies: @@ -2473,73 +2473,73 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@lezer/common@1.5.3': {} + '@lezer/common@1.5.4': {} '@lezer/cpp@1.1.6': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/css@1.3.9': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/go@1.0.1': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/highlight@1.2.5': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/html@1.3.13': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/java@1.1.5': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/javascript@1.5.6': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/json@1.0.3': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/lr@1.4.11': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/python@1.1.19': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/rust@1.0.3': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 '@lezer/yaml@1.0.4': dependencies: - '@lezer/common': 1.5.3 + '@lezer/common': 1.5.4 '@lezer/highlight': 1.2.5 '@lezer/lr': 1.4.11 @@ -2551,52 +2551,52 @@ snapshots: dependencies: '@chevrotain/types': 13.2.0 - '@napi-rs/canvas-android-arm64@1.0.12': + '@napi-rs/canvas-android-arm64@1.1.0': optional: true - '@napi-rs/canvas-darwin-arm64@1.0.12': + '@napi-rs/canvas-darwin-arm64@1.1.0': optional: true - '@napi-rs/canvas-darwin-x64@1.0.12': + '@napi-rs/canvas-darwin-x64@1.1.0': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@1.0.12': + '@napi-rs/canvas-linux-arm-gnueabihf@1.1.0': optional: true - '@napi-rs/canvas-linux-arm64-gnu@1.0.12': + '@napi-rs/canvas-linux-arm64-gnu@1.1.0': optional: true - '@napi-rs/canvas-linux-arm64-musl@1.0.12': + '@napi-rs/canvas-linux-arm64-musl@1.1.0': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@1.0.12': + '@napi-rs/canvas-linux-riscv64-gnu@1.1.0': optional: true - '@napi-rs/canvas-linux-x64-gnu@1.0.12': + '@napi-rs/canvas-linux-x64-gnu@1.1.0': optional: true - '@napi-rs/canvas-linux-x64-musl@1.0.12': + '@napi-rs/canvas-linux-x64-musl@1.1.0': optional: true - '@napi-rs/canvas-win32-arm64-msvc@1.0.12': + '@napi-rs/canvas-win32-arm64-msvc@1.1.0': optional: true - '@napi-rs/canvas-win32-x64-msvc@1.0.12': + '@napi-rs/canvas-win32-x64-msvc@1.1.0': optional: true - '@napi-rs/canvas@1.0.12': + '@napi-rs/canvas@1.1.0': optionalDependencies: - '@napi-rs/canvas-android-arm64': 1.0.12 - '@napi-rs/canvas-darwin-arm64': 1.0.12 - '@napi-rs/canvas-darwin-x64': 1.0.12 - '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.12 - '@napi-rs/canvas-linux-arm64-gnu': 1.0.12 - '@napi-rs/canvas-linux-arm64-musl': 1.0.12 - '@napi-rs/canvas-linux-riscv64-gnu': 1.0.12 - '@napi-rs/canvas-linux-x64-gnu': 1.0.12 - '@napi-rs/canvas-linux-x64-musl': 1.0.12 - '@napi-rs/canvas-win32-arm64-msvc': 1.0.12 - '@napi-rs/canvas-win32-x64-msvc': 1.0.12 + '@napi-rs/canvas-android-arm64': 1.1.0 + '@napi-rs/canvas-darwin-arm64': 1.1.0 + '@napi-rs/canvas-darwin-x64': 1.1.0 + '@napi-rs/canvas-linux-arm-gnueabihf': 1.1.0 + '@napi-rs/canvas-linux-arm64-gnu': 1.1.0 + '@napi-rs/canvas-linux-arm64-musl': 1.1.0 + '@napi-rs/canvas-linux-riscv64-gnu': 1.1.0 + '@napi-rs/canvas-linux-x64-gnu': 1.1.0 + '@napi-rs/canvas-linux-x64-musl': 1.1.0 + '@napi-rs/canvas-win32-arm64-msvc': 1.1.0 + '@napi-rs/canvas-win32-x64-msvc': 1.1.0 optional: true '@pkgr/core@0.3.6': {} @@ -2729,7 +2729,7 @@ snapshots: '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.9': {} + '@types/estree@1.0.10': {} '@types/geojson@7946.0.16': {} @@ -2739,7 +2739,7 @@ snapshots: '@types/mocha@10.0.10': {} - '@types/node@26.6.5': + '@types/node@26.6.6': dependencies: undici-types: 8.9.0 @@ -2748,57 +2748,57 @@ snapshots: '@types/trusted-types@2.0.7': optional: true - '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/eslint-plugin@8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/type-utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/type-utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/visitor-keys': 8.72.1 eslint: 10.13.0(supports-color@8.1.1) - ignore: 7.0.13 + ignore: 7.0.14 natural-compare: 1.4.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3(supports-color@8.1.1) eslint: 10.13.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1)': + '@typescript-eslint/project-service@8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/tsconfig-utils': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.1 debug: 4.4.3(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.72.0': + '@typescript-eslint/scope-manager@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 - '@typescript-eslint/tsconfig-utils@8.72.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.72.1(@typescript/typescript6@6.0.2)': dependencies: typescript: '@typescript/typescript6@6.0.2' - '@typescript-eslint/type-utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/type-utils@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) eslint: 10.13.0(supports-color@8.1.1) ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) @@ -2806,14 +2806,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.72.0': {} + '@typescript-eslint/types@8.72.1': {} - '@typescript-eslint/typescript-estree@8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1)': + '@typescript-eslint/typescript-estree@8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1)': dependencies: - '@typescript-eslint/project-service': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/project-service': 8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/tsconfig-utils': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 @@ -2823,20 +2823,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/utils@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(supports-color@8.1.1)) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1) eslint: 10.13.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.72.0': + '@typescript-eslint/visitor-keys@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/types': 8.72.1 eslint-visitor-keys: 5.0.1 '@typescript/typescript-aix-ppc64@7.0.2': @@ -2921,7 +2921,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - argparse@3.0.3: {} + argparse@3.0.4: {} array-buffer-byte-length@1.0.2: dependencies: @@ -3413,7 +3413,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.52.0: {} + es-toolkit@1.53.0: {} esbuild@0.28.2: optionalDependencies: @@ -3458,17 +3458,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) eslint: 10.13.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.2.0 @@ -3479,7 +3479,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.13.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) hasown: 2.0.4 is-core-module: 2.17.0 is-glob: 4.0.3 @@ -3491,7 +3491,7 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3509,7 +3509,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -3528,7 +3528,7 @@ snapshots: '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) @@ -3704,7 +3704,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.13: {} + ignore@7.0.14: {} import-meta-resolve@4.2.0: {} @@ -3840,7 +3840,7 @@ snapshots: js-yaml@5.5.0: dependencies: - argparse: 3.0.3 + argparse: 3.0.4 json-schema-traverse@0.4.1: {} @@ -3904,7 +3904,7 @@ snapshots: dayjs: 1.11.23 dompurify: 3.4.17 elkjs: 0.9.3 - es-toolkit: 1.52.0 + es-toolkit: 1.53.0 katex: 0.18.10 khroma: 2.1.0 marked: 16.4.2 @@ -3939,7 +3939,7 @@ snapshots: minimatch: 10.2.6 ms: 2.1.3 picocolors: 1.1.1 - serialize-javascript: 7.1.2 + serialize-javascript: 7.1.4 strip-json-comments: 5.0.3 supports-color: 8.1.1 workerpool: 10.0.3 @@ -4038,7 +4038,7 @@ snapshots: pdfjs-dist@6.4.299: optionalDependencies: - '@napi-rs/canvas': 1.0.12 + '@napi-rs/canvas': 1.1.0 picocolors@1.1.1: {} @@ -4134,7 +4134,7 @@ snapshots: semver@7.8.5: {} - serialize-javascript@7.1.2: {} + serialize-javascript@7.1.4: {} set-function-length@1.2.2: dependencies: @@ -4249,7 +4249,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 - tinymce@8.10.0: {} + tinymce@8.10.1: {} toastify-js@1.12.0: {} @@ -4302,12 +4302,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): + typescript-eslint@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/eslint-plugin': 8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0(supports-color@8.1.1))(supports-color@8.1.1) eslint: 10.13.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: diff --git a/client/readme.md b/client/readme.md index 8c928fd1..8dad7030 100644 --- a/client/readme.md +++ b/client/readme.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + `readme.md` - overview of the Client ==================================== diff --git a/client/src/.gitignore b/client/src/.gitignore index 20b5874b..2ecb5b01 100644 --- a/client/src/.gitignore +++ b/client/src/.gitignore @@ -1,3 +1,22 @@ +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. +# +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# # `.gitignore` -- files for Git to ignore # ======================================= rust-types/ diff --git a/client/src/CodeChatEditor-test.mts b/client/src/CodeChatEditor-test.mts index 05312fc1..f8d4e597 100644 --- a/client/src/CodeChatEditor-test.mts +++ b/client/src/CodeChatEditor-test.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/CodeChatEditor.mts b/client/src/CodeChatEditor.mts index 6eb80839..aa25cdf7 100644 --- a/client/src/CodeChatEditor.mts +++ b/client/src/CodeChatEditor.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/CodeChatEditorFramework.mts b/client/src/CodeChatEditorFramework.mts index 699d5f9f..040bd09f 100644 --- a/client/src/CodeChatEditorFramework.mts +++ b/client/src/CodeChatEditorFramework.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/CodeMirror-integration.mts b/client/src/CodeMirror-integration.mts index 18d71a68..093579c4 100644 --- a/client/src/CodeMirror-integration.mts +++ b/client/src/CodeMirror-integration.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/HashReader.mts b/client/src/HashReader.mts index 6e712c80..a25a35a2 100644 --- a/client/src/HashReader.mts +++ b/client/src/HashReader.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/assert.mts b/client/src/assert.mts index 167121c5..8c016853 100644 --- a/client/src/assert.mts +++ b/client/src/assert.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/css/CodeChatEditor.css b/client/src/css/CodeChatEditor.css index 2042d1d7..839e27f6 100644 --- a/client/src/css/CodeChatEditor.css +++ b/client/src/css/CodeChatEditor.css @@ -1,4 +1,5 @@ -/* Copyright (C) 2026 Bryan A. Jones. +/* The CodeChat Editor, a word processor for software developers.
Copyright + (C) 2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see - [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). + [http://www.gnu.org/licenses](http://www.gnu.org/licenses). `CodeChatEditor.css` -- Styles for the CodeChat Editor ====================================================== @@ -43,15 +44,13 @@ content against the source it came from, and a theme which happened to style the elements it uses would break that alignment rather than restyle it. Nothing but that section belongs out here; anything a theme should be free to - restyle goes in - [CodeChatEditorBase.css](CodeChatEditorBase.css) instead. + restyle goes in [CodeChatEditorBase.css](CodeChatEditorBase.css) instead. Eventually, the theme will be a user-configurable setting. */ @import url("themes/light.css") layer(app); @import url("CodeChatEditorBase.css") layer(app); -/* Gathered fragment styling - --------------------------------------------------------- +/*

Gathered fragment styling

These rules are deliberately outside the layer the imports above go into; see [The cascade](cascade). @@ -62,8 +61,8 @@ [processing.rs](../../../server/src/processing.rs)). That rendering reproduces the layout of the source the fragment came from: each doc block carries the indent it had there, each line of a code block and the first line - of each doc block are preceded by that line's number, and equal indents in the - source line up: + of each doc block are preceded by that line's number, and equal indents in + the source line up: ``` \ \ \ @@ -88,12 +87,12 @@ blocks it means to set apart. * The gutter is a `.cc-line-number` on both sides -- the first child of `.cc-fragment-indent` on the doc side, and the start of each line on the - code side -- so a single rule gives the two the same width. That width comes - from `--cc-gutter-width`, measured in `ch`: a custom property is substituted - before it's computed, so that width is a character width of the font of - whichever element uses it -- the same font in both, per the constraint - above (a `.cc-line-number` inherits the font of the `.cc-fragment-indent` or - `.cc-fragment-code` containing it). */ + code side -- so a single rule gives the two the same width. That width + comes from `--cc-gutter-width`, measured in `ch`: a custom property is + substituted before it's computed, so that width is a character width of the + font of whichever element uses it -- the same font in both, per the + constraint above (a `.cc-line-number` inherits the font of the + `.cc-fragment-indent` or `.cc-fragment-code` containing it). */ :root { /* The width of the line number gutter: room for a three-digit line number plus the space separating it from what follows. */ @@ -137,8 +136,8 @@ /* The contents of that doc block, which the [rules in CodeChatEditorBase.css](CodeChatEditorBase.css#remove-space) trim - to the height of its text: a gathered doc block sits directly against the code - block above and below it, exactly as it does in the source. */ + to the height of its text: a gathered doc block sits directly against the + code block above and below it, exactly as it does in the source. */ .cc-fragment-doc-contents { flex-grow: 1; } @@ -161,9 +160,9 @@ } /* The line number which fills the gutter: one preceding each line of a code - block, and one preceding the indent of each doc block. Since this is generated - content rather than part of the source, it's excluded from what a selection - copies and dimmed to keep it from competing with the source itself. */ + block, and one preceding the indent of each doc block. Since this is + generated content rather than part of the source, it's excluded from what a + selection copies and dimmed to keep it from competing with the source itself. */ .cc-line-number { /* Right-align the number in the gutter, so that every line of code begins in the same column regardless of how many digits precede it. Use diff --git a/client/src/css/CodeChatEditorBase.css b/client/src/css/CodeChatEditorBase.css index 69d64bfb..d4285220 100644 --- a/client/src/css/CodeChatEditorBase.css +++ b/client/src/css/CodeChatEditorBase.css @@ -1,4 +1,5 @@ -/* Copyright (C) 2026 Bryan A. Jones. +/* The CodeChat Editor, a word processor for software developers.
Copyright + (C) 2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see - [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). + [http://www.gnu.org/licenses](http://www.gnu.org/licenses). `CodeChatEditorBase.css` -- Ordinary styles for the CodeChat Editor =================================================================== diff --git a/client/src/css/CodeChatEditorProject.css b/client/src/css/CodeChatEditorProject.css index 0e755eae..660fbe41 100644 --- a/client/src/css/CodeChatEditorProject.css +++ b/client/src/css/CodeChatEditorProject.css @@ -1,4 +1,5 @@ -/* Copyright (C) 2026 Bryan A. Jones. +/* The CodeChat Editor, a word processor for software developers.
Copyright + (C) 2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see - [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). + [http://www.gnu.org/licenses](http://www.gnu.org/licenses). `CodeChatEditorProject.css` -- Styles for the CodeChat Editor for projects ========================================================================== diff --git a/client/src/css/themes/light.css b/client/src/css/themes/light.css index d27586c6..95420bf5 100644 --- a/client/src/css/themes/light.css +++ b/client/src/css/themes/light.css @@ -1,4 +1,5 @@ -/* Copyright (C) 2026 Bryan A. Jones. +/* The CodeChat Editor, a word processor for software developers.
Copyright + (C) 2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see - [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). + [http://www.gnu.org/licenses](http://www.gnu.org/licenses). `light.css` -- Styles for the light theme ========================================= diff --git a/client/src/debug_enabled.mts b/client/src/debug_enabled.mts index c5f8076c..679705da 100644 --- a/client/src/debug_enabled.mts +++ b/client/src/debug_enabled.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/global.d.ts b/client/src/global.d.ts index 0e44974b..e41ec08d 100644 --- a/client/src/global.d.ts +++ b/client/src/global.d.ts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/graphviz-webcomponent-setup.mjs b/client/src/graphviz-webcomponent-setup.mjs index 279cc461..daf8e23f 100644 --- a/client/src/graphviz-webcomponent-setup.mjs +++ b/client/src/graphviz-webcomponent-setup.mjs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/shared.mts b/client/src/shared.mts index d48451cb..322cb4fa 100644 --- a/client/src/shared.mts +++ b/client/src/shared.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/show_toast.mts b/client/src/show_toast.mts index 2090afc4..fca15094 100644 --- a/client/src/show_toast.mts +++ b/client/src/show_toast.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/src/tinymce-config.mts b/client/src/tinymce-config.mts index 6bb9b82c..de71df9c 100644 --- a/client/src/tinymce-config.mts +++ b/client/src/tinymce-config.mts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/client/static/.gitignore b/client/static/.gitignore index ee8cad7d..cf7b1c51 100644 --- a/client/static/.gitignore +++ b/client/static/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/client/tsconfig.json b/client/tsconfig.json index 3e16209e..769990e3 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/dist-workspace.toml b/dist-workspace.toml index ed44ce90..b49064ec 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `dist-workspace.toml` - Configure # [cargo-dist](https://opensource.axo.dev/cargo-dist/) diff --git a/docs/Markdown_HTML.js b/docs/Markdown_HTML.js index 1d8502b6..ccfda941 100644 --- a/docs/Markdown_HTML.js +++ b/docs/Markdown_HTML.js @@ -1,3 +1,20 @@ +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. +// +// This file is part of the CodeChat Editor. The CodeChat Editor is free +// software: you can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, either +// version 3 of the License, or (at your option) any later version. +// +// The CodeChat Editor is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// the CodeChat Editor. If not, see +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +// //

HTML formatting tests

//

In this file, I will test as many markdown things as I can, to ensure that // the conversion between HTML and Markdown works correctly:

diff --git a/docs/accessibility_review.md b/docs/accessibility_review.md index 3fa442b3..d937ae84 100644 --- a/docs/accessibility_review.md +++ b/docs/accessibility_review.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. diff --git a/docs/capture-token-setup-guide.html b/docs/capture-token-setup-guide.html index 9ff28008..3e68e603 100644 --- a/docs/capture-token-setup-guide.html +++ b/docs/capture-token-setup-guide.html @@ -1,4 +1,23 @@ + diff --git a/docs/demo.md b/docs/demo.md index 019f6814..cf31cc9d 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + `demo.md` - A script for a video demonstration of the CodeChat Editor ================================================================================ diff --git a/docs/design.md b/docs/design.md index 10440d37..9cd2d31b 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -270,24 +271,3 @@ GUI must indicate that text enclosed by the tags isn't directly editable, instead providing an option to edit the underlying tag that produced the text. When a new tag is inserted, any tag-produced content should be immediately added. - -License -------- - -Copyright (C) 2026 Bryan A. Jones. - -This file is part of the CodeChat Editor. - -The CodeChat Editor is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) any -later version. - -The CodeChat Editor is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -details. - -You should have received a [copy](LICENSE.html) of the GNU General Public -License along with the CodeChat Editor. If not, see -[https://www.gnu.org/licenses/](https://www.gnu.org/licenses/). diff --git a/docs/implementation.md b/docs/implementation.md index 093ce62b..defdd9cd 100644 --- a/docs/implementation.md +++ b/docs/implementation.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,11 +15,12 @@ details. You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see -[http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). -# Implementation +

Implementation

-### System architecture +System architecture +------------------- ```graphviz digraph { @@ -116,7 +118,7 @@ The verified extension-generated event stream includes `session_start`, contract tests submit representative well-formed event batches for optional study/debug/build event types through the same public HTTPS API. -## Architecture +

Architecture

Overall, the code is something like this: @@ -264,7 +266,10 @@ So, this project contains Rust code to automate this process -- see the [builder](../builder/Cargo.toml). The `bt` script simplifies invoking the builder. -### `bt` (build tool) script +

`bt` (build tool) script

Misc topics ----------- diff --git a/docs/index.md b/docs/index.md index e1cf220e..6670c0d3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -14,7 +15,7 @@ details. You should have received a copy of the GNU General Public License along with the CodeChat Editor. If not, see -[http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). # Index diff --git a/docs/style_guide.cpp b/docs/style_guide.cpp index 4270285e..6fc6c4fa 100644 --- a/docs/style_guide.cpp +++ b/docs/style_guide.cpp @@ -1,10 +1,5 @@ -//

style_guide.cpp - Literate programming using the CodeChat Editor

-// -// This document, written as a C++ source file, primarily demonstrates the use -// of the CodeChat Editor in literate programming. It should be viewed using the -// CodeChat Editor. -// -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU @@ -20,6 +15,12 @@ // the CodeChat Editor. If not, see // [http://www.gnu.org/licenses](http://www.gnu.org/licenses). // +//

style_guide.cpp - Literate programming using the CodeChat Editor

+// +// This document, written as a C++ source file, primarily demonstrates the use +// of the CodeChat Editor in literate programming. It should be viewed using the +// CodeChat Editor. +// // Introduction // ------------ // diff --git a/docs/test.py b/docs/test.py deleted file mode 100644 index b2acb32a..00000000 --- a/docs/test.py +++ /dev/null @@ -1 +0,0 @@ -# A  diff --git a/examples/no-spoon/no_spoon.py b/examples/no-spoon/no_spoon.py index 790707b0..3e8ea81b 100644 --- a/examples/no-spoon/no_spoon.py +++ b/examples/no-spoon/no_spoon.py @@ -1,3 +1,22 @@ +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. +# +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# # `no_spoon.py` - a CodinGame challenge # ===================================== # diff --git a/extensions/VSCode/.gitignore b/extensions/VSCode/.gitignore index 8dc0c274..65fa2a14 100644 --- a/extensions/VSCode/.gitignore +++ b/extensions/VSCode/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/extensions/VSCode/.vscode/settings.json b/extensions/VSCode/.vscode/settings.json deleted file mode 100644 index c8f0ae63..00000000 --- a/extensions/VSCode/.vscode/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -// Place your settings in this file to overwrite default and user settings. -{ - "python.linting.pylintEnabled": false, - "python.linting.flake8Enabled": true, - "python.linting.enabled": true, - "spellright.language": ["en"], - "spellright.documentTypes": ["markdown", "latex", "plaintext", "python"] -} diff --git a/extensions/VSCode/.vscodeignore b/extensions/VSCode/.vscodeignore index 7410f92c..845bad7d 100644 --- a/extensions/VSCode/.vscodeignore +++ b/extensions/VSCode/.vscodeignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `vscodeignore` - Files not to package # ===================================== diff --git a/extensions/VSCode/Cargo.toml b/extensions/VSCode/Cargo.toml index 71511d8e..06ca6403 100644 --- a/extensions/VSCode/Cargo.toml +++ b/extensions/VSCode/Cargo.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `Cargo.toml` -- Rust interface for the VSCode extension # ======================================================= diff --git a/extensions/VSCode/README.md b/extensions/VSCode/README.md index 743bb7a6..8c520901 100644 --- a/extensions/VSCode/README.md +++ b/extensions/VSCode/README.md @@ -30,9 +30,9 @@ Running file should load. If it doesn't: 1. Open the Visual Studio Code settings for the CodeChat Editor by navigating - to `File` > `Preferences` > `Settings` then typing `CodeChat` in the + to `File` > `Preferences` > `Settings` then typing `CodeChat` in the search box. Change the port from its default of 8080 to some other value. - 2. Run the extension again (close the existing window, type `Ctrl+Shift+P` + 2. Run the extension again (close the existing window, type `Ctrl+Shift+P` then select Enable the CodeChat Editor). Study capture @@ -75,3 +75,26 @@ Additional documentation See the [user manual](https://codechat-editor.onrender.com/fw/fsb/opt/render/project/src/README.md). + +License +------- + +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a [copy](LICENSE.html) of the GNU General Public +License along with the CodeChat Editor. If not, see +[https://www.gnu.org/licenses/](https://www.gnu.org/licenses/). + diff --git a/extensions/VSCode/build.rs b/extensions/VSCode/build.rs index 0f1b0100..4a78172c 100644 --- a/extensions/VSCode/build.rs +++ b/extensions/VSCode/build.rs @@ -1,3 +1,20 @@ +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. +// +// This file is part of the CodeChat Editor. The CodeChat Editor is free +// software: you can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, either +// version 3 of the License, or (at your option) any later version. +// +// The CodeChat Editor is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// the CodeChat Editor. If not, see +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). + fn main() { napi_build::setup(); } diff --git a/extensions/VSCode/developer.md b/extensions/VSCode/developer.md index 3eb95ead..a6d1f023 100644 --- a/extensions/VSCode/developer.md +++ b/extensions/VSCode/developer.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + Developer documentation ======================= diff --git a/extensions/VSCode/eslint.config.js b/extensions/VSCode/eslint.config.js index d8620f93..b8e91292 100644 --- a/extensions/VSCode/eslint.config.js +++ b/extensions/VSCode/eslint.config.js @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. // @@ -14,7 +15,7 @@ // // You should have received a copy of the GNU General Public License along with // the CodeChat Editor. If not, see -// [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). // // `.eslintrc.yml` -- Configure ESLint for this project // ==================================================== diff --git a/extensions/VSCode/jsconfig.json b/extensions/VSCode/jsconfig.json index b163bb01..7b3dfb03 100644 --- a/extensions/VSCode/jsconfig.json +++ b/extensions/VSCode/jsconfig.json @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/VSCode/package.json b/extensions/VSCode/package.json index 87a80c10..91c4720d 100644 --- a/extensions/VSCode/package.json +++ b/extensions/VSCode/package.json @@ -118,15 +118,15 @@ "@emnapi/core": "^1.11.3", "@emnapi/runtime": "^1.11.3", "@eslint/js": "^10.0.1", - "@napi-rs/cli": "^3.10.8", + "@napi-rs/cli": "^3.10.9", "@tybys/wasm-util": "^0.10.4", "@types/escape-html": "^1.0.4", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/vscode": "1.61.0", - "@typescript-eslint/eslint-plugin": "^8.72.0", - "@typescript-eslint/parser": "^8.72.0", + "@typescript-eslint/eslint-plugin": "^8.72.1", + "@typescript-eslint/parser": "^8.72.1", "@typescript/native": "npm:typescript@^7.0.2", - "@vscode/vsce": "^4.0.0", + "@vscode/vsce": "^4.1.0", "chalk": "^6.0.1", "esbuild": "^0.28.2", "eslint": "^10.13.0", @@ -134,10 +134,10 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.5.7", - "npm-run-all2": "^9.0.3", + "npm-run-all2": "^9.0.4", "prettier": "^3.9.10", "typescript": "npm:@typescript/typescript6@^6.0.2", - "typescript-eslint": "^8.72.0" + "typescript-eslint": "^8.72.1" }, "optionalDependencies": { "bufferutil": "^4.1.0" diff --git a/extensions/VSCode/pnpm-lock.yaml b/extensions/VSCode/pnpm-lock.yaml index 5978ed84..988d9206 100644 --- a/extensions/VSCode/pnpm-lock.yaml +++ b/extensions/VSCode/pnpm-lock.yaml @@ -22,8 +22,8 @@ importers: specifier: ^10.0.1 version: 10.0.1(eslint@10.13.0) '@napi-rs/cli': - specifier: ^3.10.8 - version: 3.10.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.5) + specifier: ^3.10.9 + version: 3.10.9(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.6) '@tybys/wasm-util': specifier: ^0.10.4 version: 0.10.4 @@ -31,23 +31,23 @@ importers: specifier: ^1.0.4 version: 1.0.4 '@types/node': - specifier: ^26.6.5 - version: 26.6.5 + specifier: ^26.6.6 + version: 26.6.6 '@types/vscode': specifier: 1.61.0 version: 1.61.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.72.0 - version: 8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0) + specifier: ^8.72.1 + version: 8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0) '@typescript-eslint/parser': - specifier: ^8.72.0 - version: 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + specifier: ^8.72.1 + version: 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) '@typescript/native': specifier: npm:typescript@^7.0.2 version: typescript@7.0.2 '@vscode/vsce': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.1.0 + version: 4.1.0 chalk: specifier: ^6.0.1 version: 6.0.1 @@ -62,7 +62,7 @@ importers: version: 10.1.8(eslint@10.13.0) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint@10.13.0) + version: 2.32.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint@10.13.0) eslint-plugin-node: specifier: ^11.1.0 version: 11.1.0(eslint@10.13.0) @@ -70,8 +70,8 @@ importers: specifier: ^5.5.7 version: 5.5.7(eslint-config-prettier@10.1.8(eslint@10.13.0))(eslint@10.13.0)(prettier@3.9.10) npm-run-all2: - specifier: ^9.0.3 - version: 9.0.3 + specifier: ^9.0.4 + version: 9.0.4 prettier: specifier: ^3.9.10 version: 3.9.10 @@ -79,8 +79,8 @@ importers: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' typescript-eslint: - specifier: ^8.72.0 - version: 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + specifier: ^8.72.1 + version: 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) optionalDependencies: bufferutil: specifier: ^4.1.0 @@ -116,28 +116,24 @@ packages: resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} engines: {node: '>=22.0.0'} - '@azure/identity@4.14.0': - resolution: {integrity: sha512-8utCLdTZn14CiAe0HW4JbtzUMsc0mdDwnjUvStFMrR4IxQP8S2eL9zVAdplpfORVJGYmidZElpeXRYjJQ4UyUw==} + '@azure/identity@4.14.1': + resolution: {integrity: sha512-HHuuFrmN1uuF9D5A6aAo5eHzNFNX4Q+P4SksZqDKse5YaJFFy/zDLG3wXHEV2FVGgetZ3QM8jGURNBtnQYf1NQ==} engines: {node: '>=22.0.0'} '@azure/logger@1.4.0': resolution: {integrity: sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==} engines: {node: '>=22.0.0'} - '@azure/msal-browser@5.25.1': - resolution: {integrity: sha512-NDW2/bz2Pz71EJAlhSw+jg1kpRIWtrzj0gCzcHuG1u7iLvSOHpUc5lICkDA9x0bbeityxTneiunSBluvS+/y4w==} - engines: {node: '>=0.8.0'} - - '@azure/msal-common@16.14.1': - resolution: {integrity: sha512-Or6xhPNyi4zHW25158yxBoyxuCqNSPa5YBVqfF1J5Ks4MJWBo/USXdp05DQIPu1Zli00YZu6t0+h6KvHJealxQ==} + '@azure/msal-browser@5.27.0': + resolution: {integrity: sha512-i2CKKyuCuOZEBZJiAoFK/viYZAP6CRaqqlkeHl3ViteDHOUE/tkI/Slq1cdGnwhkIB+k1OE0g00QGl9O0gAFNQ==} engines: {node: '>=0.8.0'} - '@azure/msal-common@16.14.2': - resolution: {integrity: sha512-HOBR0Gfo39TMrkxNG8k6cfjRkrRjXZc3JQs3ebMWQc9S4cihuknMYra3sgmzbZB752oQBqBN9+WF7c826p2vIQ==} + '@azure/msal-common@16.15.0': + resolution: {integrity: sha512-lwdLb1B9Q5nEhPLVIKe78XH5wFMN15fCiDkY7ylPDSWZuWcD93G3jpJajrKhO3CQld8SLKz0sHiOi24mxdvtsg==} engines: {node: '>=0.8.0'} - '@azure/msal-node@6.0.1': - resolution: {integrity: sha512-ixSO1Y/kCVRthRs+hSx/5qkwaunX1/RAePhlMN0wIpIQ4WEZ6AREGGnGd1AP0qspHVsAwzWQKGubpjh50JyJIQ==} + '@azure/msal-node@7.1.2': + resolution: {integrity: sha512-52hKQLGpEQzwNufIXG1SPVU+wQ3RIe7Rp2+g+VdAmZojCAZ6yCdGEffzQEQ6RnBZGBEs40nl14rWBmfJpCoHsg==} engines: {node: '>=20'} '@cacheable/memory@2.2.0': @@ -391,12 +387,12 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@2.0.9': - resolution: {integrity: sha512-0Ywt3S8tqM6TWUcsRlBFQ1x+X3/o8kktX0ZiKAnByYb9GFDknnOhse1PVtfiD2BXPI8ar+BWx9PV9R0lQIcygw==} + '@inquirer/ansi@2.0.10': + resolution: {integrity: sha512-dwrc+1aqVZpHNkNDswXGtn1typ+Pxpo5FHZRyBw1le7onEJUkPUkYOY1FIFC1LvFMYUqqLuWBwElhAmencL7MQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/checkbox@5.2.7': - resolution: {integrity: sha512-/+QmGE/9bvE/EobaZDnzYe+T+QWoJrnmxwBQNtoi2OVSUR9d1znYsNyEoUrOZvFSxDYttrhzRIpXpaLkN+iIsg==} + '@inquirer/checkbox@5.2.8': + resolution: {integrity: sha512-NY/S1EalQhlonqhwwsarrcnkH7s9ByQuvjWYdk1jB2Gb9EPQJjKkhCTWjM3yQ0UpHaLm1XbIL89b+32G8rhO5w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -404,8 +400,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.3.4': - resolution: {integrity: sha512-ZwnaZZDa1zxsyVrN32s447ydMnKcw7e8WWNT+R+Qsu0zAn8Rs6yi9d1B80Kob1Ul2cfUi7t8JD2t4/K7uEZpqA==} + '@inquirer/confirm@6.3.5': + resolution: {integrity: sha512-BJ59BOyURiZiAxdr9AuRu38/k+rV+DcTIM2fUF/c/BXrab6H8zMZTTOl3LgkSJH96Xob2vOJxDiBkHiz32Xx2w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -413,8 +409,8 @@ packages: '@types/node': optional: true - '@inquirer/core@12.0.5': - resolution: {integrity: sha512-c0ZSnO9oVk/IlEGoZK3u8b3IZQeu9I6jUkXJSQnQEVRXsjKvtAq3AGqFL2LgfJhlzMZne08pZHWRWasIcI3Rew==} + '@inquirer/core@12.0.6': + resolution: {integrity: sha512-5yxn2LsJ8Tu4ei2a+yNkmFRhM/cb+JMEsEs/AW6CCOnBnpMy4IjYiPMFyHtYq8weOmlTyqqCx40y0DsD7OsEPw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -422,8 +418,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.3.5': - resolution: {integrity: sha512-6lU3/pPx5z3lHWejFW061MV4qZooBQYv/+EeGhNOPiP/i+hrYsHfxxBnnDGsAfg8YdLUd69YckoeOjtr3QuAUg==} + '@inquirer/editor@5.3.6': + resolution: {integrity: sha512-Z5SOeRC5VNkINfKN4rY8BSaYKb3GYi8iSEqZZRqogsE2GhBBToQ0Xw25SbI+4bcatLzU009mZ5d9EuJNiJuUCg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -431,8 +427,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.1.7': - resolution: {integrity: sha512-eiJ31YFCaB6fLoJCqLIn8S6eqUyME6vwr8KcP5h8cxmA+bV9RRVPO+kywoxb7G63HduDXV6sN/SM7o2R+ahEcQ==} + '@inquirer/expand@5.1.8': + resolution: {integrity: sha512-dMEnTkpLqzM/sbILwL7QJgx9iX5hoEM8+bh6shgwd9mYJamdOnth7y2mMaFd08Glj9AXEFKllWcGYyBqnJsHrA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -440,8 +436,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@3.0.6': - resolution: {integrity: sha512-rWmw6WG8JZ7LMn/srXEylYGhL6EXXJeROE7/4x4GREh6NgzqJBDbIgpNGsYoLPfobeb4VZtEYzPGnT5EFNYhiQ==} + '@inquirer/external-editor@3.0.7': + resolution: {integrity: sha512-enNqTJpojgISCG+a5acjnfJ02hcRTFUBVm8uXiCY40PRPZtSzFnNLskOTU+kDUUEODYma90syxuea1rRtUFh0Q==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -449,12 +445,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@2.0.9': - resolution: {integrity: sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==} + '@inquirer/figures@2.0.10': + resolution: {integrity: sha512-51elrUJV3jZpvD0ygz8+U10Kc6+Lzqln+/tYmnbhy6jo5oXpE6hMCcv+OTBC0enwJXsb3JIuT3VtEinRNCSK2A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/input@5.1.8': - resolution: {integrity: sha512-psOSTgkL8y/OtgJJYbqJ0oISr2QBE0U1Ro/qQdA/EKjeJiwiUTQgQmq8o4ESNzVOWthIeh3YLD7BCUR9dKnR5g==} + '@inquirer/input@5.1.9': + resolution: {integrity: sha512-2Vd5T7lTxfgJMpAd3aOu6bQpbUnCU7tBgvTQIZkP/7juJzmRmTM2t5XfOCuirFduWLTSJI/WZp32Cq1E01TVeg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -462,8 +458,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.2.5': - resolution: {integrity: sha512-lEy7LWsdF5qHx5QjHZqabUqM9P7i5uTMCt8GRzqxmwXXKbapKJDA+ucVflVVPAyj4snD5DTAD4L+sct85XOlOQ==} + '@inquirer/number@4.2.6': + resolution: {integrity: sha512-22LnGGCDm1M/pKXxxF8n6ppr/1IztdsxqeqeBRUMTTNnJTkjIBiAkewiDM4u/gjtazj/FvZS+nk9AbO/vEcBFQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -471,8 +467,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.2.4': - resolution: {integrity: sha512-T7ir3fflSSVCYEVqNyMBq+pIMsilQRtbZcD5gxn6Ewsin5TJWBxrGBdXveWtmeXVAeoInfhS+BhBUZaL4sFSDg==} + '@inquirer/password@5.2.5': + resolution: {integrity: sha512-0v0wLQA4uhWbybmdH6oPl7ooxCiymNylkvi2gCSc+mA5ZQB6QoJLVhoHq12T82lhozpp9fpMJnJkC1nJrU/A+A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -480,8 +476,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.7.4': - resolution: {integrity: sha512-SAJt+QhY5rOJAIgZBw9TrHWfgrp6wsb9cqRCyqax+Hl6EiFfRXmD9EsIWkST8yq/dQ8H46Is2Sr/JG7Ls/LQ+Q==} + '@inquirer/prompts@8.7.5': + resolution: {integrity: sha512-l/IWwC+QhOyXgxkZloOh+n5quGzc1m5ZawyzBmoizCZaxbJeLRdS3pStoqg/JVInJRXaG5aHMhjK6H6oYiBC9A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -489,8 +485,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.3.7': - resolution: {integrity: sha512-XveEe8v3BHj9ec00n+9i8FHjWhXjS6+jCTizYvXCqKUKtgkrq9xid8S5j3mYGW96qfxG3mwNoud3m3v8GDk9Pw==} + '@inquirer/rawlist@5.3.8': + resolution: {integrity: sha512-h+6Y4pPvYvuRbksn1kIBdD9tCYD+E468W5sIcVfLmoLP5IasnY0r33N+r+46ej/P8b2PCREjyKR+MnnfPGdTzg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -498,8 +494,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.3.5': - resolution: {integrity: sha512-kIUecMugEN2YTvTmff+uYz0nAE0f9RFNDVZknfrh264vAQM9P8tnsXiUp7z8XbGuNIBEtFMJhvc9QquawpC46A==} + '@inquirer/search@4.3.6': + resolution: {integrity: sha512-JZj9ttkIvuaFQIc2oxsyqC1ad05WL02ku6W/INVKTCzNaVq1KkhP3AfTRC0m7OWlKZyw+EWwPBFZfYiG9jF6Yw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -507,8 +503,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.2.7': - resolution: {integrity: sha512-pRDWO4dTqSAvFQdO8yclKMtXNDm9K9HmvWB5UZmT3clw2OlOBNXveHzhyFmO/0d0yJMqlPcNITus1Jtpm6t8VQ==} + '@inquirer/select@5.2.8': + resolution: {integrity: sha512-BklkkAAOpjdCfuQw5fVGcDuhKxA7T1iBpn6b2JUvDDdkIsO3Ftlg+WnWUCVpkUBFagL2o036OFW+xL4lC9wIPw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -516,8 +512,8 @@ packages: '@types/node': optional: true - '@inquirer/type@4.2.0': - resolution: {integrity: sha512-2rnHX8RPo4glJYqnFc/v3nQeIhDcjyRRyaT7MGcfL/8xv/8K03SXYoA2tX06WVSKywWOE/ncbG3dtuzLjR5TCQ==} + '@inquirer/type@4.2.1': + resolution: {integrity: sha512-lDkPsnv5M5CcYB2T1qTc3dobNTPkVr4DU3Ic2Q6SW8/qVRHgvzdRdmVZ6YqG9Ag1aJTeMsLU0s0WPRh3CZWDQQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -534,8 +530,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@napi-rs/cli@3.10.8': - resolution: {integrity: sha512-hg7m8VwECTIIHxNzajDG8QgtTOEVAKiIVLCLCW90Th6Z5R/ijWjh16iaQrRvXj4ve/S2fcXYo5cctCWJ8aVxIg==} + '@napi-rs/cli@3.10.9': + resolution: {integrity: sha512-RpzJrTDlSxUi2Deo+dh4bmDTKklAVe295aSQjZspwbZyUBG7twbXbiKskL2w/bL4kNg3DdkrwbI/iQwI9kgQaQ==} engines: {node: ^20.17.0 || ^22.13.0 || >= 23.5.0} hasBin: true peerDependencies: @@ -883,12 +879,12 @@ packages: resolution: {integrity: sha512-p6q2HhUc5vwH1CNwfOcrhLoxfgn8ust8Sqlfx+sA4VzAcp1cMbvbkl99tZZlDqOjCHgQNSiTfk/yWPjl/D42qA==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.2.5': - resolution: {integrity: sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==} + '@napi-rs/wasm-runtime@1.2.6': + resolution: {integrity: sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 - '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/core': ^1.7.1 || 2.0.0-beta.2 + '@emnapi/runtime': ^1.7.1 || 2.0.0-beta.2 '@napi-rs/wasm-tools-android-arm-eabi@1.1.0': resolution: {integrity: sha512-p6J8PB59I8d/XItXB/go5JH6nKW+xIbpzaL43EBTV0hi7mrS/Z4gs+MsB04ZrlqZN29BdZV8fChRyasuXLhRaA==} @@ -1072,8 +1068,8 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/estree@1.0.10': + resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1081,69 +1077,69 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@26.6.5': - resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} '@types/vscode@1.61.0': resolution: {integrity: sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==} - '@typescript-eslint/eslint-plugin@8.72.0': - resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} + '@typescript-eslint/eslint-plugin@8.72.1': + resolution: {integrity: sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.72.0 + '@typescript-eslint/parser': ^8.72.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.72.0': - resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} + '@typescript-eslint/parser@8.72.1': + resolution: {integrity: sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.72.0': - resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} + '@typescript-eslint/project-service@8.72.1': + resolution: {integrity: sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.72.0': - resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} + '@typescript-eslint/scope-manager@8.72.1': + resolution: {integrity: sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.72.0': - resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} + '@typescript-eslint/tsconfig-utils@8.72.1': + resolution: {integrity: sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.72.0': - resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} + '@typescript-eslint/type-utils@8.72.1': + resolution: {integrity: sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.72.0': - resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} + '@typescript-eslint/types@8.72.1': + resolution: {integrity: sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.72.0': - resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} + '@typescript-eslint/typescript-estree@8.72.1': + resolution: {integrity: sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.72.0': - resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} + '@typescript-eslint/utils@8.72.1': + resolution: {integrity: sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.72.0': - resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} + '@typescript-eslint/visitor-keys@8.72.1': + resolution: {integrity: sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/typescript-aix-ppc64@7.0.2': @@ -1322,8 +1318,8 @@ packages: '@vscode/vsce-sign@2.1.0': resolution: {integrity: sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==} - '@vscode/vsce@4.0.0': - resolution: {integrity: sha512-NImwuLaenMmb5D5Jer9/lzi/F9ZQUBOp8Azhj/BVYcTFgixv8KehFXqEUDjQlD2tAiw2E6dDGyjTuAB//di60A==} + '@vscode/vsce@4.1.0': + resolution: {integrity: sha512-iWNykEfLWTAU7FC2iBiE0vJvnJDpGm3GlL89dsBtRs62F+8tkPtq80Imi0QSFHjNBWu4QIdYII+3F9v/ZQRExw==} engines: {node: '>= 22'} hasBin: true @@ -1348,8 +1344,8 @@ packages: resolution: {integrity: sha512-kKvt3m4uwzqL0wlkPd09CmljPJGOZZ4D0fP65sqFSvPkMRKhNi+74MgIJ5QxE6SxqB4t4KyUFGg8+n5zjo6hew==} engines: {node: '>=22'} - argparse@3.0.3: - resolution: {integrity: sha512-Sn98ftV3KfsO8xfLPHG6oT8y+b0yvbrLgZjgPDXsharNY15tTAjqIsIju4S32nl6/iEUNNE4v+yL2Zhm8ooP3w==} + argparse@3.0.4: + resolution: {integrity: sha512-fwWK3Zq22l4XJJjx5mcBHGikIk+hJqO+32dPm0Jur7+rtG5x1scOjSfdT9ZKeWHPpsya/l0HHK4tDImBkTrtvA==} array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} @@ -1580,8 +1576,8 @@ packages: resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} engines: {node: '>= 0.4'} - es-toolkit@1.52.0: - resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} + es-toolkit@1.53.0: + resolution: {integrity: sha512-3+AYXp9fmJ/UhHBMYj2/U+RaUouMD90SzoItyDOB2Za7W6dB7fQApFGnZPl2MF6K8/Tv1koh1JyirSx/kju6Pw==} esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} @@ -1852,8 +1848,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.13: - resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} + ignore@7.0.14: + resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} engines: {node: '>= 4'} imurmurhash@0.1.4: @@ -2066,8 +2062,8 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - marked@18.1.1: - resolution: {integrity: sha512-zEGgrtUG8crk+TrMacJSVABU4DYDDkS8uqgU3ohrn/2fW9C2AEfUrO3m6IhpIpQpl7YcVpiXXC9cSMWDANT3dg==} + marked@18.1.2: + resolution: {integrity: sha512-DfOnvLAQ6WYeWxWO1u4RyFOeqyHup6dks5PPqnoFiooU7ipRvidO/2j8plhAHIiZg574E9ZlzSjUiPMLAzFkgg==} engines: {node: '>= 20'} hasBin: true @@ -2119,8 +2115,8 @@ packages: resolution: {integrity: sha512-tdt4aFn9QamlhdN3HV2D2ccpBwO5/fyjjbXUxYA6uBjyekMZcZvDq0aSj9t5Jo+tih6AYFnt/cuIRn9013e0Uw==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - npm-run-all2@9.0.3: - resolution: {integrity: sha512-BQAEdU1PtYc48qYRdghW2BVTQT3VqWCoFQmO87NlM1h1PYwMCKQpUWaNyB20V26caNzFsXQDfyOdznLlHCih6g==} + npm-run-all2@9.0.4: + resolution: {integrity: sha512-GuGRF8MddEKavyUzjy0k2z2pA76/N+eT8lHlypx0/AhShLKD2FOerQxHhpFhcqnQmAqCkunUCYlf6Z9RKh/4zg==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0, npm: '>= 10'} hasBin: true @@ -2234,8 +2230,8 @@ packages: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} - qs@6.16.1: - resolution: {integrity: sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==} + qs@6.17.1: + resolution: {integrity: sha512-jd3COkaKVgGUW+ZHyEHCG9bH7RoaaiWuMgzsIBjUMVjLAaWGWpoUAVwljVvBHxRu/2qEHnadLGZrkutYUBPQJA==} engines: {node: '>=0.6'} read-package-json-fast@6.0.0: @@ -2435,8 +2431,8 @@ packages: typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} - typescript-eslint@8.72.0: - resolution: {integrity: sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==} + typescript-eslint@8.72.1: + resolution: {integrity: sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -2583,7 +2579,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/identity@4.14.0': + '@azure/identity@4.14.1': dependencies: '@azure/abort-controller': 2.2.0 '@azure/core-auth': 1.11.0 @@ -2593,8 +2589,8 @@ snapshots: '@azure/core-tracing': 1.4.0 '@azure/core-util': 1.14.0 '@azure/logger': 1.4.0 - '@azure/msal-browser': 5.25.1 - '@azure/msal-node': 6.0.1 + '@azure/msal-browser': 5.27.0 + '@azure/msal-node': 7.1.2 open: 11.0.4 tslib: 2.8.1 transitivePeerDependencies: @@ -2607,17 +2603,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/msal-browser@5.25.1': + '@azure/msal-browser@5.27.0': dependencies: - '@azure/msal-common': 16.14.2 - - '@azure/msal-common@16.14.1': {} + '@azure/msal-common': 16.15.0 - '@azure/msal-common@16.14.2': {} + '@azure/msal-common@16.15.0': {} - '@azure/msal-node@6.0.1': + '@azure/msal-node@7.1.2': dependencies: - '@azure/msal-common': 16.14.1 + '@azure/msal-common': 16.15.0 jsonwebtoken: 9.0.3 '@cacheable/memory@2.2.0': @@ -2807,124 +2801,124 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@2.0.9': {} + '@inquirer/ansi@2.0.10': {} - '@inquirer/checkbox@5.2.7(@types/node@26.6.5)': + '@inquirer/checkbox@5.2.8(@types/node@26.6.6)': dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/ansi': 2.0.10 + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/figures': 2.0.10 + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/confirm@6.3.4(@types/node@26.6.5)': + '@inquirer/confirm@6.3.5(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/core@12.0.5(@types/node@26.6.5)': + '@inquirer/core@12.0.6(@types/node@26.6.6)': dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/ansi': 2.0.10 + '@inquirer/figures': 2.0.10 + '@inquirer/type': 4.2.1(@types/node@26.6.6) cli-width: 4.1.0 fast-wrap-ansi: 0.2.2 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/editor@5.3.5(@types/node@26.6.5)': + '@inquirer/editor@5.3.6(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/external-editor': 3.0.6(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/external-editor': 3.0.7(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/expand@5.1.7(@types/node@26.6.5)': + '@inquirer/expand@5.1.8(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/external-editor@3.0.6(@types/node@26.6.5)': + '@inquirer/external-editor@3.0.7(@types/node@26.6.6)': dependencies: chardet: 2.2.0 iconv-lite: 0.7.3 optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/figures@2.0.9': {} + '@inquirer/figures@2.0.10': {} - '@inquirer/input@5.1.8(@types/node@26.6.5)': + '@inquirer/input@5.1.9(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/number@4.2.5(@types/node@26.6.5)': + '@inquirer/number@4.2.6(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/password@5.2.4(@types/node@26.6.5)': + '@inquirer/password@5.2.5(@types/node@26.6.6)': dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/ansi': 2.0.10 + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 - - '@inquirer/prompts@8.7.4(@types/node@26.6.5)': - dependencies: - '@inquirer/checkbox': 5.2.7(@types/node@26.6.5) - '@inquirer/confirm': 6.3.4(@types/node@26.6.5) - '@inquirer/editor': 5.3.5(@types/node@26.6.5) - '@inquirer/expand': 5.1.7(@types/node@26.6.5) - '@inquirer/input': 5.1.8(@types/node@26.6.5) - '@inquirer/number': 4.2.5(@types/node@26.6.5) - '@inquirer/password': 5.2.4(@types/node@26.6.5) - '@inquirer/rawlist': 5.3.7(@types/node@26.6.5) - '@inquirer/search': 4.3.5(@types/node@26.6.5) - '@inquirer/select': 5.2.7(@types/node@26.6.5) + '@types/node': 26.6.6 + + '@inquirer/prompts@8.7.5(@types/node@26.6.6)': + dependencies: + '@inquirer/checkbox': 5.2.8(@types/node@26.6.6) + '@inquirer/confirm': 6.3.5(@types/node@26.6.6) + '@inquirer/editor': 5.3.6(@types/node@26.6.6) + '@inquirer/expand': 5.1.8(@types/node@26.6.6) + '@inquirer/input': 5.1.9(@types/node@26.6.6) + '@inquirer/number': 4.2.6(@types/node@26.6.6) + '@inquirer/password': 5.2.5(@types/node@26.6.6) + '@inquirer/rawlist': 5.3.8(@types/node@26.6.6) + '@inquirer/search': 4.3.6(@types/node@26.6.6) + '@inquirer/select': 5.2.8(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/rawlist@5.3.7(@types/node@26.6.5)': + '@inquirer/rawlist@5.3.8(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/search@4.3.5(@types/node@26.6.5)': + '@inquirer/search@4.3.6(@types/node@26.6.6)': dependencies: - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/figures': 2.0.10 + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/select@5.2.7(@types/node@26.6.5)': + '@inquirer/select@5.2.8(@types/node@26.6.6)': dependencies: - '@inquirer/ansi': 2.0.9 - '@inquirer/core': 12.0.5(@types/node@26.6.5) - '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.2.0(@types/node@26.6.5) + '@inquirer/ansi': 2.0.10 + '@inquirer/core': 12.0.6(@types/node@26.6.6) + '@inquirer/figures': 2.0.10 + '@inquirer/type': 4.2.1(@types/node@26.6.6) optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@inquirer/type@4.2.0(@types/node@26.6.5)': + '@inquirer/type@4.2.1(@types/node@26.6.6)': optionalDependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: @@ -2934,15 +2928,15 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@napi-rs/cli@3.10.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.5)': + '@napi-rs/cli@3.10.9(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.6)': dependencies: - '@inquirer/prompts': 8.7.4(@types/node@26.6.5) + '@inquirer/prompts': 8.7.5(@types/node@26.6.6) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.1.0 '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 - es-toolkit: 1.52.0 + es-toolkit: 1.53.0 js-yaml: 5.5.0 obug: 3.0.0 semver: 7.8.5 @@ -3067,7 +3061,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + '@napi-rs/wasm-runtime': 1.2.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@napi-rs/lzma-win32-arm64-msvc@1.5.1': @@ -3139,7 +3133,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + '@napi-rs/wasm-runtime': 1.2.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@napi-rs/tar-win32-arm64-msvc@1.1.1': @@ -3170,14 +3164,14 @@ snapshots: '@napi-rs/tar-win32-ia32-msvc': 1.1.1 '@napi-rs/tar-win32-x64-msvc': 1.1.1 - '@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + '@napi-rs/wasm-runtime@1.2.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 '@tybys/wasm-util': 0.10.4 optional: true - '@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.2.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 @@ -3215,7 +3209,7 @@ snapshots: dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.2.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@napi-rs/wasm-tools-win32-arm64-msvc@1.1.0': @@ -3348,69 +3342,69 @@ snapshots: '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.9': {} + '@types/estree@1.0.10': {} '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/node@26.6.5': + '@types/node@26.6.6': dependencies: undici-types: 8.9.0 '@types/vscode@1.61.0': {} - '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0)': + '@typescript-eslint/eslint-plugin@8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/type-utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/type-utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/visitor-keys': 8.72.1 eslint: 10.13.0 - ignore: 7.0.13 + ignore: 7.0.14 natural-compare: 1.4.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0)': + '@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0)': dependencies: - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3 eslint: 10.13.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.72.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/project-service@8.72.1(@typescript/typescript6@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/tsconfig-utils': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.1 debug: 4.4.3 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.72.0': + '@typescript-eslint/scope-manager@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 - '@typescript-eslint/tsconfig-utils@8.72.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.72.1(@typescript/typescript6@6.0.2)': dependencies: typescript: '@typescript/typescript6@6.0.2' - '@typescript-eslint/type-utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0)': + '@typescript-eslint/type-utils@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0)': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) debug: 4.4.3 eslint: 10.13.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) @@ -3418,14 +3412,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.72.0': {} + '@typescript-eslint/types@8.72.1': {} - '@typescript-eslint/typescript-estree@8.72.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/typescript-estree@8.72.1(@typescript/typescript6@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/project-service': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3 minimatch: 10.2.6 semver: 7.8.5 @@ -3435,20 +3429,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0)': + '@typescript-eslint/utils@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2) eslint: 10.13.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.72.0': + '@typescript-eslint/visitor-keys@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/types': 8.72.1 eslint-visitor-keys: 5.0.1 '@typescript/typescript-aix-ppc64@7.0.2': @@ -3562,9 +3556,9 @@ snapshots: '@vscode/vsce-sign-win32-arm64': 2.0.6 '@vscode/vsce-sign-win32-x64': 2.0.6 - '@vscode/vsce@4.0.0': + '@vscode/vsce@4.1.0': dependencies: - '@azure/identity': 4.14.0 + '@azure/identity': 4.14.1 '@napi-rs/keyring': 1.3.0 '@secretlint/core': 10.2.2 '@secretlint/secretlint-rule-no-dotenv': 10.2.2 @@ -3577,7 +3571,7 @@ snapshots: commander: 12.1.0 hosted-git-info: 4.1.0 jsonc-parser: 3.3.1 - marked: 18.1.1 + marked: 18.1.2 mime: 1.6.0 minimatch: 10.2.6 parse5: 8.0.1 @@ -3610,7 +3604,7 @@ snapshots: ansi-styles@7.0.0: {} - argparse@3.0.3: {} + argparse@3.0.4: {} array-buffer-byte-length@1.0.2: dependencies: @@ -3919,7 +3913,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.52.0: {} + es-toolkit@1.53.0: {} esbuild@0.28.2: optionalDependencies: @@ -3966,11 +3960,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint-import-resolver-node@0.3.10)(eslint@10.13.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint-import-resolver-node@0.3.10)(eslint@10.13.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) eslint: 10.13.0 eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: @@ -3982,7 +3976,7 @@ snapshots: eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint@10.13.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint@10.13.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.2.0 @@ -3993,7 +3987,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.13.0 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint-import-resolver-node@0.3.10)(eslint@10.13.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(eslint-import-resolver-node@0.3.10)(eslint@10.13.0) hasown: 2.0.4 is-core-module: 2.17.0 is-glob: 4.0.3 @@ -4005,7 +3999,7 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4033,7 +4027,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4058,7 +4052,7 @@ snapshots: '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 @@ -4250,7 +4244,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.13: {} + ignore@7.0.14: {} imurmurhash@0.1.4: {} @@ -4396,7 +4390,7 @@ snapshots: js-yaml@5.5.0: dependencies: - argparse: 3.0.3 + argparse: 3.0.4 json-parse-even-better-errors@6.0.0: {} @@ -4467,7 +4461,7 @@ snapshots: dependencies: yallist: 4.0.0 - marked@18.1.1: {} + marked@18.1.2: {} math-intrinsics@1.1.0: {} @@ -4505,7 +4499,7 @@ snapshots: npm-normalize-package-bin@6.0.0: {} - npm-run-all2@9.0.3: + npm-run-all2@9.0.4: dependencies: ansi-styles: 7.0.0 cross-spawn: 7.0.6 @@ -4631,7 +4625,7 @@ snapshots: dependencies: hookified: 2.2.0 - qs@6.16.1: + qs@6.17.1: dependencies: es-define-property: 1.0.1 side-channel: 1.1.1 @@ -4884,16 +4878,16 @@ snapshots: typed-rest-client@1.8.11: dependencies: - qs: 6.16.1 + qs: 6.17.1 tunnel: 0.0.6 underscore: 1.13.8 - typescript-eslint@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0): + typescript-eslint@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0): dependencies: - '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0) - '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) - '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/eslint-plugin': 8.72.1(@typescript-eslint/parser@8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0))(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/parser': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) + '@typescript-eslint/typescript-estree': 8.72.1(@typescript/typescript6@6.0.2) + '@typescript-eslint/utils': 8.72.1(@typescript/typescript6@6.0.2)(eslint@10.13.0) eslint: 10.13.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: diff --git a/extensions/VSCode/src/capture-policy.test.mjs b/extensions/VSCode/src/capture-policy.test.mjs index a6127fe4..70c96708 100644 --- a/extensions/VSCode/src/capture-policy.test.mjs +++ b/extensions/VSCode/src/capture-policy.test.mjs @@ -1,3 +1,22 @@ +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. +// +// This file is part of the CodeChat Editor. The CodeChat Editor is free +// software: you can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, either +// version 3 of the License, or (at your option) any later version. +// +// The CodeChat Editor is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// the CodeChat Editor. If not, see +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +// +// `capture-policy.test.mjs` -- Tests for the Capture feature +// ========================================================== import assert from "node:assert/strict"; import test from "node:test"; diff --git a/extensions/VSCode/src/capture-policy.ts b/extensions/VSCode/src/capture-policy.ts index 04c7065d..2bd95608 100644 --- a/extensions/VSCode/src/capture-policy.ts +++ b/extensions/VSCode/src/capture-policy.ts @@ -1,7 +1,19 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // -// This file is part of the CodeChat Editor. - +// This file is part of the CodeChat Editor. The CodeChat Editor is free +// software: you can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, either +// version 3 of the License, or (at your option) any later version. +// +// The CodeChat Editor is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// the CodeChat Editor. If not, see +// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). export type CaptureTokenPolicyStatus = | "missing" | "unverified" diff --git a/extensions/VSCode/src/extension.ts b/extensions/VSCode/src/extension.ts index d0b38f29..8360f8a3 100644 --- a/extensions/VSCode/src/extension.ts +++ b/extensions/VSCode/src/extension.ts @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/VSCode/src/lib.rs b/extensions/VSCode/src/lib.rs index 22e7854e..a2d447e0 100644 --- a/extensions/VSCode/src/lib.rs +++ b/extensions/VSCode/src/lib.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/VSCode/tsconfig.json b/extensions/VSCode/tsconfig.json index 81174e7a..58a1581b 100644 --- a/extensions/VSCode/tsconfig.json +++ b/extensions/VSCode/tsconfig.json @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/developer.md b/extensions/developer.md index f49dc36f..f2faa22b 100644 --- a/extensions/developer.md +++ b/extensions/developer.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + **NOTE**: This file was copied from a previous project and needs significant editing. diff --git a/extensions/readme.md b/extensions/readme.md index 4bdf0a79..8ed1f77d 100644 --- a/extensions/readme.md +++ b/extensions/readme.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + `readme.py` - Overview of extensions ==================================== diff --git a/extensions/standalone/.gitignore b/extensions/standalone/.gitignore index 8bf4c8c3..233e5b63 100644 --- a/extensions/standalone/.gitignore +++ b/extensions/standalone/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/extensions/standalone/Cargo.toml b/extensions/standalone/Cargo.toml index 355180d3..01a5fbee 100644 --- a/extensions/standalone/Cargo.toml +++ b/extensions/standalone/Cargo.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `Cargo.toml` -- Rust build/package management config for the standalone CLI # =========================================================================== diff --git a/extensions/standalone/src/filewatcher.rs b/extensions/standalone/src/filewatcher.rs index 08fc4de8..9a81d521 100644 --- a/extensions/standalone/src/filewatcher.rs +++ b/extensions/standalone/src/filewatcher.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/standalone/src/main.rs b/extensions/standalone/src/main.rs index eea2f40c..77bc7e1d 100644 --- a/extensions/standalone/src/main.rs +++ b/extensions/standalone/src/main.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/extensions/standalone/tests/cli.rs b/extensions/standalone/tests/cli.rs index 94de599e..5b9dcc65 100644 --- a/extensions/standalone/tests/cli.rs +++ b/extensions/standalone/tests/cli.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/.gitignore b/server/.gitignore index 3cf227fe..3e693c43 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `.gitignore` -- files for Git to ignore # ======================================= diff --git a/server/Cargo.toml b/server/Cargo.toml index ed712c77..cab06685 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `Cargo.toml` -- Rust build/package management config for the server # =================================================================== diff --git a/server/log4rs.yml b/server/log4rs.yml index 9867910d..c045be2f 100644 --- a/server/log4rs.yml +++ b/server/log4rs.yml @@ -1,4 +1,5 @@ -# Copyright (C) 2026 Bryan A. Jones. +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. # # This file is part of the CodeChat Editor. # @@ -14,7 +15,7 @@ # # You should have received a copy of the GNU General Public License along with # the CodeChat Editor. If not, see -# [http://www.gnu.org/licenses/](http://www.gnu.org/licenses/). +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). # # `log4rs.yml` - configure logging # ================================ diff --git a/server/readme.md b/server/readme.md index bd455f1f..6654ed6d 100644 --- a/server/readme.md +++ b/server/readme.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + `readme.md` - Overview of the Server ================================================================================ diff --git a/server/scripts/capture_events_schema.sql b/server/scripts/capture_events_schema.sql index 9326e7a7..7991d561 100644 --- a/server/scripts/capture_events_schema.sql +++ b/server/scripts/capture_events_schema.sql @@ -1,3 +1,20 @@ +-- The CodeChat Editor, a word processor for software developers.
Copyright +-- (C) 2024-2026 Bryan A. Jones. +-- +-- This file is part of the CodeChat Editor. The CodeChat Editor is free +-- software: you can redistribute it and/or modify it under the terms of the GNU +-- General Public License as published by the Free Software Foundation, either +-- version 3 of the License, or (at your option) any later version. +-- +-- The CodeChat Editor is distributed in the hope that it will be useful, but +-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-- details. +-- +-- You should have received a copy of the GNU General Public License along with +-- the CodeChat Editor. If not, see +-- [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +-- -- Capture Events Schema -- ===================== -- @@ -5,12 +22,12 @@ -- -- This script updates an existing legacy `events` table to the lean capture -- schema used for dissertation telemetry. It converts `timestamp` and `data` to --- analysis-friendly PostgreSQL types and backfills typed telemetry from --- older JSON payloads where possible. New capture code writes known telemetry +-- analysis-friendly PostgreSQL types and backfills typed telemetry from older +-- JSON payloads where possible. New capture code writes known telemetry -- metadata to first-class columns and reserves `data` for event-specific --- details. Study metadata such as course, group, --- assignment, condition, and task is intentionally omitted: those values are --- joined during analysis from researcher-managed participant/date mappings. +-- details. Study metadata such as course, group, assignment, condition, and +-- task is intentionally omitted: those values are joined during analysis from +-- researcher-managed participant/date mappings. BEGIN; diff --git a/server/src/capture.rs b/server/src/capture.rs index 6bbe99c9..a3f1643d 100644 --- a/server/src/capture.rs +++ b/server/src/capture.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/ide.rs b/server/src/ide.rs index 8c1393c7..7d7b54f7 100644 --- a/server/src/ide.rs +++ b/server/src/ide.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/ide/vscode.rs b/server/src/ide/vscode.rs index 9e6ba06e..a4a0e382 100644 --- a/server/src/ide/vscode.rs +++ b/server/src/ide/vscode.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/ide/vscode/tests.rs b/server/src/ide/vscode/tests.rs index 728d05dd..9c6fe661 100644 --- a/server/src/ide/vscode/tests.rs +++ b/server/src/ide/vscode/tests.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer.rs b/server/src/lexer.rs index 8c19da65..ad018a5f 100644 --- a/server/src/lexer.rs +++ b/server/src/lexer.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/lexer-walkthrough.md b/server/src/lexer/lexer-walkthrough.md index 78b41f62..8b21bf57 100644 --- a/server/src/lexer/lexer-walkthrough.md +++ b/server/src/lexer/lexer-walkthrough.md @@ -1,4 +1,5 @@ -Copyright (C) 2026 Bryan A. Jones. +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. This file is part of the CodeChat Editor. diff --git a/server/src/lexer/pest/c.pest b/server/src/lexer/pest/c.pest index 20e3c707..ff5fa13b 100644 --- a/server/src/lexer/pest/c.pest +++ b/server/src/lexer/pest/c.pest @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/pest/parser_design.md b/server/src/lexer/pest/parser_design.md index acea239f..0fab04a2 100644 --- a/server/src/lexer/pest/parser_design.md +++ b/server/src/lexer/pest/parser_design.md @@ -1,5 +1,24 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + Parser design -================================================================================ +============= The CodeChat Editor uses the [Pest parser](https://pest.rs/), a Rust implementation of a parsing expression grammar (or PEG). The purpose of the diff --git a/server/src/lexer/pest/python.pest b/server/src/lexer/pest/python.pest index 391487eb..281eacab 100644 --- a/server/src/lexer/pest/python.pest +++ b/server/src/lexer/pest/python.pest @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/pest/shared.pest b/server/src/lexer/pest/shared.pest index 71ce5377..abead5cf 100644 --- a/server/src/lexer/pest/shared.pest +++ b/server/src/lexer/pest/shared.pest @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/pest_parser.rs b/server/src/lexer/pest_parser.rs index 3f5cad5f..ad0b8068 100644 --- a/server/src/lexer/pest_parser.rs +++ b/server/src/lexer/pest_parser.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/supported_languages.rs b/server/src/lexer/supported_languages.rs index de66d70b..8cddd1e7 100644 --- a/server/src/lexer/supported_languages.rs +++ b/server/src/lexer/supported_languages.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lexer/tests.rs b/server/src/lexer/tests.rs index 7540da21..fb87e6dd 100644 --- a/server/src/lexer/tests.rs +++ b/server/src/lexer/tests.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/lib.rs b/server/src/lib.rs index 6b6bc6ab..b1261af0 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the diff --git a/server/src/processing.rs b/server/src/processing.rs index 50ac0564..0edbcefc 100644 --- a/server/src/processing.rs +++ b/server/src/processing.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU @@ -58,7 +59,7 @@ use htmd::{ options::{BrStyle, LinkStyle, TranslationMode}, }; use html5ever::{ - Attribute, LocalName, Namespace, ParseOpts, QualName, parse_document, serialize, + Attribute, LocalName, Namespace, ParseOpts, QualName, ns, parse_document, serialize, serialize::{SerializeOpts, TraversalScope}, tendril::TendrilSink, tree_builder::TreeBuilderOpts, @@ -582,7 +583,7 @@ fn code_mirror_to_code_doc_blocks(code_mirror: &CodeMirror) -> Vec code_doc_block_arr } -/// Build the HTML to Markdown converter which an [`HtmlToMarkdownWrapped`] +/// Build the HTML to Markdown converter which an \[`HtmlToMarkdownWrapped`\] /// borrows. A `Conversion` holds a reference to its converter, so the converter /// must outlive the wrapper rather than live inside it. fn new_html_to_markdown() -> HtmlToMarkdown { @@ -655,9 +656,9 @@ impl<'a> HtmlToMarkdownWrapped<'a> { ) } - /// End the document, returning the Markdown placed at its end (such as - /// link reference definitions). This consumes the wrapper, since finishing - /// a `Conversion` consumes it. + /// End the document, returning the Markdown placed at its end (such as link + /// reference definitions). This consumes the wrapper, since finishing a + /// `Conversion` consumes it. fn last( self, // The word-wrapped Markdown which ends the document. @@ -1199,6 +1200,8 @@ static AMMONIA_OPTIONS: LazyLock = LazyLock::new(|| { .add_allowed_classes("pre", &["cc-fragment-indent", "cc-fragment-code"]) // The gather-items list is generated content, marked non-editable. .add_tag_attributes("div", &["contenteditable"]) + // Math spans are marked non-editable. + .add_tag_attributes("span", &["contenteditable"]) // `code` tags can have `class=language-*`. Since Ammonia doesn't support a // regex like this, just allow anything. .add_tag_attributes("code", &["class"]) @@ -1244,9 +1247,9 @@ static CLEAN_TARGET_HTML: LazyLock = LazyLock::new(|| { b }); -// Clean HTML for storage as a `Fragment`'s content, per the cache spec: -// like `AMMONIA_OPTIONS`, but `id` and `data-gather` attributes are stripped -// (they aren't in any allowlist) to prevent duplicate ids when the content is +// Clean HTML for storage as a `Fragment`'s content, per the cache spec: like +// `AMMONIA_OPTIONS`, but `id` and `data-gather` attributes are stripped (they +// aren't in any allowlist) to prevent duplicate ids when the content is // rendered in a gather list, and `` elements are removed *along with // their contents* -- backlink hydration is excluded from fragment content (see // layer 4 in the `cache.rs` design), which is what keeps a gather element and @@ -1489,8 +1492,8 @@ fn get_dom_body(document: &Rc) -> Rc { /// patch `` contents and `` backlinks. /// 2. `store_fragment_contents`: once each doc block's hydrated HTML is known, /// store each fragment's content in the cache. -/// 3. `hydrate_gathers`: insert each gather element's list of fragment contents, -/// now all present in the cache. +/// 3. `hydrate_gathers`: insert each gather element's list of fragment +/// contents, now all present in the cache. /// /// Phases 1 and 2 update the cache, and each update may outdate other files; /// `Cache::mark_outdated` sees that every outdated file is re-rendered. @@ -2016,13 +2019,13 @@ fn hydrate_gathers( ], )); // The fragment's content was hydrated in the fragment's - // file, so each cross-reference within it links from - // there; re-hydrate them to link from this file instead. - // This file needn't depend on their targets: the - // fragment's stored content embeds everything about a - // target which this re-hydration reads, so any change to - // a target which alters it also changes that content, - // which outdates this file. + // file, so each cross-reference within it links from there; + // re-hydrate them to link from this file instead. This file + // needn't depend on their targets: the fragment's stored + // content embeds everything about a target which this + // re-hydration reads, so any change to a target which + // alters it also changes that content, which outdates this + // file. let content = parse_html_fragment(&fragment.content)?; hydrate_xrefs_within(&cache_guard, &content, &walk_context.path)?; items.extend(content); @@ -2125,7 +2128,7 @@ fn new_element( children: Vec>, ) -> Rc { let node = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from(tag)), + name: QualName::new(None, ns!(html), LocalName::from(tag)), attrs: RefCell::new( attrs .into_iter() @@ -2288,8 +2291,8 @@ struct WalkContext { /// These are excluded from `facts`: they belong to the cache only after the /// file carrying them is written and re-read. auto_ids: HashSet, - /// Each cross-reference's `` node, kept so the generated contents - /// can be patched after the cache commit. + /// Each cross-reference's `` node, kept so the generated contents can + /// be patched after the cache commit. xrefs: Vec>, /// Each fragment found, with everything the later hydration phases need. fragments: Vec, @@ -2370,7 +2373,7 @@ fn hydrating_walk_node(node: &Rc, mut walk_context: WalkContext) -> io::Re // Make the parent node a `element_name` node, with the child's // text. let wc_mermaid = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from(*element_name)), + name: QualName::new(None, ns!(html), LocalName::from(*element_name)), attrs: RefCell::new(vec![]), template_contents: RefCell::new(None), mathml_annotation_xml_integration_point: false, @@ -2469,8 +2472,8 @@ fn hydrating_walk_node(node: &Rc, mut walk_context: WalkContext) -> io::Re }); } else { // A fragment without an id: display an error requesting the - // missing id, per the cache spec. Lacking an id, it - // can't be cached. + // missing id, per the cache spec. Lacking an id, it can't + // be cached. walk_context.fragments.push(FragmentHydration { node: child.clone(), id: String::new(), @@ -2585,7 +2588,7 @@ fn replace_math_node(child: &Rc, is_hydrate: bool) -> Option> { // When hydrating, there should only be a `class` attribute. if child_attrs_len == 1 { match attr_value_str { - "math math-inline" => Some(("\\(", "\\)", "math math-inline mceNonEditable")), + "math math-inline" => Some((r"\(", r"\)", "math math-inline mceNonEditable")), "math math-display" => Some(("$$", "$$", "math math-display mceNonEditable")), _ => None, } @@ -2642,7 +2645,7 @@ fn replace_math_node(child: &Rc, is_hydrate: bool) -> Option> { }); } let span = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from("span")), + name: QualName::new(None, ns!(html), LocalName::from("span")), attrs: RefCell::new(attrs_vec), template_contents: RefCell::new(None), mathml_annotation_xml_integration_point: false, @@ -2787,13 +2790,13 @@ fn dehydrating_walk_node(node: &Rc) { // Create `
text_child
                 // contents
`. let pre = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from("pre")), + name: QualName::new(None, ns!(html), LocalName::from("pre")), attrs: RefCell::new(vec![]), template_contents: RefCell::new(None), mathml_annotation_xml_integration_point: false, }); let code = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from("code")), + name: QualName::new(None, ns!(html), LocalName::from("code")), attrs: RefCell::new(vec![Attribute { name: QualName::new(None, Namespace::from(""), LocalName::from("class")), value: (*language_name).into(), @@ -2850,7 +2853,7 @@ fn dehydrating_walk_node(node: &Rc) { // Replace all `br` instances with a text node containing a // newline, preserving the surrounding `pre`/`code` structure. let new_code = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from("code")), + name: QualName::new(None, ns!(html), LocalName::from("code")), attrs: RefCell::new(code_attrs.clone()), template_contents: RefCell::new(None), mathml_annotation_xml_integration_point: false, @@ -2870,7 +2873,7 @@ fn dehydrating_walk_node(node: &Rc) { } } let new_pre = Node::new(NodeData::Element { - name: QualName::new(None, Namespace::from(""), LocalName::from("pre")), + name: QualName::new(None, ns!(html), LocalName::from("pre")), attrs: RefCell::new(vec![]), template_contents: RefCell::new(None), mathml_annotation_xml_integration_point: false, diff --git a/server/src/processing/cache-spec.md b/server/src/processing/cache-spec.md index f9be25c3..29ae8b7f 100644 --- a/server/src/processing/cache-spec.md +++ b/server/src/processing/cache-spec.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + Cache spec ========== @@ -24,7 +43,7 @@ the two. The cache hydrates data to the Client; the dehydration routes are responsible for removing all cache hydration artifacts. -## Cross references +

Cross references

A `` is a cross reference to a `Target` or a gather element. The `ref` attribute specifies the destination as an id; the cache then @@ -62,7 +81,7 @@ Details: * Cross references to fragments are not allowed; this would create circular dependencies (see ). -## Fragments and gather elements +

Fragments and gather elements

A gather element such as `

Bazzy things

` is a `Target` with the `data-gather` attribute. It becomes a list @@ -474,7 +493,7 @@ Overall shutdown sequence: 4. The consumer thread exits when either its consumer rx channel closes or the weak pointer fails to upgrade. -## Links in hydrated content +

Links in hydrated content

Some content, such as math, cross-references, fragments, and gather lists (see and ), sits diff --git a/server/src/processing/cache.rs b/server/src/processing/cache.rs index f4171bf7..4aaa1aba 100644 --- a/server/src/processing/cache.rs +++ b/server/src/processing/cache.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU @@ -115,8 +116,8 @@ pub struct Cache { pub(super) struct FileEntry { /// The file's stamp, taken when its content was read; the consumer /// reprocesses the file when it no longer matches. `None` if the file - /// doesn't exist, its metadata can't be determined, or the consumer's - /// last translation of it failed. + /// doesn't exist, its metadata can't be determined, or the consumer's last + /// translation of it failed. pub(super) stamp: Option, /// The status of this file. pub(super) status: FileStatus, @@ -461,12 +462,9 @@ pub struct ConnectionRegistration { /// needed to load the cache of a project which isn't cached. #[must_use] pub fn cache_map_capacity( - // The number of connections, - // \\(n\\). + // The number of connections, $n$. connections: usize, - // \\(n c + 1\\), where - // \\(c\\) is - // `LRU_ENTRIES_PER_CONNECTION`. + // $nc + 1$, where $c$ is `LRU_ENTRIES_PER_CONNECTION`. ) -> NonZeroUsize { NonZeroUsize::MIN.saturating_add(connections.saturating_mul(LRU_ENTRIES_PER_CONNECTION)) } @@ -595,9 +593,8 @@ impl Cache { ///

commit_file

/// - /// Apply the facts collected - /// from one file's DOM walk to the cache in a single transaction. This - /// satisfies several requirements: + /// Apply the facts collected from one file's DOM walk to the cache in a + /// single transaction. This satisfies several requirements: /// /// * Determine if any files containing cross-references need to be rebuilt /// due to changes in the `Target`s in this file: any target which was diff --git a/server/src/processing/tests.rs b/server/src/processing/tests.rs index 35996d2f..098507e9 100644 --- a/server/src/processing/tests.rs +++ b/server/src/processing/tests.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/src/translation-docs.md b/server/src/translation-docs.md new file mode 100644 index 00000000..fc82ddc1 --- /dev/null +++ b/server/src/translation-docs.md @@ -0,0 +1,216 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + +

Translation documentation

+ +The IDE extension client (IDE for short) and the CodeChat Editor Client (or +Editor for short) exchange messages with each other, mediated by the CodeChat +Server. The Server forwards messages from one client to the other, translating +as necessary (for example, between source code and the Editor format). This +module implements the protocol for this forwarding and translation logic; the +actuation translation algorithms are implemented in the processing module. + +Overview +-------- + +### Architecture + +It uses a set of queues to decouple websocket protocol activity from the core +processing needed to translate source code between a CodeChat Editor Client and +an IDE client. The following diagram illustrates this approach: + +```graphviz +digraph { +ccc -> client_task [ label = "websocket" dir = "both" ] +ccc -> http_task [ label = "HTTP\nrequest/response" dir = "both"] +client_task -> from_client +http_task -> http_to_client +http_to_client -> processing +processing -> http_from_client +http_from_client -> http_task +from_client -> processing +processing -> to_client +to_client -> client_task +ide -> ide_task [ dir = "both" ] +ide_task -> from_ide +from_ide -> processing +processing -> to_ide +to_ide -> ide_task +{ rank = same; client_task; http_task } +{ rank = same; to_client; from_client; http_from_client; http_to_client } +{ rank = same; to_ide; from_ide } +{ rank = max; ide } +ccc [ label = "CodeChat Editor\nClient"] +client_task [ label = "Client websocket\ntask"] +http_task [ label = "HTTP endpoint"] +from_client [ label = "queue from client" shape="rectangle"] +processing [ label = "Processing task" ] +to_client [ label = "queue to client" shape="rectangle"] +http_to_client [ label = "http queue to client" shape = "rectangle"] +http_from_client [ label = "oneshot from client" shape = "box"] +ide [ label = "CodeChat Editor\nIDE plugin"] +ide_task [ label = "IDE task" ] +from_ide [ label = "queue from IDE" shape="rectangle" ] +to_ide [ label = "queue to IDE" shape="rectangle" ] +} +``` + +The queues use multiple-sender, single receiver (mpsc) types. The exception to +this pattern is the HTTP endpoint. This endpoint is invoked with each HTTP +request, rather than operating as a single, long-running task. It sends the +request to the processing task using an mpsc queue; this request includes a +one-shot channel which enables the request to return a response to this specific +request instance. The endpoint then returns the provided response. + +### Protocol + +The following diagrams formally define the forwarding and translation protocol +which this module implements. + +* The startup phase loads the Client framework into a browser: + + ```mermaid + sequenceDiagram + participant IDE + participant Server + participant Client + note over IDE, Client: Startup + IDE ->> Server: Opened(IdeType) + Server ->> IDE: Result(String: OK) + Server ->> IDE: ClientHtml(String: HTML or URL) + IDE ->> Server: Result(String: OK) + note over IDE, Client: Open browser (Client framework HTML or URL) + loop + Client -> Server: HTTP request(/static URL) + Server -> Client: HTTP response(/static data) + end + ``` + +* If the current file in the IDE changes (including the initial startup, when + the change is from no file to the current file), or a link is followed in the + Client's iframe: + + ```mermaid + sequenceDiagram + participant IDE + participant Server + participant Client + alt IDE loads file + IDE ->> Client: CurrentFile(String: Path of main.py) + opt If Client document is dirty + Client ->> IDE: Update(String: contents of main.py) + IDE ->> Client: Response(OK) + end + Client ->> IDE: Response(OK) + else Client loads file + Client ->> IDE: CurrentFile(String: URL of main.py) + IDE ->> Client: Response(OK) + end + Client ->> Server: HTTP request(URL of main.py) + Server ->> IDE: LoadFile(String: path to main.py) + IDE ->> Server: Response(LoadFile(String: file contents of main.py)) + alt main.py is editable + Server ->> Client: HTTP response(contents of Client) + Server ->> Client: Update(String: contents of main.py) + Client ->> Server: Response(OK) + loop + Client ->> Server: HTTP request(URL of supporting file in main.py) + Server ->> IDE: LoadFile(String: path of supporting file) + alt Supporting file in IDE + IDE ->> Server: Response(LoadFile(contents of supporting file) + Server ->> Client: HTTP response(contents of supporting file) + else Supporting file not in IDE + IDE ->> Server: Response(LoadFile(None)) + Server ->> Client: HTTP response(contents of supporting file from /// filesystem) + end + end + else main.py not editable and not a project + Server ->> Client: HTTP response(contents of main.py) + else main.py not editable and is a project + Server ->> Client: HTTP response(contents of Client Simple Viewer) + Client ->> Server: HTTP request (URL?raw of main.py) + Server ->> Client: HTTP response(contents of main.py) + end + ``` + +* If the current file's contents in the IDE are edited: + + ```mermaid + sequenceDiagram + participant IDE + participant Server + participant Client + IDE ->> Server: Update(String: new text contents) + alt Main file is editable + Server ->> Client: Update(String: new Client contents) + else Main file is not editable + Server ->> Client: Update(String: new text contents) + note over Client: Reload the document showing the main file + Client ->> Server: HTTP request(URL of main file) + Server ->> IDE: LoadFile(String: path to main file) + IDE ->> Server: Response(LoadFile(String: file contents of main file)) + Server ->> Client: HTTP response(contents of main file) + end + Client ->> IDE: Response(String: OK) + ``` + +* If the current file's contents in the Client are edited, the Client sends the + IDE an `Update` with the revised contents. + +* If a change elsewhere in the project outdates the rendering of the current + file or of the project's TOC, the project's cache notifies the Server, which + re-renders it and sends any change to the Client: an `Update` for the current + file, or an `UpdateToc` for the TOC in the Client's sidebar. The Client + replies to each with a `Result`. Editing the TOC itself also sends an + `UpdateToc`. See `Connections` in the [cache spec](processing/cache-spec.md). + +* When the PC goes to sleep then wakes up, the IDE client and the Editor client + both reconnect to the websocket URL containing their assigned ID. + +* If the Editor client or the IDE client are closed, they close their websocket, + which sends a `Close` message to the other websocket, causes it to also close + and ending the session. + +* If the server is stopped (or crashes), both clients shut down after several + reconnect retries. + +### Editor-overlay filesystem + +When the Client displays a file provided by the IDE, that file may not exist in +the filesystem (a newly-created document), the IDE's content may be newer than +the filesystem content (an unsaved file), or the file may exist only in the +filesystem (for examples, images referenced by a file). The Client loads files +by sending HTTP requests to the Server with a URL which includes the path to the +desired file. Therefore, the Server must first ask the IDE if it has the +requested file; if so, it must deliver the IDE's file contents; if not, it must +load thee requested file from the filesystem. This process -- fetching from the +IDE if possible, then falling back to the filesystem -- defines the +editor-overlay filesystem. + +#### Message IDs + +The message system connects the IDE, Server, and Client; all three can serve as +the source or destination for a message. Any message sent should produce a +Response message in return. Therefore, we need globally unique IDs for each +message. To achieve this, the Server uses IDs that are multiples of 3 (0, 3, 6, +...), the Client multiples of 3 + 1 (1, 4, 7, ...) and the IDE multiples of 3 + +2 (2, 5, 8, ...). A double-precision floating point number (the standard +[numeric type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type) +in JavaScript) has a 53-bit mantissa, meaning IDs won't wrap around for a very +long time. diff --git a/server/src/translation.rs b/server/src/translation.rs index 7de7faec..cd3921c6 100644 --- a/server/src/translation.rs +++ b/server/src/translation.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU @@ -12,209 +13,12 @@ // // You should have received a copy of the GNU General Public License along with // the CodeChat Editor. If not, see -// [http://www.gnu.org/licenses](http://www.gnu.org/licenses). -//! `translation.rs` -- translate messages between the IDE and the Client -//! ===================================================================== +// [https://www.gnu.org/licenses](https://www.gnu.org/licenses). +//!

+//! translation.rs -- translate messages between the IDE and the Client +//!

//! -//! The IDE extension client (IDE for short) and the CodeChat Editor Client (or -//! Editor for short) exchange messages with each other, mediated by the -//! CodeChat Server. The Server forwards messages from one client to the other, -//! translating as necessary (for example, between source code and the Editor -//! format). This module implements the protocol for this forwarding and -//! translation logic; the actuation translation algorithms are implemented in -//! the processing module. -//! -//! Overview -//! -------- -//! -//! ### Architecture -//! -//! It uses a set of queues to decouple websocket protocol activity from the -//! core processing needed to translate source code between a CodeChat Editor -//! Client and an IDE client. The following diagram illustrates this approach: -//! -//! ```graphviz -//! digraph { -//! ccc -> client_task [ label = "websocket" dir = "both" ] -//! ccc -> http_task [ label = "HTTP\nrequest/response" dir = "both"] -//! client_task -> from_client -//! http_task -> http_to_client -//! http_to_client -> processing -//! processing -> http_from_client -//! http_from_client -> http_task -//! from_client -> processing -//! processing -> to_client -//! to_client -> client_task -//! ide -> ide_task [ dir = "both" ] -//! ide_task -> from_ide -//! from_ide -> processing -//! processing -> to_ide -//! to_ide -> ide_task -//! { rank = same; client_task; http_task } -//! { rank = same; to_client; from_client; http_from_client; http_to_client } -//! { rank = same; to_ide; from_ide } -//! { rank = max; ide } -//! ccc [ label = "CodeChat Editor\nClient"] -//! client_task [ label = "Client websocket\ntask"] -//! http_task [ label = "HTTP endpoint"] -//! from_client [ label = "queue from client" shape="rectangle"] -//! processing [ label = "Processing task" ] -//! to_client [ label = "queue to client" shape="rectangle"] -//! http_to_client [ label = "http queue to client" shape = "rectangle"] -//! http_from_client [ label = "oneshot from client" shape = "box"] -//! ide [ label = "CodeChat Editor\nIDE plugin"] -//! ide_task [ label = "IDE task" ] -//! from_ide [ label = "queue from IDE" shape="rectangle" ] -//! to_ide [ label = "queue to IDE" shape="rectangle" ] -//! } -//! ``` -//! -//! The queues use multiple-sender, single receiver (mpsc) types. The exception -//! to this pattern is the HTTP endpoint. This endpoint is invoked with each -//! HTTP request, rather than operating as a single, long-running task. It sends -//! the request to the processing task using an mpsc queue; this request -//! includes a one-shot channel which enables the request to return a response -//! to this specific request instance. The endpoint then returns the provided -//! response. -//! -//! ### Protocol -//! -//! The following diagrams formally define the forwarding and translation -//! protocol which this module implements. -//! -//! * The startup phase loads the Client framework into a browser: -//! -//! ```mermaid -//! sequenceDiagram -//! participant IDE -//! participant Server -//! participant Client -//! note over IDE, Client: Startup -//! IDE ->> Server: Opened(IdeType) -//! Server ->> IDE: Result(String: OK) -//! Server ->> IDE: ClientHtml(String: HTML or URL) -//! IDE ->> Server: Result(String: OK) -//! note over IDE, Client: Open browser (Client framework HTML or URL) -//! loop -//! Client -> Server: HTTP request(/static URL) -//! Server -> Client: HTTP response(/static data) -//! end -//! ``` -//! -//! * If the current file in the IDE changes (including the initial startup, -//! when the change is from no file to the current file), or a link is -//! followed in the Client's iframe: -//! -//! ```mermaid -//! sequenceDiagram -//! participant IDE -//! participant Server -//! participant Client -//! alt IDE loads file -//! IDE ->> Client: CurrentFile(String: Path of main.py) -//! opt If Client document is dirty -//! Client ->> IDE: Update(String: contents of main.py) -//! IDE ->> Client: Response(OK) -//! end -//! Client ->> IDE: Response(OK) -//! else Client loads file -//! Client ->> IDE: CurrentFile(String: URL of main.py) -//! IDE ->> Client: Response(OK) -//! end -//! Client ->> Server: HTTP request(URL of main.py) -//! Server ->> IDE: LoadFile(String: path to main.py) -//! IDE ->> Server: Response(LoadFile(String: file contents of main.py)) -//! alt main.py is editable -//! Server ->> Client: HTTP response(contents of Client) -//! Server ->> Client: Update(String: contents of main.py) -//! Client ->> Server: Response(OK) -//! loop -//! Client ->> Server: HTTP request(URL of supporting file in main.py) -//! Server ->> IDE: LoadFile(String: path of supporting file) -//! alt Supporting file in IDE -//! IDE ->> Server: Response(LoadFile(contents of supporting file) -//! Server ->> Client: HTTP response(contents of supporting file) -//! else Supporting file not in IDE -//! IDE ->> Server: Response(LoadFile(None)) -//! Server ->> Client: HTTP response(contents of supporting file from /// filesystem) -//! end -//! end -//! else main.py not editable and not a project -//! Server ->> Client: HTTP response(contents of main.py) -//! else main.py not editable and is a project -//! Server ->> Client: HTTP response(contents of Client Simple Viewer) -//! Client ->> Server: HTTP request (URL?raw of main.py) -//! Server ->> Client: HTTP response(contents of main.py) -//! end -//! ``` -//! -//! * If the current file's contents in the IDE are edited: -//! -//! ```mermaid -//! sequenceDiagram -//! participant IDE -//! participant Server -//! participant Client -//! IDE ->> Server: Update(String: new text contents) -//! alt Main file is editable -//! Server ->> Client: Update(String: new Client contents) -//! else Main file is not editable -//! Server ->> Client: Update(String: new text contents) -//! note over Client: Reload the document showing the main file -//! Client ->> Server: HTTP request(URL of main file) -//! Server ->> IDE: LoadFile(String: path to main file) -//! IDE ->> Server: Response(LoadFile(String: file contents of main file)) -//! Server ->> Client: HTTP response(contents of main file) -//! end -//! Client ->> IDE: Response(String: OK) -//! ``` -//! -//! * If the current file's contents in the Client are edited, the Client sends -//! the IDE an `Update` with the revised contents. -//! -//! * If a change elsewhere in the project outdates the rendering of the current -//! file or of the project's TOC, the project's cache notifies the Server, -//! which re-renders it and sends any change to the Client: an `Update` for -//! the current file, or an `UpdateToc` for the TOC in the Client's sidebar. -//! The Client replies to each with a `Result`. Editing the TOC itself also -//! sends an `UpdateToc`. See `Connections` in the -//! [cache spec](processing/cache-spec.md). -//! -//! * When the PC goes to sleep then wakes up, the IDE client and the Editor -//! client both reconnect to the websocket URL containing their assigned ID. -//! -//! * If the Editor client or the IDE client are closed, they close their -//! websocket, which sends a `Close` message to the other websocket, causes it -//! to also close and ending the session. -//! -//! * If the server is stopped (or crashes), both clients shut down after -//! several reconnect retries. -//! -//! ### Editor-overlay filesystem -//! -//! When the Client displays a file provided by the IDE, that file may not exist -//! in the filesystem (a newly-created document), the IDE's content may be newer -//! than the filesystem content (an unsaved file), or the file may exist only in -//! the filesystem (for examples, images referenced by a file). The Client loads -//! files by sending HTTP requests to the Server with a URL which includes the -//! path to the desired file. Therefore, the Server must first ask the IDE if it -//! has the requested file; if so, it must deliver the IDE's file contents; if -//! not, it must load thee requested file from the filesystem. This process -- -//! fetching from the IDE if possible, then falling back to the filesystem -- -//! defines the editor-overlay filesystem. -//! -//! #### Message IDs -//! -//! The message system connects the IDE, Server, and Client; all three can serve -//! as the source or destination for a message. Any message sent should produce -//! a Response message in return. Therefore, we need globally unique IDs for -//! each message. To achieve this, the Server uses IDs that are multiples of 3 -//! (0, 3, 6, ...), the Client multiples of 3 + 1 (1, 4, 7, ...) and the IDE -//! multiples of 3 + 2 (2, 5, 8, ...). A double-precision floating point number -//! (the standard -//! [numeric type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type) -//! in JavaScript) has a 53-bit mantissa, meaning IDs won't wrap around for a -//! very long time. +//! See . // Imports // ------- // @@ -457,8 +261,8 @@ struct TranslationTask { /// The channel on which that cache notifies this connection. cache_notify_tx: UnboundedSender, cache_notify_rx: UnboundedReceiver, - /// The TOC which the sidebar of the current file's page shows; `None` - /// until the sidebar loads it, or if the page has no sidebar. + /// The TOC which the sidebar of the current file's page shows; `None` until + /// the sidebar loads it, or if the page has no sidebar. sidebar_toc: Option, /// A map of `LoadFile` requests sent to the IDE, awaiting its response. load_file_requests: HashMap, @@ -1002,8 +806,8 @@ impl TranslationTask { }; // Process the file contents. Since VSCode doesn't have a PDF viewer, - // determine if this is a PDF file. (TODO: look at the magic number also - // -- "%PDF"). + // determine if this is a PDF file. (TODO: look at the magic number + // also -- "%PDF"). let use_pdf_js = http_request.file_path.extension() == Some(OsStr::new("pdf")); let ((simple_http_response, served_contents), file_contents) = match file_contents_option { Some((file_contents, new_version)) => { @@ -1081,9 +885,9 @@ impl TranslationTask { message: EditorMessageContents::Update(update) })); self.id += MESSAGE_ID_INCREMENT; - // The Client now has the current file's full contents. Set - // this only here: results of other `LoadFile` requests, such as - // the TOC's, may arrive before the current file's and must not + // The Client now has the current file's full contents. Set this + // only here: results of other `LoadFile` requests, such as the + // TOC's, may arrive before the current file's and must not // enable diffs against the previous file's contents. If these // contents came from disk because the IDE lacks the file, diffs // to the IDE are still safe: VSCode rejects any update to a @@ -1324,11 +1128,11 @@ impl TranslationTask { } /// Determine if a re-translation of the current file differs from the - /// Client's contents, `self.code_mirror_doc` / `self.code_mirror_doc_blocks`. - /// Note that strict HTML comparison fails, since TinyMCE modifies - /// whitespace and some characters; for example, `👨‍👦` becomes `👨‍👦` - /// after processing by TinyMCE. Therefore, HTML processed by TinyMCE needs - /// to be normalized before it can be compared. + /// Client's contents, `self.code_mirror_doc` / + /// `self.code_mirror_doc_blocks`. Note that strict HTML comparison fails, + /// since TinyMCE modifies whitespace and some characters; for example, `👨‍👦` + /// becomes `👨‍👦` after processing by TinyMCE. Therefore, HTML + /// processed by TinyMCE needs to be normalized before it can be compared. /// /// 1. Document-only: HTML is stored in `.doc`; ignore `.doc_blocks`. /// 2. Normal mode: HTML is stored in `.doc_blocks`; perform a binary @@ -1709,8 +1513,8 @@ impl TranslationTask { true } - /// Re-translate the current file after its project's cache reports that - /// its rendered output is outdated -- because another connection changed a + /// Re-translate the current file after its project's cache reports that its + /// rendered output is outdated -- because another connection changed a /// target this file cross-references, for example -- then send any change /// to the Client. The source is unchanged, so the IDE isn't updated. async fn re_translate_current_file( @@ -1823,8 +1627,8 @@ impl TranslationTask { ); queue_send_func!(self.to_ide_tx.send(EditorMessage { id: self.id, - // As when the sidebar loaded it, the TOC isn't loaded as the file to - // edit, so it isn't assigned a version. + // As when the sidebar loaded it, the TOC isn't loaded as the file + // to edit, so it isn't assigned a version. message: EditorMessageContents::LoadFile(toc_path.clone(), false), })); self.load_file_requests diff --git a/server/src/webserver.rs b/server/src/webserver.rs index e90c79b9..356c959a 100644 --- a/server/src/webserver.rs +++ b/server/src/webserver.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU @@ -764,6 +765,15 @@ pub fn get_client_framework(

The CodeChat Editor

Waiting for initial render. Switch the active source code window to begin.

+

+ The CodeChat Editor, a word processor for software developers.
+ Copyright (C) 2024-2026 Bryan A. Jones. +

+

+ This program comes with ABSOLUTELY NO WARRANTY; for details see the license. + This is free software, and you are welcome to redistribute it + under certain conditions. +

diff --git a/server/src/webserver/tests.rs b/server/src/webserver/tests.rs index d83a56bb..0f91c397 100644 --- a/server/src/webserver/tests.rs +++ b/server/src/webserver/tests.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall.rs b/server/tests/overall.rs index 58dd117d..633f0200 100644 --- a/server/tests/overall.rs +++ b/server/tests/overall.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/common/mod.rs b/server/tests/overall/common/mod.rs index 6df5b7bd..e14f89f1 100644 --- a/server/tests/overall/common/mod.rs +++ b/server/tests/overall/common/mod.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_1.rs b/server/tests/overall/overall_1.rs index de51e73f..5c946605 100644 --- a/server/tests/overall/overall_1.rs +++ b/server/tests/overall/overall_1.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_2.rs b/server/tests/overall/overall_2.rs index d5c7d6d1..663ce9a1 100644 --- a/server/tests/overall/overall_2.rs +++ b/server/tests/overall/overall_2.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_3.rs b/server/tests/overall/overall_3.rs index 66127e88..28a60267 100644 --- a/server/tests/overall/overall_3.rs +++ b/server/tests/overall/overall_3.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_4.rs b/server/tests/overall/overall_4.rs index 7f83a061..eb953a79 100644 --- a/server/tests/overall/overall_4.rs +++ b/server/tests/overall/overall_4.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_5.rs b/server/tests/overall/overall_5.rs index 646ec37f..4170bcb0 100644 --- a/server/tests/overall/overall_5.rs +++ b/server/tests/overall/overall_5.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/server/tests/overall/overall_a11y.rs b/server/tests/overall/overall_a11y.rs index 29eda8e3..94e8e5a1 100644 --- a/server/tests/overall/overall_a11y.rs +++ b/server/tests/overall/overall_a11y.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/test_utils/Cargo.toml b/test_utils/Cargo.toml index a2c10c8a..ef6ee686 100644 --- a/test_utils/Cargo.toml +++ b/test_utils/Cargo.toml @@ -1,3 +1,24 @@ +# The CodeChat Editor, a word processor for software developers.
Copyright +# (C) 2024-2026 Bryan A. Jones. +# +# This file is part of the CodeChat Editor. +# +# The CodeChat Editor is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# The CodeChat Editor is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# the CodeChat Editor. If not, see +# [http://www.gnu.org/licenses](http://www.gnu.org/licenses). +# +# `Cargo.toml` -- Rust build/package management config for test utilities +# ======================================================================== [package] edition.workspace = true name = "test_utils" diff --git a/test_utils/readme.md b/test_utils/readme.md index f3eadf9d..d263fe5b 100644 --- a/test_utils/readme.md +++ b/test_utils/readme.md @@ -1,3 +1,22 @@ +The CodeChat Editor, a word processor for software developers.
Copyright (C) +2024-2026 Bryan A. Jones. + +This file is part of the CodeChat Editor. + +The CodeChat Editor is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +The CodeChat Editor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with the +CodeChat Editor. If not, see +[http://www.gnu.org/licenses](http://www.gnu.org/licenses). + `readme.md` - Overview of test utilities ======================================== diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs index 988c520f..64639ac0 100644 --- a/test_utils/src/lib.rs +++ b/test_utils/src/lib.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/test_utils/src/test_macros.rs b/test_utils/src/test_macros.rs index 0df4677e..cb3219c1 100644 --- a/test_utils/src/test_macros.rs +++ b/test_utils/src/test_macros.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/test_utils/src/test_utils.rs b/test_utils/src/test_utils.rs index 501e606c..3ab8a2a2 100644 --- a/test_utils/src/test_utils.rs +++ b/test_utils/src/test_utils.rs @@ -1,4 +1,5 @@ -// Copyright (C) 2026 Bryan A. Jones. +// The CodeChat Editor, a word processor for software developers.
Copyright +// (C) 2024-2026 Bryan A. Jones. // // This file is part of the CodeChat Editor. The CodeChat Editor is free // software: you can redistribute it and/or modify it under the terms of the GNU diff --git a/toc.md b/toc.md index cc1343c0..5803bdc7 100644 --- a/toc.md +++ b/toc.md @@ -35,7 +35,8 @@ Implementation * [Capture events schema](server/scripts/capture_events_schema.sql) * [ide.rs](server/src/ide.rs) * [vscode.rs](server/src/ide/vscode.rs) - * [translation.rs](server/src/translation.rs) + * + * * [processing.rs](server/src/processing.rs) * [Cache spec](server/src/processing/cache-spec.md) * [cache.rs](server/src/processing/cache.rs) @@ -101,7 +102,7 @@ Implementation * [cli.rs](extensions/standalone/tests/cli.rs) * [Cargo.toml](extensions/standalone/Cargo.toml) * Development tools - * [CLAUDE.md](CLAUDE.md) + * [AGENTS.md](AGENTS.md) * Builder * [builder/Cargo.toml](builder/Cargo.toml) * [builder/src/main.rs](builder/src/main.rs)