diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 891c6ecb..c65a2b3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: # we specify bash to get pipefail; it guards against the `curl` command # failing. otherwise `sh` won't catch that `curl` returned non-0 shell: bash - run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.30.2/cargo-dist-installer.sh | sh" + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.30.3/cargo-dist-installer.sh | sh" - name: Cache dist uses: actions/upload-artifact@v4 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index c5172db5..a5bd154a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,23 @@ Changelog * No changes. +Version 0.1.46 -- 2025-Dec-15 +-------------------------------------------------------------------------------- + +* Avoid spaces disappearing in Client when editing lists. +* Improve speed of convert +* Improve Client error reporting. + +Version 0.1.45 -- 2025-Dec-11 +-------------------------------------------------------------------------------- + +* Fix loss of editing in the Client when in document-only mode. +* Fix data corruption in the Client when in document-only mode and edits are + made in both the IDE and Client. +* Fix loss of autosave when making GUI-based edits in the Client. +* Correctly retain Client cursor position during IDE edits. +* Correctly translate table cells containing blocks from HTML to Markdown. + Version 0.1.44 -- 2025-Dec-09 -------------------------------------------------------------------------------- diff --git a/README.md b/README.md index d9d35962..2db004a5 100644 --- a/README.md +++ b/README.md @@ -159,14 +159,14 @@ graph TD; A --> B; -The [Mermaid live editor](https://mermaid.live/) provide an focused environment for creating Mermaid chart. +The [Mermaid live editor](https://mermaid.live/) provide an focused environment +for creating Mermaid chart. ### Graphviz The CodeChat Editor supports diagrams created by [Graphviz](https://graphviz.org/). For example, -
[current_metadata](#current_metadata) from the
// provided `code_chat_for_web` struct and store it as a global variable.
@@ -264,10 +247,8 @@ const _open_lp = async (
// [handling editor events](https://www.tiny.cloud/docs/tinymce/6/events/#handling-editor-events),
// this is how to create a TinyMCE event handler.
setup: (editor: Editor) => {
- // The
- // [editor core events list](https://www.tiny.cloud/docs/tinymce/6/events/#editor-core-events)
- // includes the`Dirty` event.
- editor.on("Dirty", (_event: Event) => {
+ editor.on("dirty", () => {
+ tinymce.activeEditor!.setDirty(false);
is_dirty = true;
startAutosaveTimer();
});
@@ -275,17 +256,19 @@ const _open_lp = async (
});
tinymce.activeEditor!.focus();
} else {
- // Save and restore cursor/scroll location after an update per the
- // [docs](https://www.tiny.cloud/docs/tinymce/6/apis/tinymce.dom.bookmarkmanager).
- // However, this doesn't seem to work for the cursor location.
- // Perhaps when TinyMCE normalizes the document, this gets lost?
- const bm = tinymce.activeEditor!.selection.getBookmark();
+ // Save the cursor location before the update, then restore it
+ // afterwards, if TinyMCE has focus.
+ const sel = tinymce.activeEditor!.hasFocus()
+ ? saveSelection()
+ : undefined;
doc_content =
"Plain" in source
? source.Plain.doc
: apply_diff_str(doc_content, source.Diff.doc);
tinymce.activeEditor!.setContent(doc_content);
- tinymce.activeEditor!.selection.moveToBookmark(bm);
+ if (sel !== undefined) {
+ restoreSelection(sel);
+ }
}
mathJaxTypeset(codechat_body);
scroll_to_line(cursor_line, scroll_line);
@@ -309,7 +292,7 @@ const _open_lp = async (
};
const save_lp = (is_dirty: boolean) => {
- let update: UpdateMessageContents = {
+ const update: UpdateMessageContents = {
// The Framework will fill in this value.
file_path: "",
};
@@ -321,7 +304,7 @@ const save_lp = (is_dirty: boolean) => {
// Add the contents only if the document is dirty.
if (is_dirty) {
- /// @ts-expect-error
+ /// @ts-expect-error("Declare here; it will be completed later.")
let code_mirror_diffable: CodeMirrorDiffable = {};
if (is_doc_only()) {
// Untypeset all math before saving the document.
@@ -330,14 +313,14 @@ const save_lp = (is_dirty: boolean) => {
) as HTMLDivElement;
mathJaxUnTypeset(codechat_body);
// To save a document only, simply get the HTML from the only Tiny
- // MCE div.
- const html = tinymce.activeEditor!.save();
+ // MCE div. Update the `doc_contents` to stay in sync with the Server.
+ doc_content = tinymce.activeEditor!.save();
(
code_mirror_diffable as {
Plain: CodeMirror;
}
).Plain = {
- doc: html,
+ doc: doc_content,
doc_blocks: [],
};
// Retypeset all math after saving the document.
@@ -356,11 +339,104 @@ const save_lp = (is_dirty: boolean) => {
return update;
};
+export const saveSelection = () => {
+ // Changing the text inside TinyMCE causes it to loose a selection tied to a
+ // specific node. So, instead store the selection as an array of indices in
+ // the childNodes array of each element: for example, a given selection is
+ // element 10 of the root TinyMCE div's children (selecting an ol tag),
+ // element 5 of the ol's children (selecting the last li tag), element 0 of
+ // the li's children (a text node where the actual click landed; the offset
+ // in this node is placed in `selection_offset`.)
+ const sel = window.getSelection();
+ const selection_path = [];
+ const selection_offset = sel?.anchorOffset;
+ if (sel?.anchorNode) {
+ // Find a path from the selection back to the containing div.
+ for (
+ let current_node = sel.anchorNode, is_first = true;
+ // Continue until we find the div which contains the doc block
+ // contents: either it's not an element (such as a div), ...
+ current_node.nodeType !== Node.ELEMENT_NODE ||
+ // or it's not the doc block contents div.
+ (!(current_node as Element).classList.contains(
+ "CodeChat-doc-contents",
+ ) &&
+ // Sometimes, the parent of a custom node (`wc-mermaid`) skips the TinyMCE div and returns the overall div. I don't know why.
+ !(current_node as Element).classList.contains("CodeChat-doc"));
+ current_node = current_node.parentNode!, is_first = false
+ ) {
+ // Store the index of this node in its' parent list of child
+ // nodes/children. Use `childNodes` on the first iteration, since
+ // the selection is often in a text node, which isn't in the
+ // `parents` list. However, using `childNodes` all the time causes
+ // trouble when reversing the selection -- sometimes, the
+ // `childNodes` change based on whether text nodes (such as a
+ // newline) are included are not after tinyMCE parses the content.
+ const p = current_node.parentNode;
+ // In case we go off the rails, give up if there are no more parents.
+ if (p === null) {
+ return {
+ selection_path: [],
+ selection_offset: 0,
+ };
+ }
+ selection_path.unshift(
+ Array.prototype.indexOf.call(
+ is_first ? p.childNodes : p.children,
+ current_node,
+ ),
+ );
+ }
+ }
+ return { selection_path, selection_offset };
+};
+
+// Restore the selection produced by `saveSelection` to the active TinyMCE
+// instance.
+export const restoreSelection = ({
+ selection_path,
+ selection_offset,
+}: {
+ selection_path: number[];
+ selection_offset?: number;
+}) => {
+ // Copy the selection over to TinyMCE by indexing the selection path to find
+ // the selected node.
+ if (selection_path.length && typeof selection_offset === "number") {
+ let selection_node = tinymce.activeEditor!.getContentAreaContainer();
+ for (
+ ;
+ selection_path.length &&
+ // If something goes wrong, bail out instead of producing
+ // exceptions.
+ selection_node !== undefined;
+ selection_node =
+ // As before, use the more-consistent `children` except for the
+ // last element, where we might be selecting a `text` node.
+ (
+ selection_path.length > 1
+ ? selection_node.children
+ : selection_node.childNodes
+ )[selection_path.shift()!]! as HTMLElement
+ );
+ // Exit on failure.
+ if (selection_node === undefined) {
+ return;
+ }
+ // Use that to set the selection.
+ tinymce.activeEditor!.selection.setCursorLocation(
+ selection_node,
+ // In case of edits, avoid an offset past the end of the node.
+ Math.min(selection_offset, selection_node.nodeValue?.length ?? 0),
+ );
+ }
+};
+
// Per
// [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples),
// here's the least bad way to choose between the control key and the command
// key.
-const os_is_osx =
+const _os_is_osx =
navigator.platform.indexOf("Mac") === 0 || navigator.platform === "iPhone"
? true
: false;
@@ -378,7 +454,7 @@ const on_save = async (only_if_dirty: boolean = false) => {
console_log(
"CodeChat Editor Client: sent Update - saving document/updating cursor location.",
);
- await new Promise(async (resolve) => {
+ await new Promise((resolve) => {
webSocketComm.send_message({ Update: save_lp(is_dirty) }, () =>
resolve(0),
);
@@ -491,8 +567,7 @@ const on_click = (event: MouseEvent) => {
const save_then_navigate = (codeChatEditorUrl: URL) => {
on_save(true).then((_value) => {
// Avoid recursion!
- /// @ts-ignore
- navigation.removeEventListener("navigate", on_navigate);
+ window.navigation.removeEventListener("navigate", on_navigate);
parent.window.CodeChatEditorFramework.webSocketComm.current_file(
codeChatEditorUrl,
);
@@ -509,6 +584,7 @@ const scroll_to_line = (cursor_line?: number, scroll_line?: number) => {
}
};
+/*eslint-disable-next-line @typescript-eslint/no-explicit-any */
export const console_log = (...args: any) => {
if (DEBUG_ENABLED) {
console.log(...args);
@@ -534,12 +610,10 @@ export const on_error = (event: Event) => {
// namespace.
on_dom_content_loaded(async () => {
// Intercept links in this document to save before following the link.
- /// @ts-ignore
- navigation.addEventListener("navigate", on_navigate);
+ window.navigation.addEventListener("navigate", on_navigate);
const ccb = document.getElementById("CodeChat-sidebar") as
| HTMLIFrameElement
| undefined;
- /// @ts-ignore
ccb?.contentWindow?.navigation.addEventListener("navigate", on_navigate);
document.addEventListener("click", on_click);
// Provide basic error reporting for uncaught errors.
diff --git a/client/src/CodeChatEditorFramework.mts b/client/src/CodeChatEditorFramework.mts
index 8a65f9d4..69b7634e 100644
--- a/client/src/CodeChatEditorFramework.mts
+++ b/client/src/CodeChatEditorFramework.mts
@@ -100,7 +100,7 @@ class WebSocketComm {
// The `ReconnectingWebSocket` doesn't provide ALL the `WebSocket`
// methods. Ignore this, since we can't use `ReconnectingWebSocket` as a
// type.
- /// @ts-ignore
+ /// @ts-expect-error("This is legacy, third-party code.")
this.ws = new ReconnectingWebSocket!(ws_url);
// Identify this client on connection.
this.ws.onopen = () => {
@@ -139,7 +139,7 @@ class WebSocketComm {
// Process this message.
switch (key) {
- case "Update":
+ case "Update": {
// Load this data in.
const current_update = value as UpdateMessageContents;
// The rest of this should run after all other messages have
@@ -228,8 +228,9 @@ class WebSocketComm {
this.send_result(id);
});
break;
+ }
- case "CurrentFile":
+ case "CurrentFile": {
// Note that we can ignore `value[1]` (if the file is text
// or binary); the server only sends text files here.
const current_file = value[0] as string;
@@ -263,8 +264,9 @@ class WebSocketComm {
this.send_result(id);
});
break;
+ }
- case "Result":
+ case "Result": {
// Cancel the timer for this message and remove it from
// `pending_messages`.
const pending_message = this.pending_messages[id];
@@ -284,8 +286,9 @@ class WebSocketComm {
);
}
break;
+ }
- default:
+ default: {
const msg = `Received unhandled message ${key}(${format_struct(
value,
)})`;
@@ -296,11 +299,14 @@ class WebSocketComm {
)})`,
});
break;
+ }
}
};
}
+ /*eslint-disable-next-line @typescript-eslint/no-explicit-any */
send = (data: any) => this.ws.send(data);
+ /*eslint-disable-next-line @typescript-eslint/no-explicit-any */
close = (...args: any) => this.ws.close(...args);
set_root_iframe_src = (url: string) => {
@@ -408,7 +414,7 @@ const set_content = async (
cursor_line?: number,
scroll_line?: number,
) => {
- let client = get_client();
+ const client = get_client();
if (client === undefined) {
// See if this is the [simple viewer](#Client-simple-viewer). Otherwise,
// it's just the bare document to replace.
@@ -475,7 +481,7 @@ declare global {
CodeChatEditorFramework: {
webSocketComm: WebSocketComm;
};
- CodeChatEditor_test: any;
+ CodeChatEditor_test: unknown;
}
}
@@ -488,6 +494,7 @@ const show_toast = (text: string) => {
};
// Format a complex data structure as a string when in debug mode.
+/*eslint-disable-next-line @typescript-eslint/no-explicit-any */
export const format_struct = (complex_data_structure: any): string =>
DEBUG_ENABLED
? JSON.stringify(complex_data_structure).substring(
@@ -496,6 +503,7 @@ export const format_struct = (complex_data_structure: any): string =>
)
: "";
+/*eslint-disable-next-line @typescript-eslint/no-explicit-any */
const report_error = (text: string, ...objs: any) => {
console.error(text);
if (objs !== undefined) {
diff --git a/client/src/CodeMirror-integration.mts b/client/src/CodeMirror-integration.mts
index 659c4f2c..18eda907 100644
--- a/client/src/CodeMirror-integration.mts
+++ b/client/src/CodeMirror-integration.mts
@@ -83,9 +83,15 @@ import { rust } from "@codemirror/lang-rust";
import { sql } from "@codemirror/lang-sql";
import { yaml } from "@codemirror/lang-yaml";
import { Editor, init, tinymce } from "./tinymce-config.mjs";
+import { EditorEvent, Events } from "tinymce";
// ### Local
-import { set_is_dirty, startAutosaveTimer } from "./CodeChatEditor.mjs";
+import {
+ set_is_dirty,
+ startAutosaveTimer,
+ saveSelection,
+ restoreSelection,
+} from "./CodeChatEditor.mjs";
import {
CodeChatForWeb,
CodeMirror,
@@ -100,7 +106,6 @@ import { show_toast } from "./show_toast.mjs";
// Globals
// -----------------------------------------------------------------------------
let current_view: EditorView;
-let tinymce_singleton: Editor | undefined;
// This indicates that a call to `on_dirty` is scheduled, but hasn't run yet.
let on_dirty_scheduled = false;
@@ -112,6 +117,8 @@ const decorationOptions = {
declare global {
interface Window {
+ // Tye `#types/MathJax` definitions are out of date.
+ /*eslint-disable-next-line @typescript-eslint/no-explicit-any */
MathJax: any;
}
}
@@ -123,6 +130,12 @@ const docBlockFreezeAnnotation = Annotation.define
+#
+# The text which creates this grid is:
+#
+# ```
+# 00
+# 0.
+# ```
+#
+# Store this an an array of lines; each lines contains these characters.
+# Therefore, `line[y][x]` gives the cell at the coordinate $(𝑥,𝑦)$ (note the
+# reversed order).
+line = []
+for y in range(height):
+ line.append(input())
+
+# Processing and output
+# ------------------------------------------------------------------------------
+#
+# From the rules:
+#
+# > To do this, you must find each (x1,y1) coordinates containing a node, and
+# > display the (x2,y2) coordinates of the next node to the right, and the
+# > (x3,y3) coordinates of the next node to the bottom within the grid.
+# >
+# > If a neighbor does not exist, you must output the coordinates -1 -1 instead
+# > of (x2,y2) and/or (x3,y3).
+#
+# ### Approach
+#
+# Terminology:
+#
+# * A cell is one point in the grid. It may be empty or occupied.
+# * A node is an occupied cell.
+#
+# Variable naming: based on the rules, define:
+#
+# * (`x1`, `y1`) is the coordinate of an (occupied) node.
+# * (`x2`, `y2`) is the coordinate of the next node to the right.
+# * (`x3`, `y3`) is the coordinates of the next node to the bottom.
+#
+# ### Implementation
+#
+# * Loop through each cell. If it's occupied (a node):
+#
+# * Look for a node to its right; if not found, return coordinates of
+# $(−1,−1)$.
+# * Look for a node to the bottom; if not found, return coordinates of
+# $(−1,−1)$.
+for x1 in range(width):
+ for y1 in range(height):
+ if line[y1][x1] == "0":
+ # This cell is occupied. First, search for the next node to the
+ # right (note the `+ 1`) with the same y coordinate but a greater x
+ # coordinate:
+ y2 = y1
+ for x2 in range(x1 + 1, width):
+ if line[y2][x2] == "0":
+ break
+ else:
+ # This runs only if we didn't find an occupied node.
+ x2 = -1
+ y2 = -1
+
+ # Do the same thing, but along the y axis.
+ x3 = x1
+ for y3 in range(y1 + 1, height):
+ if line[y3][x3] == "0":
+ break
+ else:
+ x3 = -1
+ y3 = -1
+
+ print(f"{x1} {y1} {x2} {y2} {x3} {y3}")
\ No newline at end of file
diff --git a/extensions/VSCode/.eslintrc.yml b/extensions/VSCode/.eslintrc.yml
deleted file mode 100644
index 591075ff..00000000
--- a/extensions/VSCode/.eslintrc.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2025 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/).
-#
-# `.eslintrc.yml` - Configure ESLint for this project
-# ==============================================================================
-env:
- commonjs: true
- node: true
-extends:
- - standard
- # See the
- # [ESLint config prettier docs](https://github.com/prettier/eslint-config-prettier#installation)
- # and its parent link,
- # [integrating Prettier with linters](https://prettier.io/docs/en/integrating-with-linters.html).
- - prettier
-parser: "@typescript-eslint/parser"
-parserOptions:
- ecmaVersion: latest
-plugins:
- - "@typescript-eslint"
-rules:
- camelcase: off
- # TypeScript already enforces this; otherwise, eslint complains that
- # `NodeJS` is undefined. See
- # [this GitHub issue](https://github.com/Chatie/eslint-config/issues/45#issuecomment-1003990077).
- no-undef: off
diff --git a/extensions/VSCode/Cargo.lock b/extensions/VSCode/Cargo.lock
index 81a7d93c..e67fccf7 100644
--- a/extensions/VSCode/Cargo.lock
+++ b/extensions/VSCode/Cargo.lock
@@ -72,7 +72,7 @@ dependencies = [
"mime",
"percent-encoding",
"pin-project-lite",
- "rand 0.9.2",
+ "rand",
"sha1",
"smallvec",
"tokio",
@@ -345,6 +345,27 @@ version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+[[package]]
+name = "assert_fs"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652f6cb1f516886fcfee5e7a5c078b9ade62cfcb889524efe5a64d682dd27a9"
+dependencies = [
+ "anstyle",
+ "doc-comment",
+ "globwalk",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
+[[package]]
+name = "assertables"
+version = "9.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59051ec02907378a67b0ba1b8631121f5388c8dbbb3cec8c749d8f93c2c3c211"
+
[[package]]
name = "async-trait"
version = "0.1.89"
@@ -410,6 +431,16 @@ dependencies = [
"alloc-stdlib",
]
+[[package]]
+name = "bstr"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
[[package]]
name = "bumpalo"
version = "3.19.0"
@@ -522,7 +553,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
[[package]]
name = "codechat-editor-server"
-version = "0.1.44"
+version = "0.1.46"
dependencies = [
"actix-files",
"actix-http",
@@ -540,13 +571,13 @@ dependencies = [
"dunce",
"futures-util",
"htmd",
- "html5ever 0.36.1",
+ "html5ever",
"imara-diff",
"indoc",
"lazy_static",
"log",
"log4rs",
- "markup5ever_rcdom 0.36.0+unofficial",
+ "markup5ever_rcdom",
"mime",
"mime_guess",
"minreq",
@@ -555,12 +586,13 @@ dependencies = [
"path-slash",
"pest",
"pest_derive",
- "phf 0.13.1",
+ "phf",
"pulldown-cmark 0.13.0",
- "rand 0.9.2",
+ "rand",
"regex",
"serde",
"serde_json",
+ "test_utils",
"thiserror 2.0.17",
"tokio",
"tokio-postgres",
@@ -573,7 +605,7 @@ dependencies = [
[[package]]
name = "codechat-editor-vscode-extension"
-version = "0.1.44"
+version = "0.1.46"
dependencies = [
"codechat-editor-server",
"log",
@@ -659,6 +691,31 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
[[package]]
name = "crypto-common"
version = "0.1.7"
@@ -723,6 +780,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7"
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
[[package]]
name = "digest"
version = "0.10.7"
@@ -745,6 +808,12 @@ dependencies = [
"syn 2.0.111",
]
+[[package]]
+name = "doc-comment"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "780955b8b195a21ab8e4ac6b60dd1dbdcec1dc6c51c0617964b08c81785e12c9"
+
[[package]]
name = "dprint-core"
version = "0.67.4"
@@ -820,6 +889,16 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "fallible-iterator"
version = "0.2.0"
@@ -1008,6 +1087,30 @@ dependencies = [
"wasip2",
]
+[[package]]
+name = "globset"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags 2.10.0",
+ "ignore",
+ "walkdir",
+]
+
[[package]]
name = "h2"
version = "0.3.27"
@@ -1062,22 +1165,11 @@ dependencies = [
[[package]]
name = "htmd"
version = "0.5.0"
-source = "git+https://github.com/bjones1/htmd.git?branch=math-support#af6bc129874d33eb7f4d7fb6f0a39b04c668b2f5"
-dependencies = [
- "html5ever 0.35.0",
- "markup5ever_rcdom 0.35.0+unofficial",
- "phf 0.13.1",
-]
-
-[[package]]
-name = "html5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4"
+source = "git+https://github.com/bjones1/htmd.git?branch=dom-interface#a8a3c34143ad5641baa784e43bc73668dbbebc2f"
dependencies = [
- "log",
- "markup5ever 0.35.0",
- "match_token",
+ "html5ever",
+ "markup5ever_rcdom",
+ "phf",
]
[[package]]
@@ -1087,7 +1179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e"
dependencies = [
"log",
- "markup5ever 0.36.1",
+ "markup5ever",
]
[[package]]
@@ -1251,6 +1343,22 @@ dependencies = [
"icu_properties",
]
+[[package]]
+name = "ignore"
+version = "0.4.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
[[package]]
name = "imara-diff"
version = "0.2.0"
@@ -1421,6 +1529,12 @@ dependencies = [
"redox_syscall",
]
+[[package]]
+name = "linux-raw-sys"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+
[[package]]
name = "litemap"
version = "0.8.1"
@@ -1485,7 +1599,7 @@ dependencies = [
"log-mdc",
"mock_instant",
"parking_lot",
- "rand 0.9.2",
+ "rand",
"serde",
"serde-value",
"serde_json",
@@ -1503,17 +1617,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
-[[package]]
-name = "markup5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3"
-dependencies = [
- "log",
- "tendril",
- "web_atoms 0.1.3",
-]
-
[[package]]
name = "markup5ever"
version = "0.36.1"
@@ -1522,19 +1625,7 @@ checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c"
dependencies = [
"log",
"tendril",
- "web_atoms 0.2.0",
-]
-
-[[package]]
-name = "markup5ever_rcdom"
-version = "0.35.0+unofficial"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8bcd53df4748257345b8bc156d620340ce0f015ec1c7ef1cff475543888a31d"
-dependencies = [
- "html5ever 0.35.0",
- "markup5ever 0.35.0",
- "tendril",
- "xml5ever 0.35.0",
+ "web_atoms",
]
[[package]]
@@ -1543,21 +1634,10 @@ version = "0.36.0+unofficial"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e5fc8802e8797c0dfdd2ce5c21aa0aee21abbc7b3b18559100651b3352a7b63"
dependencies = [
- "html5ever 0.36.1",
- "markup5ever 0.36.1",
+ "html5ever",
+ "markup5ever",
"tendril",
- "xml5ever 0.36.1",
-]
-
-[[package]]
-name = "match_token"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.111",
+ "xml5ever",
]
[[package]]
@@ -1884,15 +1964,6 @@ dependencies = [
"sha2",
]
-[[package]]
-name = "phf"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
-dependencies = [
- "phf_shared 0.11.3",
-]
-
[[package]]
name = "phf"
version = "0.13.1"
@@ -1900,38 +1971,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
dependencies = [
"phf_macros",
- "phf_shared 0.13.1",
+ "phf_shared",
"serde",
]
-[[package]]
-name = "phf_codegen"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
-dependencies = [
- "phf_generator 0.11.3",
- "phf_shared 0.11.3",
-]
-
[[package]]
name = "phf_codegen"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
-dependencies = [
- "phf_shared 0.11.3",
- "rand 0.8.5",
+ "phf_generator",
+ "phf_shared",
]
[[package]]
@@ -1941,7 +1992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
dependencies = [
"fastrand",
- "phf_shared 0.13.1",
+ "phf_shared",
]
[[package]]
@@ -1950,22 +2001,13 @@ version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
+ "phf_generator",
+ "phf_shared",
"proc-macro2",
"quote",
"syn 2.0.111",
]
-[[package]]
-name = "phf_shared"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
-dependencies = [
- "siphasher",
-]
-
[[package]]
name = "phf_shared"
version = "0.13.1"
@@ -2006,7 +2048,7 @@ dependencies = [
"hmac",
"md-5",
"memchr",
- "rand 0.9.2",
+ "rand",
"sha2",
"stringprep",
]
@@ -2053,6 +2095,33 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+[[package]]
+name = "predicates"
+version = "3.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
[[package]]
name = "proc-macro2"
version = "1.0.103"
@@ -2106,15 +2175,6 @@ version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "rand_core 0.6.4",
-]
-
[[package]]
name = "rand"
version = "0.9.2"
@@ -2122,7 +2182,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha",
- "rand_core 0.9.3",
+ "rand_core",
]
[[package]]
@@ -2132,15 +2192,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
- "rand_core 0.9.3",
+ "rand_core",
]
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-
[[package]]
name = "rand_core"
version = "0.9.3"
@@ -2209,6 +2263,19 @@ dependencies = [
"semver",
]
+[[package]]
+name = "rustix"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+dependencies = [
+ "bitflags 2.10.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "rustversion"
version = "1.0.22"
@@ -2407,19 +2474,6 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
-[[package]]
-name = "string_cache"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
-dependencies = [
- "new_debug_unreachable",
- "parking_lot",
- "phf_shared 0.11.3",
- "precomputed-hash",
- "serde",
-]
-
[[package]]
name = "string_cache"
version = "0.9.0"
@@ -2428,31 +2482,19 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
dependencies = [
"new_debug_unreachable",
"parking_lot",
- "phf_shared 0.13.1",
+ "phf_shared",
"precomputed-hash",
"serde",
]
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
-dependencies = [
- "phf_generator 0.11.3",
- "phf_shared 0.11.3",
- "proc-macro2",
- "quote",
-]
-
[[package]]
name = "string_cache_codegen"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
+ "phf_generator",
+ "phf_shared",
"proc-macro2",
"quote",
]
@@ -2513,6 +2555,19 @@ dependencies = [
"syn 2.0.111",
]
+[[package]]
+name = "tempfile"
+version = "3.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
+dependencies = [
+ "fastrand",
+ "getrandom",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "tendril"
version = "0.4.3"
@@ -2533,6 +2588,21 @@ dependencies = [
"winapi-util",
]
+[[package]]
+name = "termtree"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683"
+
+[[package]]
+name = "test_utils"
+version = "0.1.0"
+dependencies = [
+ "assert_fs",
+ "assertables",
+ "log",
+]
+
[[package]]
name = "thiserror"
version = "1.0.69"
@@ -2682,11 +2752,11 @@ dependencies = [
"log",
"parking_lot",
"percent-encoding",
- "phf 0.13.1",
+ "phf",
"pin-project-lite",
"postgres-protocol",
"postgres-types",
- "rand 0.9.2",
+ "rand",
"socket2 0.6.1",
"tokio",
"tokio-util",
@@ -2987,28 +3057,16 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "web_atoms"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414"
-dependencies = [
- "phf 0.11.3",
- "phf_codegen 0.11.3",
- "string_cache 0.8.9",
- "string_cache_codegen 0.5.4",
-]
-
[[package]]
name = "web_atoms"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acd0c322f146d0f8aad130ce6c187953889359584497dac6561204c8e17bb43d"
dependencies = [
- "phf 0.13.1",
- "phf_codegen 0.13.1",
- "string_cache 0.9.0",
- "string_cache_codegen 0.6.1",
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
]
[[package]]
@@ -3407,16 +3465,6 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
-[[package]]
-name = "xml5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee3f1e41afb31a75aef076563b0ad3ecc24f5bd9d12a72b132222664eb76b494"
-dependencies = [
- "log",
- "markup5ever 0.35.0",
-]
-
[[package]]
name = "xml5ever"
version = "0.36.1"
@@ -3424,7 +3472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f57dd51b88a4b9f99f9b55b136abb86210629d61c48117ddb87f567e51e66be7"
dependencies = [
"log",
- "markup5ever 0.36.1",
+ "markup5ever",
]
[[package]]
diff --git a/extensions/VSCode/Cargo.toml b/extensions/VSCode/Cargo.toml
index e3c449b8..44269383 100644
--- a/extensions/VSCode/Cargo.toml
+++ b/extensions/VSCode/Cargo.toml
@@ -32,7 +32,7 @@ license = "GPL-3.0-only"
name = "codechat-editor-vscode-extension"
readme = "../README.md"
repository = "https://github.com/bjones1/CodeChat_Editor"
-version = "0.1.44"
+version = "0.1.46"
[lib]
crate-type = ["cdylib"]
diff --git a/extensions/VSCode/eslint.config.js b/extensions/VSCode/eslint.config.js
new file mode 100644
index 00000000..c0936860
--- /dev/null
+++ b/extensions/VSCode/eslint.config.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2025 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/).
+//
+// `.eslintrc.yml` -- Configure ESLint for this project
+// ====================================================
+const eslintPluginPrettierRecommended = require("eslint-plugin-prettier/recommended");
+const eslint = require("@eslint/js");
+const { defineConfig } = require("eslint/config");
+const tseslint = require("typescript-eslint");
+
+module.exports = defineConfig(
+ eslint.configs.recommended,
+ tseslint.configs.recommended,
+ eslintPluginPrettierRecommended,
+ defineConfig([
+ {
+ // This must be the only key in this dict to be treated as a global ignore. Only global ignores can ignore directories. See the [docs](https://eslint.org/docs/latest/use/configure/configuration-files#globally-ignoring-files-with-ignores).
+ ignores: ["src/third-party/**"],
+ },
+ {
+ name: "local",
+ rules: {
+ "no-unused-vars": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ args: "all",
+ argsIgnorePattern: "^_",
+ caughtErrors: "all",
+ caughtErrorsIgnorePattern: "^_",
+ destructuredArrayIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ ignoreRestSiblings: true,
+ },
+ ],
+ },
+ },
+ ]),
+);
diff --git a/extensions/VSCode/package.json b/extensions/VSCode/package.json
index 8728ac3b..6f536bee 100644
--- a/extensions/VSCode/package.json
+++ b/extensions/VSCode/package.json
@@ -19,6 +19,7 @@
"CodeChat Editor",
"Visual Studio Code extension"
],
+ "type": "commonjs",
"license": "GPL-3.0-only",
"main": "out/extension.js",
"napi": {
@@ -40,7 +41,7 @@
"type": "git",
"url": "https://github.com/bjones1/CodeChat_Editor"
},
- "version": "0.1.44",
+ "version": "0.1.46",
"activationEvents": [
"onCommand:extension.codeChatEditorActivate",
"onCommand:extension.codeChatEditorDeactivate"
@@ -81,24 +82,27 @@
"devDependencies": {
"@emnapi/core": "^1.7.1",
"@emnapi/runtime": "^1.7.1",
+ "@eslint/js": "^9.39.2",
"@napi-rs/cli": "^3.5.0",
"@tybys/wasm-util": "^0.10.1",
"@types/escape-html": "^1.0.4",
- "@types/node": "^24.10.2",
+ "@types/node": "^24.10.4",
"@types/vscode": "1.61.0",
- "@typescript-eslint/eslint-plugin": "^8.49.0",
- "@typescript-eslint/parser": "^8.49.0",
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
+ "@typescript-eslint/parser": "^8.50.0",
"@vscode/vsce": "^3.7.1",
"chalk": "^5.6.2",
"esbuild": "^0.27.1",
- "eslint": "^9.39.1",
+ "eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-prettier": "^5.5.4",
"npm-run-all2": "^8.0.4",
"ovsx": "^0.10.7",
"prettier": "^3.7.4",
- "typescript": "^5.9.3"
+ "typescript": "^5.9.3",
+ "typescript-eslint": "^8.50.0"
},
"optionalDependencies": {
"bufferutil": "^4.0.9"
diff --git a/extensions/VSCode/pnpm-lock.yaml b/extensions/VSCode/pnpm-lock.yaml
index 0cd404b8..0a501946 100644
--- a/extensions/VSCode/pnpm-lock.yaml
+++ b/extensions/VSCode/pnpm-lock.yaml
@@ -18,9 +18,12 @@ importers:
'@emnapi/runtime':
specifier: ^1.7.1
version: 1.7.1
+ '@eslint/js':
+ specifier: ^9.39.2
+ version: 9.39.2
'@napi-rs/cli':
specifier: ^3.5.0
- version: 3.5.0(@emnapi/runtime@1.7.1)(@types/node@24.10.2)
+ version: 3.5.0(@emnapi/runtime@1.7.1)(@types/node@24.10.4)
'@tybys/wasm-util':
specifier: ^0.10.1
version: 0.10.1
@@ -28,17 +31,17 @@ importers:
specifier: ^1.0.4
version: 1.0.4
'@types/node':
- specifier: ^24.10.2
- version: 24.10.2
+ specifier: ^24.10.4
+ version: 24.10.4
'@types/vscode':
specifier: 1.61.0
version: 1.61.0
'@typescript-eslint/eslint-plugin':
- specifier: ^8.49.0
- version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: ^8.50.0
+ version: 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: ^8.49.0
- version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: ^8.50.0
+ version: 8.50.0(eslint@9.39.2)(typescript@5.9.3)
'@vscode/vsce':
specifier: ^3.7.1
version: 3.7.1
@@ -49,17 +52,20 @@ importers:
specifier: ^0.27.1
version: 0.27.1
eslint:
- specifier: ^9.39.1
- version: 9.39.1
+ specifier: ^9.39.2
+ version: 9.39.2
eslint-config-prettier:
specifier: ^10.1.8
- version: 10.1.8(eslint@9.39.1)
+ version: 10.1.8(eslint@9.39.2)
eslint-plugin-import:
specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)
eslint-plugin-node:
specifier: ^11.1.0
- version: 11.1.0(eslint@9.39.1)
+ version: 11.1.0(eslint@9.39.2)
+ eslint-plugin-prettier:
+ specifier: ^5.5.4
+ version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4)
npm-run-all2:
specifier: ^8.0.4
version: 8.0.4
@@ -72,6 +78,9 @@ importers:
typescript:
specifier: ^5.9.3
version: 5.9.3
+ typescript-eslint:
+ specifier: ^8.50.0
+ version: 8.50.0(eslint@9.39.2)(typescript@5.9.3)
optionalDependencies:
bufferutil:
specifier: ^4.0.9
@@ -328,8 +337,8 @@ packages:
resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.39.1':
- resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
@@ -360,8 +369,8 @@ packages:
resolution: {integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
- '@inquirer/checkbox@5.0.2':
- resolution: {integrity: sha512-iTPV4tMMct7iOpwer5qmTP7gjnk1VQJjsNfAaC2b8Q3qiuHM3K2yjjDr5u1MKfkrvp2JD4Flf8sIPpF21pmZmw==}
+ '@inquirer/checkbox@5.0.3':
+ resolution: {integrity: sha512-xtQP2eXMFlOcAhZ4ReKP2KZvDIBb1AnCfZ81wWXG3DXLVH0f0g4obE0XDPH+ukAEMRcZT0kdX2AS1jrWGXbpxw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -369,8 +378,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/confirm@6.0.2':
- resolution: {integrity: sha512-A0/13Wyi+8iFeNDX6D4zZYKPoBLIEbE4K/219qHcnpXMer2weWvaTo63+2c7mQPPA206DEMSYVOPnEw3meOlCw==}
+ '@inquirer/confirm@6.0.3':
+ resolution: {integrity: sha512-lyEvibDFL+NA5R4xl8FUmNhmu81B+LDL9L/MpKkZlQDJZXzG8InxiqYxiAlQYa9cqLLhYqKLQwZqXmSTqCLjyw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -378,8 +387,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@11.0.2':
- resolution: {integrity: sha512-lgMRx/n02ciiNELBvFLHtmcjbV5tf5D/I0UYfCg2YbTZWmBZ10/niLd3IjWBxz8LtM27xP+4oLEa06Slmb7p7A==}
+ '@inquirer/core@11.1.0':
+ resolution: {integrity: sha512-+jD/34T1pK8M5QmZD/ENhOfXdl9Zr+BrQAUc5h2anWgi7gggRq15ZbiBeLoObj0TLbdgW7TAIQRU2boMc9uOKQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -387,8 +396,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/editor@5.0.2':
- resolution: {integrity: sha512-pXQ4Nf0qmFcJuYB6NlcIIxH6l6zKOwNg1Jh/ZRdKd2dTqBB4OXKUFbFwR2K4LVXVtq15ZFFatBVT+rerYR8hWQ==}
+ '@inquirer/editor@5.0.3':
+ resolution: {integrity: sha512-wYyQo96TsAqIciP/r5D3cFeV8h4WqKQ/YOvTg5yOfP2sqEbVVpbxPpfV3LM5D0EP4zUI3EZVHyIUIllnoIa8OQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -396,8 +405,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/expand@5.0.2':
- resolution: {integrity: sha512-siFG1swxfjFIOxIcehtZkh+KUNB/YCpyfHNEGu+nC/SBXIbgUWibvThLn/WesSxLRGOeSKdNKoTm+GQCKFm6Ww==}
+ '@inquirer/expand@5.0.3':
+ resolution: {integrity: sha512-2oINvuL27ujjxd95f6K2K909uZOU2x1WiAl7Wb1X/xOtL8CgQ1kSxzykIr7u4xTkXkXOAkCuF45T588/YKee7w==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -418,8 +427,8 @@ packages:
resolution: {integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
- '@inquirer/input@5.0.2':
- resolution: {integrity: sha512-hN2YRo1QiEc9lD3mK+CPnTS4TK2RhCMmMmP4nCWwTkmQL2vx9jPJWYk+rbUZpwR1D583ZJk1FI3i9JZXIpi/qg==}
+ '@inquirer/input@5.0.3':
+ resolution: {integrity: sha512-4R0TdWl53dtp79Vs6Df2OHAtA2FVNqya1hND1f5wjHWxZJxwDMSNB1X5ADZJSsQKYAJ5JHCTO+GpJZ42mK0Otw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -427,8 +436,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/number@4.0.2':
- resolution: {integrity: sha512-4McnjTSYrlthNW1ojkkmP75WLRYhQs7GXm6pDDoIrHqJuV5uUYwfdbB0geHdaKMarAqJQgoOVjzIT0jdWCsKew==}
+ '@inquirer/number@4.0.3':
+ resolution: {integrity: sha512-TjQLe93GGo5snRlu83JxE38ZPqj5ZVggL+QqqAF2oBA5JOJoxx25GG3EGH/XN/Os5WOmKfO8iLVdCXQxXRZIMQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -436,8 +445,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/password@5.0.2':
- resolution: {integrity: sha512-oSDziMKiw4G2e4zS+0JRfxuPFFGh6N/9yUaluMgEHp2/Yyj2JGwfDO7XbwtOrxVrz+XsP/iaGyWXdQb9d8A0+g==}
+ '@inquirer/password@5.0.3':
+ resolution: {integrity: sha512-rCozGbUMAHedTeYWEN8sgZH4lRCdgG/WinFkit6ZPsp8JaNg2T0g3QslPBS5XbpORyKP/I+xyBO81kFEvhBmjA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -445,8 +454,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/prompts@8.0.2':
- resolution: {integrity: sha512-2zK5zY48fZcl6+gG4eqOC/UzZsJckHCRvjXoLuW4D8LKOCVGdcJiSKkLnumSZjR/6PXPINDGOrGHqNxb+sxJDg==}
+ '@inquirer/prompts@8.1.0':
+ resolution: {integrity: sha512-LsZMdKcmRNF5LyTRuZE5nWeOjganzmN3zwbtNfcs6GPh3I2TsTtF1UYZlbxVfhxd+EuUqLGs/Lm3Xt4v6Az1wA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -454,8 +463,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/rawlist@5.0.2':
- resolution: {integrity: sha512-AcNALEdQKUQDeJcpC1a3YC53m1MLv+sMUS+vRZ8Qigs1Yg3Dcdtmi82rscJplogKOY8CXkKW4wvVwHS2ZjCIBQ==}
+ '@inquirer/rawlist@5.1.0':
+ resolution: {integrity: sha512-yUCuVh0jW026Gr2tZlG3kHignxcrLKDR3KBp+eUgNz+BAdSeZk0e18yt2gyBr+giYhj/WSIHCmPDOgp1mT2niQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -463,8 +472,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/search@4.0.2':
- resolution: {integrity: sha512-hg63w5toohdzE65S3LiGhdfIL0kT+yisbZARf7zw65PvyMUTutTN3eMAvD/B6y/25z88vTrB7kSB45Vz5CbrXg==}
+ '@inquirer/search@4.0.3':
+ resolution: {integrity: sha512-lzqVw0YwuKYetk5VwJ81Ba+dyVlhseHPx9YnRKQgwXdFS0kEavCz2gngnNhnMIxg8+j1N/rUl1t5s1npwa7bqg==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -472,8 +481,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/select@5.0.2':
- resolution: {integrity: sha512-JygTohvQxSNnvt7IKANVlg/eds+yN5sLRilYeGc4ri/9Aqi/2QPoXBMV5Cz/L1VtQv63SnTbPXJZeCK2pSwsOA==}
+ '@inquirer/select@5.0.3':
+ resolution: {integrity: sha512-M+ynbwS0ecQFDYMFrQrybA0qL8DV0snpc4kKevCCNaTpfghsRowRY7SlQBeIYNzHqXtiiz4RG9vTOeb/udew7w==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
peerDependencies:
'@types/node': '>=18'
@@ -989,6 +998,10 @@ packages:
'@octokit/types@16.0.0':
resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
+ '@pkgr/core@0.2.9':
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -1071,8 +1084,8 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- '@types/node@24.10.2':
- resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==}
+ '@types/node@24.10.4':
+ resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -1083,63 +1096,63 @@ packages:
'@types/vscode@1.61.0':
resolution: {integrity: sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==}
- '@typescript-eslint/eslint-plugin@8.49.0':
- resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
+ '@typescript-eslint/eslint-plugin@8.50.0':
+ resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.49.0
+ '@typescript-eslint/parser': ^8.50.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.49.0':
- resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==}
+ '@typescript-eslint/parser@8.50.0':
+ resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.49.0':
- resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
+ '@typescript-eslint/project-service@8.50.0':
+ resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.49.0':
- resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
+ '@typescript-eslint/scope-manager@8.50.0':
+ resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.49.0':
- resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
+ '@typescript-eslint/tsconfig-utils@8.50.0':
+ resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.49.0':
- resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
+ '@typescript-eslint/type-utils@8.50.0':
+ resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.49.0':
- resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
+ '@typescript-eslint/types@8.50.0':
+ resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.49.0':
- resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
+ '@typescript-eslint/typescript-estree@8.50.0':
+ resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.49.0':
- resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
+ '@typescript-eslint/utils@8.50.0':
+ resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.49.0':
- resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
+ '@typescript-eslint/visitor-keys@8.50.0':
+ resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typespec/ts-http-runtime@0.3.2':
@@ -1556,8 +1569,8 @@ packages:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
- es-abstract@1.24.0:
- resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
+ es-abstract@1.24.1:
+ resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
engines: {node: '>= 0.4'}
es-define-property@1.0.1:
@@ -1584,8 +1597,8 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
- es-toolkit@1.42.0:
- resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==}
+ es-toolkit@1.43.0:
+ resolution: {integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==}
esbuild@0.27.1:
resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==}
@@ -1651,6 +1664,20 @@ packages:
peerDependencies:
eslint: '>=5.16.0'
+ eslint-plugin-prettier@5.5.4:
+ resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1671,8 +1698,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.39.1:
- resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
+ eslint@9.39.2:
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1711,6 +1738,9 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
@@ -1901,8 +1931,8 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
- iconv-lite@0.7.0:
- resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
+ iconv-lite@0.7.1:
+ resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==}
engines: {node: '>=0.10.0'}
ieee754@1.2.1:
@@ -2440,6 +2470,10 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+
prettier@3.7.4:
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
@@ -2701,6 +2735,10 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ synckit@0.11.11:
+ resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
table@6.9.0:
resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
engines: {node: '>=10.0.0'}
@@ -2784,6 +2822,13 @@ packages:
typed-rest-client@1.8.11:
resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==}
+ typescript-eslint@8.50.0:
+ resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -3113,9 +3158,9 @@ snapshots:
'@esbuild/win32-x64@0.27.1':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)':
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.2
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -3150,7 +3195,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.39.1': {}
+ '@eslint/js@9.39.2': {}
'@eslint/object-schema@2.1.7': {}
@@ -3172,122 +3217,122 @@ snapshots:
'@inquirer/ansi@2.0.2': {}
- '@inquirer/checkbox@5.0.2(@types/node@24.10.2)':
+ '@inquirer/checkbox@5.0.3(@types/node@24.10.4)':
dependencies:
'@inquirer/ansi': 2.0.2
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
'@inquirer/figures': 2.0.2
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/confirm@6.0.2(@types/node@24.10.2)':
+ '@inquirer/confirm@6.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/core@11.0.2(@types/node@24.10.2)':
+ '@inquirer/core@11.1.0(@types/node@24.10.4)':
dependencies:
'@inquirer/ansi': 2.0.2
'@inquirer/figures': 2.0.2
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
cli-width: 4.1.0
mute-stream: 3.0.0
signal-exit: 4.1.0
wrap-ansi: 9.0.2
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/editor@5.0.2(@types/node@24.10.2)':
+ '@inquirer/editor@5.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/external-editor': 2.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/external-editor': 2.0.2(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/expand@5.0.2(@types/node@24.10.2)':
+ '@inquirer/expand@5.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/external-editor@2.0.2(@types/node@24.10.2)':
+ '@inquirer/external-editor@2.0.2(@types/node@24.10.4)':
dependencies:
chardet: 2.1.1
- iconv-lite: 0.7.0
+ iconv-lite: 0.7.1
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
'@inquirer/figures@2.0.2': {}
- '@inquirer/input@5.0.2(@types/node@24.10.2)':
+ '@inquirer/input@5.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/number@4.0.2(@types/node@24.10.2)':
+ '@inquirer/number@4.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/password@5.0.2(@types/node@24.10.2)':
+ '@inquirer/password@5.0.3(@types/node@24.10.4)':
dependencies:
'@inquirer/ansi': 2.0.2
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
-
- '@inquirer/prompts@8.0.2(@types/node@24.10.2)':
- dependencies:
- '@inquirer/checkbox': 5.0.2(@types/node@24.10.2)
- '@inquirer/confirm': 6.0.2(@types/node@24.10.2)
- '@inquirer/editor': 5.0.2(@types/node@24.10.2)
- '@inquirer/expand': 5.0.2(@types/node@24.10.2)
- '@inquirer/input': 5.0.2(@types/node@24.10.2)
- '@inquirer/number': 4.0.2(@types/node@24.10.2)
- '@inquirer/password': 5.0.2(@types/node@24.10.2)
- '@inquirer/rawlist': 5.0.2(@types/node@24.10.2)
- '@inquirer/search': 4.0.2(@types/node@24.10.2)
- '@inquirer/select': 5.0.2(@types/node@24.10.2)
+ '@types/node': 24.10.4
+
+ '@inquirer/prompts@8.1.0(@types/node@24.10.4)':
+ dependencies:
+ '@inquirer/checkbox': 5.0.3(@types/node@24.10.4)
+ '@inquirer/confirm': 6.0.3(@types/node@24.10.4)
+ '@inquirer/editor': 5.0.3(@types/node@24.10.4)
+ '@inquirer/expand': 5.0.3(@types/node@24.10.4)
+ '@inquirer/input': 5.0.3(@types/node@24.10.4)
+ '@inquirer/number': 4.0.3(@types/node@24.10.4)
+ '@inquirer/password': 5.0.3(@types/node@24.10.4)
+ '@inquirer/rawlist': 5.1.0(@types/node@24.10.4)
+ '@inquirer/search': 4.0.3(@types/node@24.10.4)
+ '@inquirer/select': 5.0.3(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/rawlist@5.0.2(@types/node@24.10.2)':
+ '@inquirer/rawlist@5.1.0(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/search@4.0.2(@types/node@24.10.2)':
+ '@inquirer/search@4.0.3(@types/node@24.10.4)':
dependencies:
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
'@inquirer/figures': 2.0.2
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/select@5.0.2(@types/node@24.10.2)':
+ '@inquirer/select@5.0.3(@types/node@24.10.4)':
dependencies:
'@inquirer/ansi': 2.0.2
- '@inquirer/core': 11.0.2(@types/node@24.10.2)
+ '@inquirer/core': 11.1.0(@types/node@24.10.4)
'@inquirer/figures': 2.0.2
- '@inquirer/type': 4.0.2(@types/node@24.10.2)
+ '@inquirer/type': 4.0.2(@types/node@24.10.4)
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
- '@inquirer/type@4.0.2(@types/node@24.10.2)':
+ '@inquirer/type@4.0.2(@types/node@24.10.4)':
optionalDependencies:
- '@types/node': 24.10.2
+ '@types/node': 24.10.4
'@isaacs/balanced-match@4.0.1': {}
@@ -3304,16 +3349,16 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
- '@napi-rs/cli@3.5.0(@emnapi/runtime@1.7.1)(@types/node@24.10.2)':
+ '@napi-rs/cli@3.5.0(@emnapi/runtime@1.7.1)(@types/node@24.10.4)':
dependencies:
- '@inquirer/prompts': 8.0.2(@types/node@24.10.2)
+ '@inquirer/prompts': 8.1.0(@types/node@24.10.4)
'@napi-rs/cross-toolchain': 1.0.3
'@napi-rs/wasm-tools': 1.0.1
'@octokit/rest': 22.0.1
clipanion: 4.0.0-rc.4(typanion@3.14.0)
colorette: 2.0.20
emnapi: 1.7.1
- es-toolkit: 1.42.0
+ es-toolkit: 1.43.0
js-yaml: 4.1.1
obug: 2.1.1
semver: 7.7.3
@@ -3691,6 +3736,8 @@ snapshots:
dependencies:
'@octokit/openapi-types': 27.0.0
+ '@pkgr/core@0.2.9': {}
+
'@rtsao/scc@1.1.0': {}
'@secretlint/config-creator@10.2.2':
@@ -3810,7 +3857,7 @@ snapshots:
'@types/json5@0.0.29': {}
- '@types/node@24.10.2':
+ '@types/node@24.10.4':
dependencies:
undici-types: 7.16.0
@@ -3820,15 +3867,15 @@ snapshots:
'@types/vscode@1.61.0': {}
- '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.49.0
- '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.49.0
- eslint: 9.39.1
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ eslint: 9.39.2
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -3836,56 +3883,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.49.0
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.49.0
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3
- eslint: 9.39.1
+ eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.50.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.49.0':
+ '@typescript-eslint/scope-manager@8.50.0':
dependencies:
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/visitor-keys': 8.49.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
- '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.39.1
+ eslint: 9.39.2
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.49.0': {}
+ '@typescript-eslint/types@8.50.0': {}
- '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/visitor-keys': 8.49.0
+ '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@@ -3895,20 +3942,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
- '@typescript-eslint/scope-manager': 8.49.0
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
- eslint: 9.39.1
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+ eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.49.0':
+ '@typescript-eslint/visitor-keys@8.50.0':
dependencies:
- '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
'@typespec/ts-http-runtime@0.3.2':
@@ -4042,7 +4089,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
is-string: 1.1.1
@@ -4053,7 +4100,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
@@ -4062,14 +4109,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
@@ -4077,7 +4124,7 @@ snapshots:
array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
@@ -4373,7 +4420,7 @@ snapshots:
environment@1.1.0: {}
- es-abstract@1.24.0:
+ es-abstract@1.24.1:
dependencies:
array-buffer-byte-length: 1.0.2
arraybuffer.prototype.slice: 1.0.4
@@ -4455,7 +4502,7 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- es-toolkit@1.42.0: {}
+ es-toolkit@1.43.0: {}
esbuild@0.27.1:
optionalDependencies:
@@ -4490,9 +4537,9 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-prettier@10.1.8(eslint@9.39.1):
+ eslint-config-prettier@10.1.8(eslint@9.39.2):
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.2
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -4502,23 +4549,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
- eslint: 9.39.1
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ eslint: 9.39.2
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-es@3.0.1(eslint@9.39.1):
+ eslint-plugin-es@3.0.1(eslint@9.39.2):
dependencies:
- eslint: 9.39.1
+ eslint: 9.39.2
eslint-utils: 2.1.0
regexpp: 3.2.0
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -4527,9 +4574,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.39.1
+ eslint: 9.39.2
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -4541,22 +4588,31 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-node@11.1.0(eslint@9.39.1):
+ eslint-plugin-node@11.1.0(eslint@9.39.2):
dependencies:
- eslint: 9.39.1
- eslint-plugin-es: 3.0.1(eslint@9.39.1)
+ eslint: 9.39.2
+ eslint-plugin-es: 3.0.1(eslint@9.39.2)
eslint-utils: 2.1.0
ignore: 5.3.2
minimatch: 3.1.2
resolve: 1.22.11
semver: 6.3.1
+ eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4):
+ dependencies:
+ eslint: 9.39.2
+ prettier: 3.7.4
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.11.11
+ optionalDependencies:
+ eslint-config-prettier: 10.1.8(eslint@9.39.2)
+
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
@@ -4572,15 +4628,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.39.1:
+ eslint@9.39.2:
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.3
- '@eslint/js': 9.39.1
+ '@eslint/js': 9.39.2
'@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
@@ -4636,6 +4692,8 @@ snapshots:
fast-deep-equal@3.1.3: {}
+ fast-diff@1.3.0: {}
+
fast-glob@3.3.3:
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -4846,7 +4904,7 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- iconv-lite@0.7.0:
+ iconv-lite@0.7.1:
dependencies:
safer-buffer: 2.1.2
@@ -5248,14 +5306,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
object.groupby@1.0.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
object.values@1.2.1:
dependencies:
@@ -5393,6 +5451,10 @@ snapshots:
prelude-ls@1.2.1: {}
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
prettier@3.7.4: {}
pump@3.0.3:
@@ -5456,7 +5518,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -5658,7 +5720,7 @@ snapshots:
call-bound: 1.0.4
define-data-property: 1.1.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
@@ -5710,6 +5772,10 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ synckit@0.11.11:
+ dependencies:
+ '@pkgr/core': 0.2.9
+
table@6.9.0:
dependencies:
ajv: 8.17.1
@@ -5824,6 +5890,17 @@ snapshots:
tunnel: 0.0.6
underscore: 1.13.7
+ typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ eslint: 9.39.2
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
typescript@5.9.3: {}
uc.micro@2.1.0: {}
diff --git a/extensions/VSCode/src/extension.ts b/extensions/VSCode/src/extension.ts
index 1e2bc9bb..938fd836 100644
--- a/extensions/VSCode/src/extension.ts
+++ b/extensions/VSCode/src/extension.ts
@@ -30,13 +30,12 @@ import process from "node:process";
// ### Third-party packages
import escape from "escape-html";
import vscode, {
- commands,
Range,
TextDocument,
TextEditor,
TextEditorRevealType,
} from "vscode";
-import { CodeChatEditorServer, initServer } from "./index";
+import { CodeChatEditorServer, initServer } from "./index.js";
// ### Local packages
import {
@@ -50,7 +49,7 @@ import {
DEBUG_ENABLED,
MAX_MESSAGE_LENGTH,
} from "../../../client/src/debug_enabled.mjs";
-import { ResultErrTypes } from "../../../client/src/rust-types/ResultErrTypes";
+import { ResultErrTypes } from "../../../client/src/rust-types/ResultErrTypes.js";
// Globals
// -----------------------------------------------------------------------------
@@ -407,7 +406,7 @@ export const activate = (context: vscode.ExtensionContext) => {
// Update the cursor and scroll position if
// provided.
const editor = get_text_editor(doc);
- let scroll_line = current_update.scroll_position;
+ const scroll_line = current_update.scroll_position;
if (scroll_line !== undefined && editor) {
ignore_selection_change = true;
const scroll_position = new vscode.Position(
@@ -427,7 +426,7 @@ export const activate = (context: vscode.ExtensionContext) => {
);
}
- let cursor_line = current_update.cursor_position;
+ const cursor_line = current_update.cursor_position;
if (cursor_line !== undefined && editor) {
ignore_selection_change = true;
const cursor_position = new vscode.Position(
@@ -484,7 +483,7 @@ export const activate = (context: vscode.ExtensionContext) => {
// [Built-in Commands](https://code.visualstudio.com/api/references/commands).
// For now, simply respond with an OK, since the
// following doesn't work.
- if (false) {
+ /**
commands
.executeCommand(
"vscode.open",
@@ -504,7 +503,7 @@ export const activate = (context: vscode.ExtensionContext) => {
],
}),
);
- }
+ */
await sendResult(id);
}
break;
@@ -580,6 +579,7 @@ export const deactivate = async () => {
// -----------------------------------------------------------------------------
//
// Format a complex data structure as a string when in debug mode.
+/*eslint-disable-next-line @typescript-eslint/no-explicit-any */
const format_struct = (complex_data_structure: any): string =>
DEBUG_ENABLED
? JSON.stringify(
@@ -765,6 +765,7 @@ const get_text_editor = (doc: TextDocument): TextEditor | undefined => {
}
};
+/*eslint-disable-next-line @typescript-eslint/no-explicit-any */
const console_log = (...args: any) => {
if (DEBUG_ENABLED) {
console.log(...args);
diff --git a/extensions/VSCode/tsconfig.json b/extensions/VSCode/tsconfig.json
index 10de38ac..d2e1caa0 100644
--- a/extensions/VSCode/tsconfig.json
+++ b/extensions/VSCode/tsconfig.json
@@ -26,5 +26,5 @@
"rootDirs": ["src", "../../client/src/*"],
"allowJs": true
},
- "exclude": ["node_modules", ".vscode-test", "out", "server"]
+ "exclude": ["node_modules", ".vscode-test", "out", "server", "eslint.config.js"]
}
diff --git a/server/Cargo.lock b/server/Cargo.lock
index 6261210e..9ea76c0f 100644
--- a/server/Cargo.lock
+++ b/server/Cargo.lock
@@ -746,7 +746,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
[[package]]
name = "codechat-editor-server"
-version = "0.1.44"
+version = "0.1.46"
dependencies = [
"actix-files",
"actix-http",
@@ -768,13 +768,13 @@ dependencies = [
"futures",
"futures-util",
"htmd",
- "html5ever 0.36.1",
+ "html5ever",
"imara-diff",
"indoc",
"lazy_static",
"log",
"log4rs",
- "markup5ever_rcdom 0.36.0+unofficial",
+ "markup5ever_rcdom",
"mime",
"mime_guess",
"minreq",
@@ -783,7 +783,7 @@ dependencies = [
"path-slash",
"pest",
"pest_derive",
- "phf 0.13.1",
+ "phf",
"predicates",
"pretty_assertions",
"pulldown-cmark 0.13.0",
@@ -791,6 +791,7 @@ dependencies = [
"regex",
"serde",
"serde_json",
+ "test_utils",
"thirtyfour",
"thiserror 2.0.17",
"tokio",
@@ -1581,22 +1582,11 @@ dependencies = [
[[package]]
name = "htmd"
version = "0.5.0"
-source = "git+https://github.com/bjones1/htmd.git?branch=math-support#af6bc129874d33eb7f4d7fb6f0a39b04c668b2f5"
+source = "git+https://github.com/bjones1/htmd.git?branch=dom-interface#a8a3c34143ad5641baa784e43bc73668dbbebc2f"
dependencies = [
- "html5ever 0.35.0",
- "markup5ever_rcdom 0.35.0+unofficial",
- "phf 0.13.1",
-]
-
-[[package]]
-name = "html5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4"
-dependencies = [
- "log",
- "markup5ever 0.35.0",
- "match_token",
+ "html5ever",
+ "markup5ever_rcdom",
+ "phf",
]
[[package]]
@@ -1606,7 +1596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e"
dependencies = [
"log",
- "markup5ever 0.36.1",
+ "markup5ever",
]
[[package]]
@@ -2126,9 +2116,9 @@ dependencies = [
[[package]]
name = "libz-rs-sys"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b484ba8d4f775eeca644c452a56650e544bf7e617f1d170fe7298122ead5222"
+checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c"
dependencies = [
"zlib-rs",
]
@@ -2247,17 +2237,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
-[[package]]
-name = "markup5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3"
-dependencies = [
- "log",
- "tendril",
- "web_atoms 0.1.3",
-]
-
[[package]]
name = "markup5ever"
version = "0.36.1"
@@ -2266,19 +2245,7 @@ checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c"
dependencies = [
"log",
"tendril",
- "web_atoms 0.2.0",
-]
-
-[[package]]
-name = "markup5ever_rcdom"
-version = "0.35.0+unofficial"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8bcd53df4748257345b8bc156d620340ce0f015ec1c7ef1cff475543888a31d"
-dependencies = [
- "html5ever 0.35.0",
- "markup5ever 0.35.0",
- "tendril",
- "xml5ever 0.35.0",
+ "web_atoms",
]
[[package]]
@@ -2287,21 +2254,10 @@ version = "0.36.0+unofficial"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e5fc8802e8797c0dfdd2ce5c21aa0aee21abbc7b3b18559100651b3352a7b63"
dependencies = [
- "html5ever 0.36.1",
- "markup5ever 0.36.1",
+ "html5ever",
+ "markup5ever",
"tendril",
- "xml5ever 0.36.1",
-]
-
-[[package]]
-name = "match_token"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.111",
+ "xml5ever",
]
[[package]]
@@ -2605,15 +2561,6 @@ dependencies = [
"sha2",
]
-[[package]]
-name = "phf"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
-dependencies = [
- "phf_shared 0.11.3",
-]
-
[[package]]
name = "phf"
version = "0.13.1"
@@ -2621,38 +2568,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
dependencies = [
"phf_macros",
- "phf_shared 0.13.1",
+ "phf_shared",
"serde",
]
-[[package]]
-name = "phf_codegen"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
-dependencies = [
- "phf_generator 0.11.3",
- "phf_shared 0.11.3",
-]
-
[[package]]
name = "phf_codegen"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
-dependencies = [
- "phf_shared 0.11.3",
- "rand 0.8.5",
+ "phf_generator",
+ "phf_shared",
]
[[package]]
@@ -2662,7 +2589,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
dependencies = [
"fastrand",
- "phf_shared 0.13.1",
+ "phf_shared",
]
[[package]]
@@ -2671,22 +2598,13 @@ version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
+ "phf_generator",
+ "phf_shared",
"proc-macro2",
"quote",
"syn 2.0.111",
]
-[[package]]
-name = "phf_shared"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
-dependencies = [
- "siphasher",
-]
-
[[package]]
name = "phf_shared"
version = "0.13.1"
@@ -3053,9 +2971,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "reqwest"
-version = "0.12.25"
+version = "0.12.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a"
+checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f"
dependencies = [
"base64",
"bytes",
@@ -3501,19 +3419,6 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
-[[package]]
-name = "string_cache"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
-dependencies = [
- "new_debug_unreachable",
- "parking_lot",
- "phf_shared 0.11.3",
- "precomputed-hash",
- "serde",
-]
-
[[package]]
name = "string_cache"
version = "0.9.0"
@@ -3522,31 +3427,19 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
dependencies = [
"new_debug_unreachable",
"parking_lot",
- "phf_shared 0.13.1",
+ "phf_shared",
"precomputed-hash",
"serde",
]
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
-dependencies = [
- "phf_generator 0.11.3",
- "phf_shared 0.11.3",
- "proc-macro2",
- "quote",
-]
-
[[package]]
name = "string_cache_codegen"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
dependencies = [
- "phf_generator 0.13.1",
- "phf_shared 0.13.1",
+ "phf_generator",
+ "phf_shared",
"proc-macro2",
"quote",
]
@@ -3675,6 +3568,15 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683"
+[[package]]
+name = "test_utils"
+version = "0.1.0"
+dependencies = [
+ "assert_fs",
+ "assertables",
+ "log",
+]
+
[[package]]
name = "thirtyfour"
version = "0.36.1"
@@ -3863,7 +3765,7 @@ dependencies = [
"log",
"parking_lot",
"percent-encoding",
- "phf 0.13.1",
+ "phf",
"pin-project-lite",
"postgres-protocol",
"postgres-types",
@@ -4354,28 +4256,16 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "web_atoms"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414"
-dependencies = [
- "phf 0.11.3",
- "phf_codegen 0.11.3",
- "string_cache 0.8.9",
- "string_cache_codegen 0.5.4",
-]
-
[[package]]
name = "web_atoms"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acd0c322f146d0f8aad130ce6c187953889359584497dac6561204c8e17bb43d"
dependencies = [
- "phf 0.13.1",
- "phf_codegen 0.13.1",
- "string_cache 0.9.0",
- "string_cache_codegen 0.6.1",
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
]
[[package]]
@@ -4841,16 +4731,6 @@ version = "0.8.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
-[[package]]
-name = "xml5ever"
-version = "0.35.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee3f1e41afb31a75aef076563b0ad3ecc24f5bd9d12a72b132222664eb76b494"
-dependencies = [
- "log",
- "markup5ever 0.35.0",
-]
-
[[package]]
name = "xml5ever"
version = "0.36.1"
@@ -4858,7 +4738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f57dd51b88a4b9f99f9b55b136abb86210629d61c48117ddb87f567e51e66be7"
dependencies = [
"log",
- "markup5ever 0.36.1",
+ "markup5ever",
]
[[package]]
@@ -5009,9 +4889,9 @@ dependencies = [
[[package]]
name = "zlib-rs"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36134c44663532e6519d7a6dfdbbe06f6f8192bde8ae9ed076e9b213f0e31df7"
+checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235"
[[package]]
name = "zopfli"
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 96a6138a..d8fe63e5 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -32,7 +32,7 @@ license = "GPL-3.0-only"
name = "codechat-editor-server"
readme = "../README.md"
repository = "https://github.com/bjones1/CodeChat_Editor"
-version = "0.1.44"
+version = "0.1.46"
# This library allows other packages to use core CodeChat Editor features.
[lib]
@@ -46,9 +46,6 @@ name = "code_chat_editor"
# Uncomment this to show an explanation of the lexing process.
#default = ["lexer_explain"]
lexer_explain = []
-# The `test` configuration option (i.e., `#[cfg(test)]`) applies only to
-# functional tests. This feature applies only to integration tests.
-int_tests = ["assert_fs", "assertables", "futures"]
# Dependencies
# ------------------------------------------------------------------------------
@@ -62,20 +59,13 @@ actix-web = "4"
actix-web-httpauth = "0.8.2"
actix-ws = "0.3.0"
anyhow = "1.0.100"
-# This is used for integration testing. However, since integration tests can't
-# access crates in `dev-dependencies`, they're here behind the appropriate
-# feature flag.
-assert_fs = { version = "1", optional = true }
-assertables = { version = "9", optional = true }
bytes = { version = "1", features = ["serde"] }
chrono = "0.4"
clap = { version = "4.5.19", features = ["derive"] }
dprint-plugin-markdown = { git = "https://github.com/bjones1/dprint-plugin-markdown.git", branch = "all-fixes", version = "0.20.0" }
dunce = "1.0.5"
-# This is also for integration testing.
-futures = { version = "0.3.31", optional = true }
futures-util = "0.3.29"
-htmd = { git = "https://github.com/bjones1/htmd.git", branch = "math-support", version = "0.5" }
+htmd = { git = "https://github.com/bjones1/htmd.git", branch = "dom-interface", version = "0.5" }
html5ever = "0.36.1"
imara-diff = { version = "0.2", features = [] }
indoc = "2.0.5"
@@ -99,6 +89,7 @@ rand = "0.9.2"
regex = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
+test_utils = { path = "../test_utils" }
thiserror = "2.0.12"
tokio = { version = "1", features = ["full"] }
tokio-postgres = { version = "0.7", features = ["with-chrono-0_4"] }
@@ -117,6 +108,7 @@ actix-http = "3.9.0"
assert_cmd = "2.0.16"
assert_fs = "1"
assertables = "9"
+futures = "0.3.31"
predicates = "3.1.2"
pretty_assertions = "1.4.1"
thirtyfour = { git = "https://github.com/bjones1/thirtyfour.git", branch = "selenium_manager" }
diff --git a/server/src/ide/filewatcher.rs b/server/src/ide/filewatcher.rs
index 9509fac9..2ff42faf 100644
--- a/server/src/ide/filewatcher.rs
+++ b/server/src/ide/filewatcher.rs
@@ -518,8 +518,8 @@ async fn processing_task(
// Close the file if it can't be read as
// Unicode text.
- if read_ret.is_err() {
- error!("Unable to read '{}': {}", cfp.to_string_lossy(), read_ret.unwrap_err());
+ if let Err(e) = read_ret {
+ error!("Unable to read '{}': {e}", cfp.to_string_lossy());
break 'task;
}
@@ -724,12 +724,10 @@ mod tests {
use super::FW;
use crate::{
- cast, prep_test_dir,
processing::{
CodeChatForWeb, CodeMirror, CodeMirrorDiffable, SourceFileMetadata, TranslationResults,
source_to_codechat_for_web,
},
- test_utils::{check_logger_errors, configure_testing_logger},
webserver::{
EditorMessage, EditorMessageContents, INITIAL_CLIENT_MESSAGE_ID,
INITIAL_IDE_MESSAGE_ID, INITIAL_MESSAGE_ID, IdeType, MESSAGE_ID_INCREMENT,
@@ -737,6 +735,10 @@ mod tests {
configure_app, drop_leading_slash, make_app_data, send_response, set_root_path,
},
};
+ use test_utils::{
+ cast, prep_test_dir,
+ test_utils::{check_logger_errors, configure_testing_logger},
+ };
async fn get_websocket_queues(
// A path to the temporary directory where the source file is located.
diff --git a/server/src/ide/vscode/tests.rs b/server/src/ide/vscode/tests.rs
index a3d1b141..7a69f2fa 100644
--- a/server/src/ide/vscode/tests.rs
+++ b/server/src/ide/vscode/tests.rs
@@ -52,18 +52,20 @@ use crate::webserver::{
INITIAL_MESSAGE_ID, IdeType, MESSAGE_ID_INCREMENT, ResultErrTypes,
};
use crate::{
- cast,
processing::{
CodeChatForWeb, CodeMirror, CodeMirrorDiff, CodeMirrorDiffable, CodeMirrorDocBlock,
CodeMirrorDocBlockTransaction, SourceFileMetadata, StringDiff,
},
- test_utils::{_prep_test_dir, check_logger_errors, configure_testing_logger},
webserver::{ResultOkTypes, UpdateMessageContents, drop_leading_slash},
};
use crate::{
translation::{EolType, find_eol_type},
webserver::main,
};
+use test_utils::{
+ cast,
+ test_utils::{_prep_test_dir, check_logger_errors, configure_testing_logger},
+};
// Globals
// -------
@@ -225,7 +227,7 @@ async fn _prep_test(
/// `_prep_test` would give the wrong name.
macro_rules! prep_test {
($connection_id: ident) => {{
- use crate::function_name;
+ use test_utils::function_name;
_prep_test($connection_id, function_name!())
}};
}
diff --git a/server/src/lexer/tests.rs b/server/src/lexer/tests.rs
index a3f89738..a27c600d 100644
--- a/server/src/lexer/tests.rs
+++ b/server/src/lexer/tests.rs
@@ -20,9 +20,9 @@
// -------
use super::supported_languages::get_language_lexer_vec;
use super::{CodeDocBlock, DocBlock, compile_lexers, source_lexer};
-use crate::test_utils::stringit;
use indoc::indoc;
use pretty_assertions::assert_eq;
+use test_utils::test_utils::stringit;
// Utilities
// ---------
diff --git a/server/src/lib.rs b/server/src/lib.rs
index 9e336c1e..7e178fc2 100644
--- a/server/src/lib.rs
+++ b/server/src/lib.rs
@@ -25,8 +25,3 @@ pub mod lexer;
pub mod processing;
pub mod translation;
pub mod webserver;
-
-#[cfg(any(feature = "int_tests", test))]
-pub mod test_utils;
-#[cfg(any(feature = "int_tests", test))]
-pub mod testing_logger;
diff --git a/server/src/processing.rs b/server/src/processing.rs
index 25849bfd..057e875d 100644
--- a/server/src/processing.rs
+++ b/server/src/processing.rs
@@ -452,10 +452,10 @@ pub fn codechat_for_web_to_source(
}
// Translate the HTML document to Markdown.
let converter = HtmlToMarkdownWrapped::new();
- let dry_html =
- dehydrate_html(&code_mirror.doc).map_err(CodechatForWebToSourceError::ParseFailed)?;
+ let tree = html_to_tree(&code_mirror.doc)?;
+ dehydrating_walk_node(&tree);
return converter
- .convert(&dry_html)
+ .convert(&tree)
.map_err(CodechatForWebToSourceError::HtmlToMarkdownFailed);
}
let code_doc_block_vec_html = code_mirror_to_code_doc_blocks(code_mirror);
@@ -576,17 +576,37 @@ impl HtmlToMarkdownWrapped {
self.word_wrap_config.line_width = line_width as u32;
}
- fn convert(&self, html: &str) -> Result