diff --git a/CHANGES.md b/CHANGES.md index 6e8c18b6..ebc66cd5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,5 @@ -# coq-lsp 0.1.8: Dot / Bracket ------------------------------- +# coq-lsp 0.1.8: Trick-or-treat +------------------------------- - Update VSCode client dependencies, should bring some performance improvements to goal pretty printing (@ejgallego, #530) @@ -39,6 +39,25 @@ - `coq-lsp` is now supported by the `coq-nix-toolbox` (@Zimmi48, @CohenCyril, #572, via https://github.com/coq-community/coq-nix-toolbox/pull/164 ) + - Support for `-rifrom` in `_CoqProject` and in command line + (`--rifrom`). Thanks to Lasse Blaauwbroek for the report. + (@ejgallego, #581, fixes #579) + - Export Query Goals API in VSCode client; this way other extensions + can implement their own commands that query Coq goals (@amblafont, + @ejgallego, #576, closes #558) + - New `pretac` field for preprocessing of goals with a tactic using + speculative execution, this is experimental for now (@amblafont, + @ejgallego, #573, helps with #558) + - Implement `textDocument/selectionRange` request, that will return + the range of the Coq sentence underlying the cursor. In VSCode, + this is triggered by the "Expand Selection" command. The + implementation is partial: we only take into account the first + position, and we only return a single range (Coq sentence) without + parents. (@ejgallego, #582) + - Be more robust to mixed-separator windows paths in workspace + detection (@ejgallego, #583, fixes #569) + - Adjust printing breaks in error and message panels (@ejgallego, + @Alizter, #586, fixes #457 , fixes #458 , fixes #571) # coq-lsp 0.1.7: Just-in-time ----------------------------- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9cebde8..f79b11ac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -314,9 +314,10 @@ The checklist for the release as of today is the following: The above can be done with: ``` -export COQLSPV=0.1.7 +export COQLSPV=0.1.8 git checkout main && make && dune-release tag ${COQLSPV} -git checkout v8.17 && git merge main && make && dune-release tag ${COQLSPV}+8.17 && dune-release +git checkout v8.18 && git merge main && make && dune-release tag ${COQLSPV}+8.18 && dune-release +git checkout v8.17 && git merge v8.18 && make && dune-release tag ${COQLSPV}+8.17 && dune-release git checkout v8.16 && git merge v8.17 && make && dune-release tag ${COQLSPV}+8.16 && dune-release ``` diff --git a/README.md b/README.md index 5afad4d1..49538d43 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ and web native usage, providing quite a few extra features from vanilla Coq. - [📂 Working With Multiple Files](#-working-with-multiple-files) - [📔 Planned Features](#-planned-features) - [📕 Protocol Documentation](#-protocol-documentation) -- [🤸 Contributing](#-contributing) +- [🤸 Contributing and Extending the System](#-contributing-and-extending-the-system) - [🥷 Team](#-team) - [🕰️ Past Contributors](#️-past-contributors) - [©️ Licensing Information](#️-licensing-information) @@ -368,7 +368,7 @@ plus some extensions specific to Coq. Check [the `coq-lsp` protocol documentation](etc/doc/PROTOCOL.md) for more details. -## 🤸 Contributing +## 🤸 Contributing and Extending the System Contributions are very welcome! Feel free to chat with the dev team in [Zulip](https://coq.zulipchat.com/#narrow/stream/329642-coq-lsp) for any @@ -381,6 +381,10 @@ Here is a [list of project ideas](etc/ContributionIdeas.md) that could be of help in case you are looking for contribution ideas, tho we are convinced that the best ideas will arise from using `coq-lsp` in your own Coq projects. +Both Flèche and `coq-lsp` have a preliminary _plugin system_. The VSCode +extension also exports and API so other extensions use its functionality +to query and interact with Coq documents. + ## 🥷 Team - Ali Caglayan (co-coordinator) diff --git a/compiler/fcc.ml b/compiler/fcc.ml index af22182c..f25c218f 100644 --- a/compiler/fcc.ml +++ b/compiler/fcc.ml @@ -3,7 +3,7 @@ open Cmdliner open Fcc_lib let fcc_main roots display debug plugins files coqlib coqcorelib ocamlpath - rload_path load_path = + rload_path load_path require_libraries = let vo_load_path = rload_path @ load_path in let ml_include_path = [] in let args = [] in @@ -14,6 +14,7 @@ let fcc_main roots display debug plugins files coqlib coqcorelib ocamlpath ; vo_load_path ; ml_include_path ; args + ; require_libraries } in let args = Args.{ cmdline; roots; display; files; debug; plugins } in @@ -98,6 +99,18 @@ let plugins : string list Term.t = let doc = "Compiler plugins to load" in Arg.(value & opt_all string [] & info [ "plugin" ] ~docv:"PLUGINS" ~doc) +let rifrom : (string option * string) list Term.t = + let doc = + "FROM Require Import LIBRARY before creating the document, à la From Coq \ + Require Import Prelude" + in + Term.( + const (List.map (fun (x, y) -> (Some x, y))) + $ Arg.( + value + & opt_all (pair string string) [] + & info [ "rifrom"; "require-import-from" ] ~docv:"FROM,LIBRARY" ~doc)) + let fcc_cmd : unit Cmd.t = let doc = "Flèche Coq Compiler" in let man = @@ -111,7 +124,7 @@ let fcc_cmd : unit Cmd.t = let fcc_term = Term.( const fcc_main $ roots $ display $ debug $ plugins $ file $ coqlib - $ coqcorelib $ ocamlpath $ rload_path $ load_path) + $ coqcorelib $ ocamlpath $ rload_path $ load_path $ rifrom) in Cmd.(v (Cmd.info "fcc" ~version ~doc ~man) fcc_term) diff --git a/controller/coq_lsp.ml b/controller/coq_lsp.ml index d241ae05..31ae7075 100644 --- a/controller/coq_lsp.ml +++ b/controller/coq_lsp.ml @@ -89,7 +89,8 @@ let rec lsp_init_loop ~ifn ~ofn ~cmdline ~debug = | Init_effect.Loop -> lsp_init_loop ~ifn ~ofn ~cmdline ~debug | Init_effect.Success w -> w) -let lsp_main bt coqcorelib coqlib ocamlpath vo_load_path ml_include_path delay = +let lsp_main bt coqcorelib coqlib ocamlpath vo_load_path ml_include_path + require_libraries delay = (* Try to be sane w.r.t. \r\n in Windows *) Stdlib.set_binary_mode_in stdin true; Stdlib.set_binary_mode_out stdout true; @@ -116,6 +117,7 @@ let lsp_main bt coqcorelib coqlib ocamlpath vo_load_path ml_include_path delay = ; vo_load_path ; ml_include_path ; args = [] + ; require_libraries } in @@ -231,6 +233,18 @@ let ml_include_path : string list Term.t = Arg.( value & opt_all dir [] & info [ "I"; "ml-include-path" ] ~docv:"DIR" ~doc) +let rifrom : (string option * string) list Term.t = + let doc = + "FROM Require Import LIBRARY before creating the document, à la From Coq \ + Require Import Prelude" + in + Term.( + const (List.map (fun (x, y) -> (Some x, y))) + $ Arg.( + value + & opt_all (pair string string) [] + & info [ "rifrom"; "require-import-from" ] ~docv:"FROM,LIBRARY" ~doc)) + let delay : float Term.t = let doc = "Delay value in seconds when server is idle" in Arg.(value & opt float 0.1 & info [ "D"; "idle-delay" ] ~docv:"DELAY" ~doc) @@ -253,7 +267,7 @@ let lsp_cmd : unit Cmd.t = (Cmd.info "coq-lsp" ~version:Fleche.Version.server ~doc ~man) Term.( const lsp_main $ bt $ coqcorelib $ coqlib $ ocamlpath $ vo_load_path - $ ml_include_path $ delay)) + $ ml_include_path $ rifrom $ delay)) let main () = let ecode = Cmd.eval lsp_cmd in diff --git a/controller/lsp_core.ml b/controller/lsp_core.ml index b1848906..0b9f1d30 100644 --- a/controller/lsp_core.ml +++ b/controller/lsp_core.ml @@ -25,7 +25,6 @@ module U = Yojson.Safe.Util let field name dict = List.(assoc name dict) let int_field name dict = U.to_int (field name dict) -let dict_field name dict = U.to_assoc (field name dict) let list_field name dict = U.to_list (field name dict) let string_field name dict = U.to_string (field name dict) let ofield name dict = List.(assoc_opt name dict) @@ -70,10 +69,18 @@ module Helpers = struct let Lsp.Doc.VersionedTextDocumentIdentifier.{ uri; version } = document in (uri, version) - let get_position params = - let pos = dict_field "position" params in + let lsp_position_to_tuple (pos : J.t) = + let pos = U.to_assoc pos in let line, character = (int_field "line" pos, int_field "character" pos) in (line, character) + + let get_position params = + let pos = field "position" params in + lsp_position_to_tuple pos + + let get_position_array params = + let pos_list = list_field "positions" params in + List.map lsp_position_to_tuple pos_list end (** LSP loop internal state: mainly the data needed to create a new document. In @@ -108,7 +115,17 @@ module State = struct let dir = Lang.LUri.File.to_string_file uri in { state with workspaces = List.remove_assoc dir state.workspaces } - let is_in_dir ~dir ~file = CString.is_prefix dir file + let split_in_components path = + let phase1 = String.split_on_char '/' path in + let phase2 = List.map (String.split_on_char '\\') phase1 in + List.concat phase2 + + (* This is a bit more tricky in Windows, due to \ vs / paths appearing, so we + need to first split the dir *) + let is_in_dir ~dir ~file = + let dir_c = split_in_components dir in + let file_c = split_in_components file in + CList.prefix_of String.equal dir_c file_c let workspace_of_uri ~uri ~state = let { root_state; workspaces; _ } = state in @@ -276,8 +293,24 @@ let do_position_request ~postpone ~params ~handler = Rq.Action.Data (Request.Data.PosRequest { uri; handler; point; version; postpone }) +(* For now we only pick the first item *) +let do_position_list_request ~postpone ~params ~handler = + let uri, version = Helpers.get_uri_oversion params in + let points = Helpers.get_position_array params in + match points with + | [] -> + let point, handler = ((0, 0), Request.empty) in + Rq.Action.Data + (Request.Data.PosRequest { uri; handler; point; version; postpone }) + | point :: _ -> + Rq.Action.Data + (Request.Data.PosRequest { uri; handler; point; version; postpone }) + let do_hover = do_position_request ~postpone:false ~handler:Rq_hover.hover +let do_selectionRange = + do_position_list_request ~postpone:false ~handler:Rq_selectionRange.request + (* We get the format from the params *) let get_pp_format_from_config () = match !Fleche.Config.v.pp_type with @@ -297,9 +330,12 @@ let get_pp_format params = get_pp_format_from_config () | None -> get_pp_format_from_config () +let get_pretac params = ostring_field "pretac" params + let do_goals ~params = let pp_format = get_pp_format params in - let handler = Rq_goals.goals ~pp_format in + let pretac = get_pretac params in + let handler = Rq_goals.goals ~pp_format ?pretac () in do_position_request ~postpone:true ~handler ~params let do_definition = @@ -420,6 +456,7 @@ let dispatch_request ~method_ ~params : Rq.Action.t = | "textDocument/documentSymbol" -> do_symbols ~params | "textDocument/hover" -> do_hover ~params | "textDocument/codeLens" -> do_lens ~params + | "textDocument/selectionRange" -> do_selectionRange ~params (* Proof-specific stuff *) | "proof/goals" -> do_goals ~params (* Proof-specific stuff *) diff --git a/controller/request.ml b/controller/request.ml index 70c324ab..e6da1057 100644 --- a/controller/request.ml +++ b/controller/request.ml @@ -58,3 +58,5 @@ module Data = struct | PosRequest { uri = _; point; version = _; postpone = _; handler } -> handler ~point ~doc end + +let empty ~doc:_ ~point:_ = Ok (`List []) diff --git a/controller/request.mli b/controller/request.mli index d97c5a89..312cbfc6 100644 --- a/controller/request.mli +++ b/controller/request.mli @@ -42,3 +42,5 @@ module Data : sig val dm_request : t -> Fleche.Theory.Request.request val serve : doc:Fleche.Doc.t -> t -> R.t end + +val empty : position diff --git a/controller/rq_goals.ml b/controller/rq_goals.ml index c9d9dc13..35c7027e 100644 --- a/controller/rq_goals.ml +++ b/controller/rq_goals.ml @@ -35,26 +35,55 @@ let pp ~pp_format pp = | Pp -> Lsp.JCoq.Pp.to_yojson pp | Str -> `String (Pp.string_of_ppcmds pp) -let get_goals_info ~doc ~point = +(* XXX: Speculative execution here requires more thought, about errors, + location, we need to make the request fail if it is not good, etc... Moreover + we should tune whether we cache the results; we try this for now. *) +let parse_and_execute_in tac st = + (* Parse tac, loc==FIXME *) + let str = Gramlib.Stream.of_string tac in + let str = Coq.Parsing.Parsable.make ?loc:None str in + match Coq.Parsing.parse ~st str with + | Coq.Protect.E.{ r = Interrupted; feedback = _ } + | Coq.Protect.E.{ r = Completed (Error _); feedback = _ } + | Coq.Protect.E.{ r = Completed (Ok None); feedback = _ } -> None + | Coq.Protect.E.{ r = Completed (Ok (Some ast)); feedback = _ } -> ( + let open Fleche.Memo in + (* XXX use the bind in Coq.Protect.E *) + match (Interp.eval (st, ast)).res with + | Coq.Protect.E.{ r = Interrupted; feedback = _ } + | Coq.Protect.E.{ r = Completed (Error _); feedback = _ } -> None + | Coq.Protect.E.{ r = Completed (Ok st); feedback = _ } -> Some st) + +let run_pretac ?pretac st = + match pretac with + | None -> + (* Debug option *) + (* Lsp.Io.trace "goals" "pretac empty"; *) + Some st + | Some tac -> Fleche.Info.in_state ~st ~f:(parse_and_execute_in tac) st + +let get_goal_info ~doc ~point ?pretac () = let open Fleche in let goals_mode = get_goals_mode () in let node = Info.LC.node ~doc ~point goals_mode in match node with | None -> (None, None) - | Some node -> - let st = node.Doc.Node.state in - let goals = Info.Goals.goals ~st in - let program = Info.Goals.program ~st in - (goals, Some program) + | Some node -> ( + match run_pretac ?pretac node.Doc.Node.state with + | None -> (None, None) + | Some st -> + let goals = Info.Goals.goals ~st in + let program = Info.Goals.program ~st in + (goals, Some program)) -let goals ~pp_format ~doc ~point = +let goals ~pp_format ?pretac () ~doc ~point = let open Fleche in let uri, version = (doc.Doc.uri, doc.version) in let textDocument = Lsp.Doc.VersionedTextDocumentIdentifier.{ uri; version } in let position = Lang.Point.{ line = fst point; character = snd point; offset = -1 } in - let goals, program = get_goals_info ~doc ~point in + let goals, program = get_goal_info ~doc ~point ?pretac () in let node = Info.LC.node ~doc ~point Exact in let messages = mk_messages node in let error = Option.bind node mk_error in diff --git a/controller/rq_goals.mli b/controller/rq_goals.mli index 4dec5e68..08d9670f 100644 --- a/controller/rq_goals.mli +++ b/controller/rq_goals.mli @@ -9,4 +9,6 @@ type format = | Pp | Str -val goals : pp_format:format -> Request.position +(** [goals ~pp_format ?pretac] Serve goals at point; users can request + pre-processing and formatting using the provided parameters. *) +val goals : pp_format:format -> ?pretac:string -> unit -> Request.position diff --git a/controller/rq_hover.ml b/controller/rq_hover.ml index be9110c0..5635465c 100644 --- a/controller/rq_hover.ml +++ b/controller/rq_hover.ml @@ -173,7 +173,7 @@ module type HoverProvider = sig end module Loc_info : HoverProvider = struct - let enabled = false + let enabled = true let h ~contents:_ ~point:_ ~node = match node with diff --git a/controller/rq_init.ml b/controller/rq_init.ml index eff20ec3..29a7adaf 100644 --- a/controller/rq_init.ml +++ b/controller/rq_init.ml @@ -128,6 +128,7 @@ let do_initialize ~params = ] ) ; ("definitionProvider", `Bool true) ; ("codeLensProvider", `Assoc []) + ; ("selectionRangeProvider", `Bool true) ; ( "workspace" , `Assoc [ ( "workspaceFolders" diff --git a/controller/rq_selectionRange.ml b/controller/rq_selectionRange.ml new file mode 100644 index 00000000..96016d4e --- /dev/null +++ b/controller/rq_selectionRange.ml @@ -0,0 +1,26 @@ +(************************************************************************) +(* * The Coq Proof Assistant / The Coq Development Team *) +(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) +(* Ok `Null + | Some node -> + let range = Fleche.Doc.Node.range node in + let parent = None in + let answer = Lsp.Core.SelectionRange.({ range; parent } |> to_yojson) in + Ok (`List [ answer ]) diff --git a/controller/rq_selectionRange.mli b/controller/rq_selectionRange.mli new file mode 100644 index 00000000..45983b03 --- /dev/null +++ b/controller/rq_selectionRange.mli @@ -0,0 +1,18 @@ +(************************************************************************) +(* * The Coq Proof Assistant / The Coq Development Team *) +(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) +(* else_ -let rec parse_args args init boot f w = +let rec parse_args args init boot libs f w = match args with - | [] -> (init, boot, f, List.rev w) + | [] -> (init, boot, List.rev libs, f, List.rev w) + | "-rifrom" :: from :: lib :: rest -> + parse_args rest init boot ((Some from, lib) :: libs) f w | "-indices-matter" :: rest -> - parse_args rest init boot { f with Flags.indices_matter = true } w + parse_args rest init boot libs { f with Flags.indices_matter = true } w | "-impredicative-set" :: rest -> - parse_args rest init boot { f with Flags.impredicative_set = true } w - | "-noinit" :: rest -> parse_args rest false boot f w - | "-boot" :: rest -> parse_args rest init true f w + parse_args rest init boot libs { f with Flags.impredicative_set = true } w + | "-noinit" :: rest -> parse_args rest false boot libs f w + | "-boot" :: rest -> parse_args rest init true libs f w | "-w" :: warn :: rest -> let warn = Warning.make warn in - parse_args rest init boot f (warn :: w) + parse_args rest init boot libs f (warn :: w) | _ :: rest -> (* emit warning? *) - parse_args rest init boot f w + parse_args rest init boot libs f w module CmdLine = struct type t = @@ -104,9 +106,12 @@ module CmdLine = struct ; vo_load_path : Loadpath.vo_path list ; ml_include_path : string list ; args : string list + ; require_libraries : (string option * string) list } end +let mk_require_from (from, lib) = (lib, from, Some (Lib.Import, None)) + let make ~cmdline ~implicit ~kind ~debug = let { CmdLine.coqcorelib ; coqlib @@ -114,14 +119,15 @@ let make ~cmdline ~implicit ~kind ~debug = ; args ; ml_include_path ; vo_load_path + ; require_libraries } = cmdline in let coqcorelib = getenv "COQCORELIB" coqcorelib in let coqlib = getenv "COQLIB" coqlib in let mk_path_coqlib prefix = coqlib ^ "/" ^ prefix in - let init, boot, flags, warnings = - parse_args args true false Flags.default [] + let init, boot, libs, flags, warnings = + parse_args args true false [] Flags.default [] in (* Setup ml_include for the core plugins *) let dft_ml_include_path, dft_vo_load_path = @@ -137,7 +143,11 @@ let make ~cmdline ~implicit ~kind ~debug = stdlib_vo_path :: user_vo_path ) in let require_libs = - if init then [ ("Coq.Init.Prelude", None, Some (Lib.Import, None)) ] else [] + let rq_list = + if init then ((None, "Coq.Init.Prelude") :: require_libraries) @ libs + else require_libraries @ libs + in + List.map mk_require_from rq_list in let vo_load_path = dft_vo_load_path @ vo_load_path in let ml_include_path = dft_ml_include_path @ ml_include_path in diff --git a/coq/workspace.mli b/coq/workspace.mli index f6494856..b2fcd706 100644 --- a/coq/workspace.mli +++ b/coq/workspace.mli @@ -63,6 +63,7 @@ module CmdLine : sig ; vo_load_path : Loadpath.vo_path list ; ml_include_path : string list ; args : string list + ; require_libraries : (string option * string) list (** Library, From *) } end diff --git a/editor/code/CHANGELOG.md b/editor/code/CHANGELOG.md index a199fe16..b5eee4a5 100644 --- a/editor/code/CHANGELOG.md +++ b/editor/code/CHANGELOG.md @@ -1,3 +1,64 @@ +# coq-lsp 0.1.8: Trick-or-treat +------------------------------- + + - Update VSCode client dependencies, should bring some performance + improvements to goal pretty printing (@ejgallego, #530) + - Update goal display colors for light mode so they are actually + readable now. (@bhaktishh, #539, fixes #532) + - Added link to Python coq-lsp client by Pedro Carrot and Nuno + Saavedra (@Nfsaavedra, #536) + - Properly concatenate warnings from _CoqProject (@ejgallego, + reported by @mituharu, #541, fixes #540) + - Fix broken `coq/saveVo` and `coq/getDocument` requests due to a + parsing problem with extra fields in their requests (@ejgallego, + #547, reported by @Zimmi48) + - `fcc` now understands the `--coqlib`, `--coqcorelib`, + `--ocamlpath`, `-Q` and `-R` arguments (@ejgallego, #555) + - Describe findlib status in `Workspace.describe`, which is printed + in the output windows (@ejgallego, #556) + - `coq-lsp` plugin loader will now be strict in case of a plugin + failure, the previous loose behavior was more convenient for the + early releases, but it doesn't make sense now and made things + pretty hard to debug on the Windows installer (@ejgallego, #557) + - Add pointers to Windows installers (@ejgallego, #559) + - Recognize `Goal` and `Definition $id : ... .` as proof starters + (@ejgallego, #561, reported by @Zimmi48, fixes #548) + - Provide basic notation information on hover. This is intended for + people to build their own more refined notation feedback systems + (@ejgallego, #562) + - Hover request can now be extended by plugins (@ejgallego, #562) + - Updated LSP and JS client libs, notably to vscode-languageclient 9 + (@ejgallego, #565) + - Implement a LIFO document scheduler, this is heavier in the + background as more documents will be checked, but provides a few + usability improvements (@ejgallego, #566, fixes #563, reported by + Ali Caglayan) + - New lexical qed detection error recovery rule; this makes a very + large usability difference in practice when editing inside proofs. + (@ejgallego, #567, fixes #33) + - `coq-lsp` is now supported by the `coq-nix-toolbox` (@Zimmi48, + @CohenCyril, #572, via + https://github.com/coq-community/coq-nix-toolbox/pull/164 ) + - Support for `-rifrom` in `_CoqProject` and in command line + (`--rifrom`). Thanks to Lasse Blaauwbroek for the report. + (@ejgallego, #581, fixes #579) + - Export Query Goals API in VSCode client; this way other extensions + can implement their own commands that query Coq goals (@amblafont, + @ejgallego, #576, closes #558) + - New `pretac` field for preprocessing of goals with a tactic using + speculative execution, this is experimental for now (@amblafont, + @ejgallego, #573, helps with #558) + - Implement `textDocument/selectionRange` request, that will return + the range of the Coq sentence underlying the cursor. In VSCode, + this is triggered by the "Expand Selection" command. The + implementation is partial: we only take into account the first + position, and we only return a single range (Coq sentence) without + parents. (@ejgallego, #582) + - Be more robust to mixed-separator windows paths in workspace + detection (@ejgallego, #583, fixes #569) + - Adjust printing breaks in error and message panels (@ejgallego, + @Alizter, #586, fixes #457 , fixes #458 , fixes #571) + # coq-lsp 0.1.7: Just-in-time ----------------------------- diff --git a/editor/code/lib/types.ts b/editor/code/lib/types.ts index 11828445..d0cf2166 100644 --- a/editor/code/lib/types.ts +++ b/editor/code/lib/types.ts @@ -69,6 +69,7 @@ export interface GoalRequest { textDocument: VersionedTextDocumentIdentifier; position: Position; pp_format?: "Pp" | "Str"; + pretac?: string; } export type Pp = diff --git a/editor/code/package-lock.json b/editor/code/package-lock.json index 75a49c8d..d7c254a9 100644 --- a/editor/code/package-lock.json +++ b/editor/code/package-lock.json @@ -1,12 +1,12 @@ { "name": "coq-lsp", - "version": "0.1.7", + "version": "0.1.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "coq-lsp", - "version": "0.1.7", + "version": "0.1.8", "dependencies": { "@vscode/webview-ui-toolkit": "^1.2.2", "jquery": "^3.7.1", @@ -26,6 +26,7 @@ "@types/throttle-debounce": "^5.0.0", "@types/vscode": "^1.75.0", "@types/vscode-webview": "^1.57.2", + "@vscode/vsce": "^2.21.1", "esbuild": "^0.16.17", "prettier": "^3.0.3", "typescript": "^5.2.2" @@ -392,9 +393,9 @@ "integrity": "sha512-gQutuDHPKNxUEcQ4pypZT4Wmrbapus+P9s3bR/SEOLsMbNqNoXigGImITygI5zhb+aA5rzflM6O8YWkmRbGkPA==" }, "node_modules/@microsoft/fast-foundation": { - "version": "2.49.1", - "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.1.tgz", - "integrity": "sha512-dSajlZeX+lkqjg4108XbIIhVLECgJTCG32bE8P6rNgo8XCPHVJBDiBejrF34lv5pO9Z2uGORZjeip/N0fPib+g==", + "version": "2.49.2", + "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.2.tgz", + "integrity": "sha512-xA7WP/Td33SW0zkpHRH5LUDxyLOPnPQQXieRxc080uLWxoGXhVxo6Rz7b6qwiL+e2IadNCm7X7KcrgsUhJwvBg==", "dependencies": { "@microsoft/fast-element": "^1.12.0", "@microsoft/fast-web-utilities": "^5.4.1", @@ -423,36 +424,36 @@ } }, "node_modules/@types/jquery": { - "version": "3.5.20", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.20.tgz", - "integrity": "sha512-UI+EGhgYD4LdSZ8gaiziFqXYIIB38VQSDsnAs8jL/div7FGrzrShx4HKCykVzk3tPfiIlusdNP9Wi3G60LCF2Q==", + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.25.tgz", + "integrity": "sha512-gykx2c+OZf5nx2tv/5fDQqmvGgTiXshELy5jf9IgXPtVfSBl57IUYByN4osbwMXwJijWGOEYQABzGaFZE79A0Q==", "dev": true, "dependencies": { "@types/sizzle": "*" } }, "node_modules/@types/node": { - "version": "18.18.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.1.tgz", - "integrity": "sha512-3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ==", + "version": "18.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", + "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==", "dev": true }, "node_modules/@types/object-hash": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-3.0.4.tgz", - "integrity": "sha512-w4fEy2suq1bepUxHoJRCBHJz0vS5DPAYpSbcgNwOahljxwyJsiKmi8qyes2/TJc+4Avd7fsgP+ZgUuXZjPvdug==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-3.0.5.tgz", + "integrity": "sha512-WFGeSazfL5BWbEh5ACaAIs5RT6sbVIwBs1rgHUp+kZzX/gub41LEEYWTWbYnE/sKb7hDdPEsGa1Vmcaay2fS5g==", "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", - "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==", + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", "dev": true }, "node_modules/@types/react": { - "version": "18.2.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.24.tgz", - "integrity": "sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==", + "version": "18.2.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.32.tgz", + "integrity": "sha512-F0FVIZQ1x5Gxy/VYJb7XcWvCcHR28Sjwt1dXLspdIatfPq1MVACfnBDwKe6ANLxQ64riIJooXClpUR6oxTiepg==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -461,44 +462,103 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz", - "integrity": "sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==", + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.4.tgz", - "integrity": "sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.5.tgz", + "integrity": "sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==", "dev": true }, "node_modules/@types/throttle-debounce": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.0.tgz", - "integrity": "sha512-Pb7k35iCGFcGPECoNE4DYp3Oyf2xcTd3FbFQxXUI9hEYKUl6YX+KLf7HrBmgVcD05nl50LIH6i+80js4iYmWbw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.1.tgz", + "integrity": "sha512-/fifasjlhpz/r4YsH0r0ZXJvivXFB3F6bmezMnqgsn/NK/fYJn7vN84k7eYn/oALu/aenXo+t8Pv+QlkS6iYBg==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.82.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.82.0.tgz", - "integrity": "sha512-VSHV+VnpF8DEm8LNrn8OJ8VuUNcBzN3tMvKrNpbhhfuVjFm82+6v44AbDhLvVFgCzn6vs94EJNTp7w8S6+Q1Rw==", + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.83.1.tgz", + "integrity": "sha512-BHu51NaNKOtDf3BOonY3sKFFmZKEpRkzqkZVpSYxowLbs5JqjOQemYFob7Gs5rpxE5tiGhfpnMpcdF/oKrLg4w==", "dev": true }, "node_modules/@types/vscode-webview": { - "version": "1.57.2", - "resolved": "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.2.tgz", - "integrity": "sha512-RpkIso3+FVoi9hFwHj9uBFO+9p8PGym0LnLJ9Yabo9mUJaV39CzOxz6EVtHg8AidA9hAf4cVmG0c+l9pvw6Lbw==", + "version": "1.57.3", + "resolved": "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.3.tgz", + "integrity": "sha512-8at2UVGjA/6gcLOay+J8wOars6VsDqAqPxRHYihH0XFUaXt+2AZ+Hd9hSoUbnhjicb6V1xe7rfjb7j4Ri2n1fg==", "dev": true }, + "node_modules/@vscode/vsce": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.21.1.tgz", + "integrity": "sha512-f45/aT+HTubfCU2oC7IaWnH9NjOWp668ML002QiFObFRVUCoLtcwepp9mmql/ArFUy+HCHp54Xrq4koTcOD6TA==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.2.1", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@vscode/vsce/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@vscode/webview-ui-toolkit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", @@ -512,11 +572,78 @@ "react": ">=16.9.0" } }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -525,12 +652,304 @@ "balanced-match": "^1.0.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/esbuild": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", @@ -568,11 +987,269 @@ "@esbuild/win32-x64": "0.16.17" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/exenv-es6": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", @@ -583,6 +1260,42 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -605,6 +1318,62 @@ "node": ">=10" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -616,6 +1385,68 @@ "node": ">=10" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/node-abi": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -624,6 +1455,109 @@ "node": ">= 6" } }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -639,6 +1573,48 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -662,6 +1638,75 @@ "react": "^18.2.0" } }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -684,11 +1729,149 @@ "node": ">=10" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/tabbable": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/throttle-debounce": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", @@ -697,11 +1880,56 @@ "node": ">=12.22" } }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, "node_modules/typescript": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", @@ -715,6 +1943,31 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "optional": true + }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -750,10 +2003,57 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } } } } diff --git a/editor/code/package.json b/editor/code/package.json index e88553a3..f66fddc1 100644 --- a/editor/code/package.json +++ b/editor/code/package.json @@ -2,7 +2,7 @@ "name": "coq-lsp", "displayName": "Coq LSP", "description": "Coq LSP provides native vsCode support for checking Coq proof documents", - "version": "0.1.7", + "version": "0.1.8", "contributors": [ "Emilio Jesús Gallego Arias ", "Ali Caglayan ", @@ -287,7 +287,8 @@ "@types/vscode-webview": "^1.57.2", "esbuild": "^0.16.17", "prettier": "^3.0.3", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "@vscode/vsce": "^2.21.1" }, "dependencies": { "@vscode/webview-ui-toolkit": "^1.2.2", diff --git a/editor/code/src/client.ts b/editor/code/src/client.ts index 5981b61f..313e777b 100644 --- a/editor/code/src/client.ts +++ b/editor/code/src/client.ts @@ -25,9 +25,12 @@ import { FlecheDocumentParams, FlecheDocument, FlecheSaveParams, + GoalRequest, + GoalAnswer, + PpString, } from "../lib/types"; import { CoqLspClientConfig, CoqLspServerConfig } from "./config"; -import { InfoPanel } from "./goals"; +import { InfoPanel, goalReq } from "./goals"; import { FileProgressManager } from "./progress"; import { coqPerfData, PerfDataView } from "./perf"; @@ -54,10 +57,19 @@ export type ClientFactoryType = ( wsConfig: WorkspaceConfiguration ) => BaseLanguageClient; +// Extension API type (note this doesn't live in `lib` as this is VSCode specific) +export interface CoqLspAPI { + /** + * Query goals from Coq + * @param params goal request parameters + */ + goalsRequest(params: GoalRequest): Promise>; +} + export function activateCoqLSP( context: ExtensionContext, clientFactory: ClientFactoryType -): void { +): CoqLspAPI { window.showInformationMessage("Coq LSP Extension: Going to activate!"); function coqCommand(command: string, fn: () => void) { @@ -317,7 +329,14 @@ export function activateCoqLSP( createEnableButton(); start(); + + return { + goalsRequest: (params) => { + return client.sendRequest(goalReq, params); + }, + }; } + export function deactivateCoqLSP(): Thenable | undefined { if (!client) { return undefined; diff --git a/editor/code/src/goals.ts b/editor/code/src/goals.ts index 405ea840..845e74fb 100644 --- a/editor/code/src/goals.ts +++ b/editor/code/src/goals.ts @@ -14,7 +14,7 @@ import { } from "vscode-languageclient"; import { GoalRequest, GoalAnswer, PpString } from "../lib/types"; -const infoReq = new RequestType, void>( +export const goalReq = new RequestType, void>( "proof/goals" ); @@ -101,7 +101,7 @@ export class InfoPanel { // LSP Protocol extension for Goals sendGoalsRequest(client: BaseLanguageClient, params: GoalRequest) { this.requestSent(params); - client.sendRequest(infoReq, params).then( + client.sendRequest(goalReq, params).then( (goals) => this.requestDisplay(goals), (reason) => this.requestError(reason) ); @@ -110,7 +110,7 @@ export class InfoPanel { sendVizxRequest(client: BaseLanguageClient, params: GoalRequest) { this.requestSent(params); console.log(params.pp_format); - client.sendRequest(infoReq, params).then( + client.sendRequest(goalReq, params).then( (goals) => this.requestVizxDisplay(goals), (reason) => this.requestError(reason) ); @@ -126,6 +126,8 @@ export class InfoPanel { uri.toString(), version ); + // let pretac = "idtac."; + // let cursor: GoalRequest = { textDocument, position, pretac }; let cursor: GoalRequest = { textDocument, position }; let strCursor: GoalRequest = { textDocument, diff --git a/editor/code/src/node.ts b/editor/code/src/node.ts index 34e3b1ad..3f2a65c2 100644 --- a/editor/code/src/node.ts +++ b/editor/code/src/node.ts @@ -1,8 +1,13 @@ import { ExtensionContext } from "vscode"; import { LanguageClient, ServerOptions } from "vscode-languageclient/node"; -import { activateCoqLSP, ClientFactoryType, deactivateCoqLSP } from "./client"; +import { + activateCoqLSP, + ClientFactoryType, + CoqLspAPI, + deactivateCoqLSP, +} from "./client"; -export function activate(context: ExtensionContext): void { +export function activate(context: ExtensionContext): CoqLspAPI { const cf: ClientFactoryType = (context, clientOptions, wsConfig) => { const serverOptions: ServerOptions = { command: wsConfig.path, diff --git a/editor/code/views/info/ErrorBrowser.tsx b/editor/code/views/info/ErrorBrowser.tsx index 964968fa..cb533baf 100644 --- a/editor/code/views/info/ErrorBrowser.tsx +++ b/editor/code/views/info/ErrorBrowser.tsx @@ -1,13 +1,25 @@ import { PpString } from "../../lib/types"; import { CoqPp } from "./CoqPp"; +import { FormatPrettyPrint } from "../../lib/format-pprint/js/main"; +import $ from "jquery"; +import { useLayoutEffect, useRef } from "react"; export type ErrorBrowserParams = { error: PpString }; export function ErrorBrowser({ error }: ErrorBrowserParams) { + const ref: React.LegacyRef | null = useRef(null); + useLayoutEffect(() => { + if (ref.current) { + FormatPrettyPrint.adjustBreaks($(ref.current)); + } + }); + return ( <>
Errors:
- ; +
+ ; +
); } diff --git a/editor/code/views/info/Message.tsx b/editor/code/views/info/Message.tsx index 3218ec86..1b3e2334 100644 --- a/editor/code/views/info/Message.tsx +++ b/editor/code/views/info/Message.tsx @@ -1,7 +1,10 @@ // import objectHash from "object-hash"; +import { useLayoutEffect, useRef } from "react"; import { Message } from "../../lib/types"; import { PpString } from "../../lib/types"; import { CoqPp } from "./CoqPp"; +import { FormatPrettyPrint } from "../../lib/format-pprint/js/main"; +import $ from "jquery"; export function Message({ key, @@ -10,6 +13,13 @@ export function Message({ key: React.Key; message: PpString | Message; }) { + const ref: React.LegacyRef | null = useRef(null); + useLayoutEffect(() => { + if (ref.current) { + FormatPrettyPrint.adjustBreaks($(ref.current)); + } + }); + let text = typeof message === "string" ? message @@ -18,7 +28,7 @@ export function Message({ : message; return ( -
  • +
  • ); diff --git a/editor/code/views/info/media/goals.css b/editor/code/views/info/media/goals.css index 15838b7a..6c520206 100644 --- a/editor/code/views/info/media/goals.css +++ b/editor/code/views/info/media/goals.css @@ -53,8 +53,18 @@ p.num-goals + p.aside { margin-bottom: 1em; } +/* XXX: We need to handle the white-space: pre that all Pp stuff needs + better */ .coq-goal-env { padding-top: 1ex; padding-bottom: 1ex; white-space: pre; } + +.coq-message { + white-space: pre; +} + +.coq-error { + white-space: pre; +} diff --git a/etc/doc/PROTOCOL.md b/etc/doc/PROTOCOL.md index 4c54a85a..a28bbf3a 100644 --- a/etc/doc/PROTOCOL.md +++ b/etc/doc/PROTOCOL.md @@ -45,6 +45,7 @@ If a feature doesn't appear here it usually means it is not planned in the short | `textDocument/publishDiagnostics` | Yes | | | `textDocument/diagnostic` | No | Planned, issue #49 | | `textDocument/codeAction` | No | Planned | +| `textDocument/selectionRange` | Partial | We only take into account the first selection; no parents | |---------------------------------------|---------|------------------------------------------------------------| | `workspace/workspaceFolders` | Yes | Each folder should have a `_CoqProject` file at the root. | | `workspace/didChangeWorkspaceFolders` | Yes | | @@ -80,6 +81,7 @@ interface GoalRequest { textDocument: VersionedTextDocumentIdentifier; position: Position; pp_format?: 'Pp' | 'Str'; + pretac?: string; } ``` @@ -162,6 +164,7 @@ was the default. #### Changelog +- v0.1.8: new optional `pretac` field for post-processing, backwards compatible with 0.1.7 - v0.1.7: program information added, rest of fields compatible with 0.1.6 - v0.1.7: pp_format field added to request, backwards compatible - v0.1.6: the `Pp` parameter can now be either Coq's `Pp.t` type or `string` (default) diff --git a/examples/lists.mv b/examples/lists.mv index 659bbc59..cabef058 100644 --- a/examples/lists.mv +++ b/examples/lists.mv @@ -1,4 +1,4 @@ -### Welcome to Coq LSP +## Welcome to Coq LSP - You can edit this document as you please - Coq will recognize the code snippets as Coq @@ -9,6 +9,11 @@ From Coq Require Import List. Import ListNotations. ``` +### Here is a simple Proof about Lists +$$ + \forall~x~l, + \mathsf{rev}(l \mathrel{++} [x]) = x \mathrel{::} (\mathsf{rev}~l) +$$ ```coq Lemma rev_snoc_cons A : forall (x : A) (l : list A), rev (l ++ [x]) = x :: rev l. @@ -19,6 +24,7 @@ Proof. Qed. ``` +### Here is another proof depending on it Try to update _above_ and **below**: ```coq Theorem rev_rev A : forall (l : list A), rev (rev l) = l. @@ -31,3 +37,12 @@ Qed. ``` Please edit your code here! + +## Here we do some lambda terms, because we can! + +```coq +Inductive term := + | Var : nat -> term + | Abs : term -> term + | Lam : term -> term -> term. +``` diff --git a/examples/record_print.v b/examples/record_print.v new file mode 100644 index 00000000..c0105b07 --- /dev/null +++ b/examples/record_print.v @@ -0,0 +1,24 @@ +Record t : Type := { + carrier :> Type; + unit : carrier; + mult : carrier -> carrier -> carrier; + assoc : forall a b c, mult a (mult b c) = mult (mult a b) c; + unit_l : forall a, mult unit a = a; + unit_r : forall a, mult a unit = a; +}. + +Print t. + +Module A. +Axiom A : Type. +Axiom B : Type. +Axiom C : Type. +Axiom D : Type. +Axiom E : Type. +End A. + +Print A. + +Goal True /\ True /\ True /\ True /\ True /\ True /\ True /\ True /\ True /\ True /\ True. +apply I. +Qed. diff --git a/fleche/info.ml b/fleche/info.ml index 8a073511..687448d5 100644 --- a/fleche/info.ml +++ b/fleche/info.ml @@ -175,6 +175,8 @@ module Goals = struct let lemmas = Coq.State.lemmas ~st in Option.map (Coq.Goals.reify ~ppx) lemmas + (* We need to use [in_state] here due to printing not being pure, but we want + a better design here eventually *) let goals ~st = in_state ~st ~f:pr_goal st let program ~st = Coq.State.program ~st end diff --git a/fleche/info.mli b/fleche/info.mli index bcc44894..2abdcdf8 100644 --- a/fleche/info.mli +++ b/fleche/info.mli @@ -50,10 +50,11 @@ end module LC : S with module P := LineCol module O : S with module P := Offset -(** Helper to absorb errors in state change, needed due to the lack of proper - monad in Coq.Protect, to fix soon *) +(** Helper to absorb errors in state change to [None], needed due to the lack of + proper monad in Coq.Protect, to fix soon *) val in_state : st:Coq.State.t -> f:('a -> 'b option) -> 'a -> 'b option +(** We move towards a more modular design here, for preprocessing *) module Goals : sig val goals : st:Coq.State.t -> Pp.t Coq.Goals.reified_pp option diff --git a/fleche/version.ml b/fleche/version.ml index f5e42014..2d0a208b 100644 --- a/fleche/version.ml +++ b/fleche/version.ml @@ -12,6 +12,6 @@ type t = string (************************************************************************) (* UPDATE VERSION HERE *) -let server = "0.1.7" +let server = "0.1.8" (* UPDATE VERSION HERE *) (************************************************************************) diff --git a/lsp/core.ml b/lsp/core.ml index deb2d0bb..8d8b6164 100644 --- a/lsp/core.ml +++ b/lsp/core.ml @@ -115,6 +115,15 @@ module CodeLens = struct [@@deriving yojson] end +(** SelectionRange *) +module SelectionRange = struct + type t = + { range : Lang.Range.t + ; parent : t option [@default None] + } + [@@deriving yojson] +end + (** Pull Diagnostics *) module DocumentDiagnosticParams = struct type t = diff --git a/lsp/core.mli b/lsp/core.mli index e0a8dfec..7a6cdd8b 100644 --- a/lsp/core.mli +++ b/lsp/core.mli @@ -114,6 +114,15 @@ module CodeLens : sig [@@deriving yojson] end +(** SelectionRange *) +module SelectionRange : sig + type t = + { range : Lang.Range.t + ; parent : t option [@default None] + } + [@@deriving yojson] +end + (** Pull Diagnostics *) module DocumentDiagnosticParams : sig type t = diff --git a/test/CoqProject/_CoqProject b/test/CoqProject/_CoqProject index da0de778..3bf09db5 100644 --- a/test/CoqProject/_CoqProject +++ b/test/CoqProject/_CoqProject @@ -3,5 +3,6 @@ -arg -w -arg -local-declaration -arg -w -arg +non-primitive-record +-arg -rifrom -arg Coq.Lists -arg List test.v diff --git a/test/CoqProject/test.v b/test/CoqProject/test.v index ea6b2bcf..e7cd74d8 100644 --- a/test/CoqProject/test.v +++ b/test/CoqProject/test.v @@ -1,3 +1,5 @@ +Search _ list. + Variable (A : nat). Set Primitive Projections.