diff --git a/analysis/bin/main.ml b/analysis/bin/main.ml index 6ceca30c67..35ef579f41 100644 --- a/analysis/bin/main.ml +++ b/analysis/bin/main.ml @@ -130,11 +130,12 @@ let main () = | [_; "completion"; path; line; col; currentFile] -> printHeaderInfo path line col; if !Cfg.useRevampedCompletion then - Commands.completionRevamped ~debug ~path + let source = Files.readFile currentFile in + Commands.completionRevamped ~source ~debug ~path ~pos:(int_of_string line, int_of_string col) ~currentFile else - Commands.completion ~debug ~path + Commands.completion ~debug:true ~path ~pos:(int_of_string line, int_of_string col) ~currentFile | [_; "completionResolve"; path; modulePath] -> @@ -213,11 +214,11 @@ let main () = (Json.escape (CreateInterface.command ~path ~cmiFile)) | [_; "format"; path] -> Printf.printf "\"%s\"" (Json.escape (Commands.format ~path)) - | [_; "test"; path] -> Commands.test ~path + | [_; "test"; path] -> Commands.test ~path ~debug | [_; "test_revamped"; path; config_file_path] -> Packages.overrideConfigFilePath := Some config_file_path; Cfg.useRevampedCompletion := true; - Commands.test ~path + Commands.test ~path ~debug | args when List.mem "-h" args || List.mem "--help" args -> prerr_endline help | _ -> prerr_endline help; diff --git a/analysis/src/CodeFence.ml b/analysis/src/CodeFence.ml new file mode 100644 index 0000000000..8586421aa7 --- /dev/null +++ b/analysis/src/CodeFence.ml @@ -0,0 +1,125 @@ +(* Define a type for a range with start and finish indices *) +type range = {start: int; finish: int} + +(* --- Helper function to find the 0-based line index containing a given 0-based character index --- *) +let get_line_index_from_char_index code char_index = + let lines = String.split_on_char '\n' code in + let rec find_line_idx current_char_idx current_line_num remaining_lines = + match remaining_lines with + | [] -> + max 0 (current_line_num - 1) + (* If char_index is beyond the end, return last line index *) + | line :: tl -> + let line_length = String.length line in + (* Check if char_index is within the current line (including the newline char) *) + if + char_index >= current_char_idx + && char_index <= current_char_idx + line_length + then current_line_num + else + (* Move to the next line, account for the newline character (+1) *) + find_line_idx + (current_char_idx + line_length + 1) + (current_line_num + 1) tl + in + find_line_idx 0 0 lines + +(* --- Helper function to calculate the 0-based character index of the start of a given 0-based line index --- *) +let get_char_index_from_line_index code target_line_index = + let lines = String.split_on_char '\n' code in + let rec calculate_start_index_impl current_char_idx current_line_num + lines_to_process = + if current_line_num >= target_line_index then current_char_idx + else + match lines_to_process with + | [] -> current_char_idx (* Target line index is out of bounds *) + | line :: tl -> + (* Move past the current line and its newline character *) + calculate_start_index_impl + (current_char_idx + String.length line + 1) + (current_line_num + 1) tl + in + calculate_start_index_impl 0 0 lines + +(* --- Main formatting function --- *) +let format_code_snippet_cropped code (underline_range : range option) + lines_around_annotation = + let lines = String.split_on_char '\n' code in + let total_lines = List.length lines in + let formatted_output = Buffer.create (String.length code) in + (* Initial capacity *) + + (* Determine the central line index for cropping *) + let target_line_index = + match underline_range with + | Some {start; finish = _} -> get_line_index_from_char_index code start + | None -> 0 (* Default to first line if no annotations *) + in + + (* Determine the cropping window (0-based line indices) *) + let start_line_index = max 0 (target_line_index - lines_around_annotation) in + let end_line_index = + min (total_lines - 1) (target_line_index + lines_around_annotation) + in + + (* Keep track of the global character index corresponding to the start of the *current* line being iterated over *) + let current_char_index = ref 0 in + + (* Iterate through all original lines to correctly track current_char_index *) + List.iteri + (fun original_line_idx line -> + let line_length = String.length line in + (* Check if the current original line is within our cropping window *) + if + original_line_idx >= start_line_index + && original_line_idx <= end_line_index + then ( + let original_line_number = original_line_idx + 1 in + (* 1-based for display *) + let line_number_prefix = Printf.sprintf "%d + " original_line_number in + let prefix_length = String.length line_number_prefix in + + (* Add the code line *) + Buffer.add_string formatted_output line_number_prefix; + Buffer.add_string formatted_output line; + Buffer.add_char formatted_output '\n'; + + (* Prepare the annotation line buffer *) + let annotation_line_buffer = + Buffer.create (prefix_length + line_length) + in + Buffer.add_string annotation_line_buffer (String.make prefix_length ' '); + + (* Initial padding *) + let has_annotation_on_this_line = ref false in + + (* Check each character position within this line for annotations *) + for i = 0 to line_length - 1 do + let global_char_index = !current_char_index + i in + let annotation_char = ref ' ' in + (* Default to space *) + + (* Check for underline using Option.iter *) + Option.iter + (fun {start; finish} -> + if global_char_index >= start && global_char_index < finish then ( + annotation_char := '-' (* '¯' *); + (* Macron symbol *) + has_annotation_on_this_line := true)) + underline_range; + + Buffer.add_char annotation_line_buffer !annotation_char + done; + + (* Add the annotation line to the main output if needed *) + if !has_annotation_on_this_line then ( + Buffer.add_buffer formatted_output annotation_line_buffer; + Buffer.add_char formatted_output '\n')); + + (* Update the global character index to the start of the next line *) + (* This happens regardless of whether the line was in the cropped window *) + current_char_index := !current_char_index + line_length + 1 + (* +1 for the newline *)) + lines; + + Buffer.contents formatted_output diff --git a/analysis/src/Commands.ml b/analysis/src/Commands.ml index 0133eaaee7..1a9ee2dd71 100644 --- a/analysis/src/Commands.ml +++ b/analysis/src/Commands.ml @@ -1,7 +1,7 @@ -let completion ~debug ~path ~pos ~currentFile = +let completion ~(debug : bool) ~path ~pos ~currentFile = let completions = match - Completions.getCompletions ~debug ~path ~pos ~currentFile ~forHover:false + Completions.getCompletions debug ~path ~pos ~currentFile ~forHover:false with | None -> [] | Some (completions, full, _) -> @@ -11,9 +11,11 @@ let completion ~debug ~path ~pos ~currentFile = in completions |> Protocol.array |> print_endline -let completionRevamped ~debug ~path ~pos ~currentFile = +let completionRevamped ?(source = None) ~debug ~path ~pos ~currentFile = let completions = - match Completions.getCompletionsRevamped ~debug ~path ~pos ~currentFile with + match + Completions.getCompletionsRevamped ~source ~debug ~path ~pos ~currentFile + with | None -> [] | Some (completions, full, _) -> completions @@ -313,7 +315,7 @@ let format ~path = let diagnosticSyntax ~path = print_endline (Diagnostics.document_syntax ~path |> Protocol.array) -let test ~path = +let test ~path ~debug = Uri.stripPath := true; match Files.readFile path with | None -> assert false @@ -383,7 +385,9 @@ let test ~path = ^ string_of_int col); let currentFile = createCurrentFile () in if !Cfg.useRevampedCompletion then - completionRevamped ~debug:true ~path ~pos:(line, col) ~currentFile + let source = Files.readFile currentFile in + completionRevamped ~source ~debug ~path ~pos:(line, col) + ~currentFile else completion ~debug:true ~path ~pos:(line, col) ~currentFile; Sys.remove currentFile | "cre" -> diff --git a/analysis/src/Completions.ml b/analysis/src/Completions.ml index c810b63649..8214c21d9f 100644 --- a/analysis/src/Completions.ml +++ b/analysis/src/Completions.ml @@ -1,4 +1,4 @@ -let getCompletions ~debug ~path ~pos ~currentFile ~forHover = +let getCompletions (debug : bool) ~path ~pos ~currentFile ~forHover = let textOpt = Files.readFile currentFile in match textOpt with | None | Some "" -> None @@ -21,7 +21,7 @@ let getCompletions ~debug ~path ~pos ~currentFile ~forHover = in Some (completables, full, scope))) -let getCompletionsRevamped ~debug ~path ~pos ~currentFile = +let getCompletionsRevamped ?(source = None) ~debug ~path ~pos ~currentFile = let textOpt = Files.readFile currentFile in match textOpt with | None | Some "" -> None @@ -30,8 +30,32 @@ let getCompletionsRevamped ~debug ~path ~pos ~currentFile = CompletionFrontEndRevamped.completionWithParser ~debug ~path ~posCursor:pos ~currentFile ~text with - | None -> None + | None -> + source + |> Option.iter (fun _ -> + print_endline "Completion Frontend did not return completable"); + None | Some (completable, scope) -> ( + let _ = + match source with + | Some text -> ( + match SharedTypes.CompletableRevamped.try_loc completable with + | Some loc -> + let range = + CodeFence. + { + start = loc.Location.loc_start.pos_cnum; + finish = loc.Warnings.loc_end.pos_cnum; + } + in + Printf.printf "Found Completable: %s\n\n" + (SharedTypes.CompletableRevamped.toString completable); + CodeFence.format_code_snippet_cropped text (Some range) 3 + |> print_endline + | None -> ()) + | None -> () + in + (* Only perform expensive ast operations if there are completables *) match Cmt.loadFullCmtFromPath ~path with | None -> None diff --git a/analysis/src/Hover.ml b/analysis/src/Hover.ml index fe5a66613d..adc4eae6d1 100644 --- a/analysis/src/Hover.ml +++ b/analysis/src/Hover.ml @@ -150,7 +150,7 @@ let hoverWithExpandedTypes ~file ~package ~supportsMarkdownLinks typ = makes it (most often) work with unsaved content. *) let getHoverViaCompletions ~debug ~path ~pos ~currentFile ~forHover ~supportsMarkdownLinks = - match Completions.getCompletions ~debug ~path ~pos ~currentFile ~forHover with + match Completions.getCompletions debug ~path ~pos ~currentFile ~forHover with | None -> None | Some (completions, ({file; package} as full), scope) -> ( let rawOpens = Scope.getRawOpens scope in diff --git a/analysis/src/SharedTypes.ml b/analysis/src/SharedTypes.ml index 9968016ef8..57cb753ff9 100644 --- a/analysis/src/SharedTypes.ml +++ b/analysis/src/SharedTypes.ml @@ -793,6 +793,21 @@ module CompletableRevamped = struct | CextensionNode of string | Cdecorator of string | CdecoratorPayload of decoratorPayload + + let toString (t : t) = + match t with + | Cexpression _ -> "Cexpression" + | Cpattern _ -> "Cpattern" + | Cnone -> "Cnone" + | CextensionNode _ -> "CextensionNode" + | Cdecorator _ -> "Cdecorator" + | CdecoratorPayload _ -> "CdecoratorPayload" + + let try_loc (t : t) = + match t with + | Cexpression {typeLoc; _} -> Some typeLoc + | Cpattern {typeLoc; _} -> Some typeLoc + | _ -> None end module ScopeTypes = struct diff --git a/tests/analysis_new_tests/tests/package.json b/tests/analysis_new_tests/tests/package.json index 7b007bab40..990b5dac78 100644 --- a/tests/analysis_new_tests/tests/package.json +++ b/tests/analysis_new_tests/tests/package.json @@ -5,11 +5,14 @@ "scripts": { "build": "rescript", "clean": "rescript clean -with-deps", - "test": "yarn build && node test.js", - "test:update": "node --test-update-snapshots test.js" + "test": "yarn build && vitest run test.js", + "test:update": "vitest run -u test.js" }, "dependencies": { "@rescript/react": "link:../../dependencies/rescript-react", "rescript": "workspace:^" + }, + "devDependencies": { + "vitest": "3.1.2" } } diff --git a/tests/analysis_new_tests/tests/test.js b/tests/analysis_new_tests/tests/snapshots.test.js similarity index 88% rename from tests/analysis_new_tests/tests/test.js rename to tests/analysis_new_tests/tests/snapshots.test.js index f108164d74..f505233c54 100644 --- a/tests/analysis_new_tests/tests/test.js +++ b/tests/analysis_new_tests/tests/snapshots.test.js @@ -1,4 +1,4 @@ -import { test } from "node:test"; +import { test, expect } from "vitest"; import fs from "node:fs/promises"; import path from "node:path"; import { glob } from "glob"; @@ -116,7 +116,7 @@ await Promise.all( resFiles.forEach((file) => { const blockData = testBlocksPerFile.get(file.relativePath); for (const block of blockData) { - test(`${file.relativePath} - ${block.description}`, async (t) => { + test(`${file.relativePath} - ${block.description}`, async () => { // Run rescript-editor-analysis and capture output const analysisOutput = await new Promise((resolve, reject) => { const analysisCmd = spawn( @@ -153,7 +153,14 @@ resFiles.forEach((file) => { }); }); - t.assert.snapshot(analysisOutput.stdout); + // Construct snapshot path + const snapshotDir = path.join(testFilesDir, "__snapshots__"); + await fs.mkdir(snapshotDir, { recursive: true }); // Ensure snapshot dir exists + const snapshotFileName = `${file.relativePath}_${block.description.replace(/\\s+/g, "_")}.snap`; + const snapshotPath = path.join(snapshotDir, snapshotFileName); + + // Use Vitest's expect().toMatchFileSnapshot() + await expect(analysisOutput.stdout).toMatchFileSnapshot(snapshotPath); }); } }); diff --git a/tests/analysis_new_tests/tests/test.js.snapshot b/tests/analysis_new_tests/tests/test.js.snapshot deleted file mode 100644 index 2e617e1dfd..0000000000 --- a/tests/analysis_new_tests/tests/test.js.snapshot +++ /dev/null @@ -1,19 +0,0 @@ -exports[`RecordFieldCompletions.res - Record field completion in nested record 1`] = ` -"Complete /Users/zth/OSS/rescript-compiler/tests/analysis_new_tests/tests/test_files/.build/RecordFieldCompletions_1.res 1:38\\nposCursor:[1:38] posNoWhite:[1:37] Found expr:[1:8->1:38]\\nPackage opens Stdlib.place holder Pervasives.JsxModules.place holder\\nResolved opens 1 Stdlib\\n[{\\n \\"label\\": \\"test\\",\\n \\"kind\\": 5,\\n \\"tags\\": [],\\n \\"detail\\": \\"bool\\",\\n \\"documentation\\": {\\"kind\\": \\"markdown\\", \\"value\\": \\"\`\`\`rescript\\\\ntest: bool\\\\n\`\`\`\\\\n\\\\n\`\`\`rescript\\\\ntype nestedTestRecord = {\\\\n test: bool,\\\\n nested: {name: string, oneMoreLevel: {here: bool}},\\\\n}\\\\n\`\`\`\\"}\\n }, {\\n \\"label\\": \\"nested\\",\\n \\"kind\\": 5,\\n \\"tags\\": [],\\n \\"detail\\": \\"\\\\\\\\\\\\\\"nestedTestRecord.nested\\\\\\"\\",\\n \\"documentation\\": {\\"kind\\": \\"markdown\\", \\"value\\": \\"\`\`\`rescript\\\\nnested: \\\\\\\\\\\\\\"nestedTestRecord.nested\\\\\\"\\\\n\`\`\`\\\\n\\\\n\`\`\`rescript\\\\ntype nestedTestRecord = {\\\\n test: bool,\\\\n nested: {name: string, oneMoreLevel: {here: bool}},\\\\n}\\\\n\`\`\`\\"}\\n }]\\n\\n" -`; - -exports[`RecordFieldCompletions.res - Record field completion in nested record, another level 1`] = ` -"Complete /Users/zth/OSS/rescript-compiler/tests/analysis_new_tests/tests/test_files/.build/RecordFieldCompletions_2.res 1:45\\nposCursor:[1:45] posNoWhite:[1:44] Found expr:[1:8->1:45]\\nPackage opens Stdlib.place holder Pervasives.JsxModules.place holder\\nResolved opens 1 Stdlib\\n[{\\n \\"label\\": \\"name\\",\\n \\"kind\\": 5,\\n \\"tags\\": [],\\n \\"detail\\": \\"string\\",\\n \\"documentation\\": {\\"kind\\": \\"markdown\\", \\"value\\": \\"\`\`\`rescript\\\\nname: string\\\\n\`\`\`\\\\n\\\\n\`\`\`rescript\\\\ntype \\\\\\\\\\\\\\"nestedTestRecord.nested\\\\\\" = {\\\\n name: string,\\\\n oneMoreLevel: {here: bool},\\\\n}\\\\n\`\`\`\\"}\\n }, {\\n \\"label\\": \\"oneMoreLevel\\",\\n \\"kind\\": 5,\\n \\"tags\\": [],\\n \\"detail\\": \\"\\\\\\\\\\\\\\"nestedTestRecord.nested.oneMoreLevel\\\\\\"\\",\\n \\"documentation\\": {\\"kind\\": \\"markdown\\", \\"value\\": \\"\`\`\`rescript\\\\noneMoreLevel: \\\\\\\\\\\\\\"nestedTestRecord.nested.oneMoreLevel\\\\\\"\\\\n\`\`\`\\\\n\\\\n\`\`\`rescript\\\\ntype \\\\\\\\\\\\\\"nestedTestRecord.nested\\\\\\" = {\\\\n name: string,\\\\n oneMoreLevel: {here: bool},\\\\n}\\\\n\`\`\`\\"}\\n }]\\n\\n" -`; - -exports[`SwitchCaseCompletions.res - Empty case, array 1`] = ` -"Complete /Users/zth/OSS/rescript-compiler/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_1.res 4:4\\nposCursor:[4:4] posNoWhite:[4:2] Found expr:[3:8->6:1]\\nPackage opens Stdlib.place holder Pervasives.JsxModules.place holder\\nResolved opens 1 Stdlib\\n[{\\n \\"label\\": \\"[]\\",\\n \\"kind\\": 12,\\n \\"tags\\": [],\\n \\"detail\\": \\"array\\",\\n \\"documentation\\": null,\\n \\"sortText\\": \\"A\\",\\n \\"insertText\\": \\"[$0]\\",\\n \\"insertTextFormat\\": 2\\n }]\\n\\n" -`; - -exports[`SwitchCaseCompletions.res - Empty case, bool 1`] = ` -"Complete /Users/zth/OSS/rescript-compiler/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_3.res 2:4\\nposCursor:[2:4] posNoWhite:[2:2] Found expr:[1:8->4:1]\\nPackage opens Stdlib.place holder Pervasives.JsxModules.place holder\\nResolved opens 1 Stdlib\\n[{\\n \\"label\\": \\"true\\",\\n \\"kind\\": 12,\\n \\"tags\\": [],\\n \\"detail\\": \\"bool\\",\\n \\"documentation\\": null,\\n \\"sortText\\": \\"A\\",\\n \\"insertText\\": \\"true\\",\\n \\"insertTextFormat\\": 2\\n }, {\\n \\"label\\": \\"false\\",\\n \\"kind\\": 12,\\n \\"tags\\": [],\\n \\"detail\\": \\"bool\\",\\n \\"documentation\\": null,\\n \\"sortText\\": \\"A\\",\\n \\"insertText\\": \\"false\\",\\n \\"insertTextFormat\\": 2\\n }]\\n\\n" -`; - -exports[`SwitchCaseCompletions.res - Empty case, record 1`] = ` -"Complete /Users/zth/OSS/rescript-compiler/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_2.res 2:4\\nposCursor:[2:4] posNoWhite:[2:2] Found expr:[1:8->4:1]\\nPackage opens Stdlib.place holder Pervasives.JsxModules.place holder\\nResolved opens 1 Stdlib\\n[{\\n \\"label\\": \\"{}\\",\\n \\"kind\\": 12,\\n \\"tags\\": [],\\n \\"detail\\": \\"TestTypeDefs.nestedTestRecord\\",\\n \\"documentation\\": {\\"kind\\": \\"markdown\\", \\"value\\": \\"\`\`\`rescript\\\\ntype nestedTestRecord = {\\\\n test: bool,\\\\n nested: {name: string, oneMoreLevel: {here: bool}},\\\\n}\\\\n\`\`\`\\"},\\n \\"sortText\\": \\"A\\",\\n \\"insertText\\": \\"{$0}\\",\\n \\"insertTextFormat\\": 2\\n }]\\n\\n" -`; diff --git a/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record, another level.snap b/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record, another level.snap new file mode 100644 index 0000000000..32291d6692 --- /dev/null +++ b/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record, another level.snap @@ -0,0 +1,23 @@ +Complete /Users/nojaf/Projects/rescript/tests/analysis_new_tests/tests/test_files/.build/RecordFieldCompletions_2.res 1:45 +Found Completable: Cexpression + +1 + // Record field completion in nested record, another level +2 + let x = TestTypeDefs.nestedTestRecord.nested. + ------------------------------------ +3 + // ^com +4 + + +[{ + "label": "name", + "kind": 5, + "tags": [], + "detail": "string", + "documentation": {"kind": "markdown", "value": "```rescript\nname: string\n```\n\n```rescript\ntype \\\"nestedTestRecord.nested\" = {\n name: string,\n oneMoreLevel: {here: bool},\n}\n```"} + }, { + "label": "oneMoreLevel", + "kind": 5, + "tags": [], + "detail": "\\\"nestedTestRecord.nested.oneMoreLevel\"", + "documentation": {"kind": "markdown", "value": "```rescript\noneMoreLevel: \\\"nestedTestRecord.nested.oneMoreLevel\"\n```\n\n```rescript\ntype \\\"nestedTestRecord.nested\" = {\n name: string,\n oneMoreLevel: {here: bool},\n}\n```"} + }] + diff --git a/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record.snap b/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record.snap new file mode 100644 index 0000000000..a933eb8e77 --- /dev/null +++ b/tests/analysis_new_tests/tests/test_files/__snapshots__/RecordFieldCompletions.res_Record field completion in nested record.snap @@ -0,0 +1,23 @@ +Complete /Users/nojaf/Projects/rescript/tests/analysis_new_tests/tests/test_files/.build/RecordFieldCompletions_1.res 1:38 +Found Completable: Cexpression + +1 + // Record field completion in nested record +2 + let x = TestTypeDefs.nestedTestRecord. + ----------------------------- +3 + // ^com +4 + + +[{ + "label": "test", + "kind": 5, + "tags": [], + "detail": "bool", + "documentation": {"kind": "markdown", "value": "```rescript\ntest: bool\n```\n\n```rescript\ntype nestedTestRecord = {\n test: bool,\n nested: {name: string, oneMoreLevel: {here: bool}},\n}\n```"} + }, { + "label": "nested", + "kind": 5, + "tags": [], + "detail": "\\\"nestedTestRecord.nested\"", + "documentation": {"kind": "markdown", "value": "```rescript\nnested: \\\"nestedTestRecord.nested\"\n```\n\n```rescript\ntype nestedTestRecord = {\n test: bool,\n nested: {name: string, oneMoreLevel: {here: bool}},\n}\n```"} + }] + diff --git a/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, array.snap b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, array.snap new file mode 100644 index 0000000000..60c96d9791 --- /dev/null +++ b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, array.snap @@ -0,0 +1,23 @@ +Complete /Users/nojaf/Projects/rescript/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_1.res 4:4 +Found Completable: Cpattern + +1 + // Empty case, array +2 + let someStringArr = ["hello"] +3 + +4 + let x = switch someStringArr { + ------------- +5 + | +6 + // ^com +7 + } + +[{ + "label": "[]", + "kind": 12, + "tags": [], + "detail": "array", + "documentation": null, + "sortText": "A", + "insertText": "[$0]", + "insertTextFormat": 2 + }] + diff --git a/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, bool.snap b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, bool.snap new file mode 100644 index 0000000000..411dbb6f0a --- /dev/null +++ b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, bool.snap @@ -0,0 +1,30 @@ +Complete /Users/nojaf/Projects/rescript/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_3.res 2:4 +Found Completable: Cpattern + +1 + // Empty case, bool +2 + let x = switch true { + ---- +3 + | +4 + // ^com +5 + } + +[{ + "label": "true", + "kind": 12, + "tags": [], + "detail": "bool", + "documentation": null, + "sortText": "A", + "insertText": "true", + "insertTextFormat": 2 + }, { + "label": "false", + "kind": 12, + "tags": [], + "detail": "bool", + "documentation": null, + "sortText": "A", + "insertText": "false", + "insertTextFormat": 2 + }] + diff --git a/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, record.snap b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, record.snap new file mode 100644 index 0000000000..e314a8a303 --- /dev/null +++ b/tests/analysis_new_tests/tests/test_files/__snapshots__/SwitchCaseCompletions.res_Empty case, record.snap @@ -0,0 +1,21 @@ +Complete /Users/nojaf/Projects/rescript/tests/analysis_new_tests/tests/test_files/.build/SwitchCaseCompletions_2.res 2:4 +Found Completable: Cpattern + +1 + // Empty case, record +2 + let x = switch TestTypeDefs.nestedTestRecord { + ----------------------------- +3 + | +4 + // ^com +5 + } + +[{ + "label": "{}", + "kind": 12, + "tags": [], + "detail": "TestTypeDefs.nestedTestRecord", + "documentation": {"kind": "markdown", "value": "```rescript\ntype nestedTestRecord = {\n test: bool,\n nested: {name: string, oneMoreLevel: {here: bool}},\n}\n```"}, + "sortText": "A", + "insertText": "{$0}", + "insertTextFormat": 2 + }] + diff --git a/yarn.lock b/yarn.lock index 3aa765d61d..ee63a978f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -274,6 +274,181 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/aix-ppc64@npm:0.25.3" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/android-arm64@npm:0.25.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/android-arm@npm:0.25.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/android-x64@npm:0.25.3" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/darwin-arm64@npm:0.25.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/darwin-x64@npm:0.25.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/freebsd-arm64@npm:0.25.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/freebsd-x64@npm:0.25.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-arm64@npm:0.25.3" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-arm@npm:0.25.3" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-ia32@npm:0.25.3" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-loong64@npm:0.25.3" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-mips64el@npm:0.25.3" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-ppc64@npm:0.25.3" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-riscv64@npm:0.25.3" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-s390x@npm:0.25.3" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/linux-x64@npm:0.25.3" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/netbsd-arm64@npm:0.25.3" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/netbsd-x64@npm:0.25.3" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/openbsd-arm64@npm:0.25.3" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/openbsd-x64@npm:0.25.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/sunos-x64@npm:0.25.3" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/win32-arm64@npm:0.25.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/win32-ia32@npm:0.25.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.3": + version: 0.25.3 + resolution: "@esbuild/win32-x64@npm:0.25.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -342,7 +517,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 @@ -475,6 +650,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-android-arm64@npm:4.39.0" @@ -482,6 +664,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-android-arm64@npm:4.40.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.39.0" @@ -489,6 +678,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.40.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-darwin-x64@npm:4.39.0" @@ -496,6 +692,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.40.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-freebsd-arm64@npm:4.39.0" @@ -503,6 +706,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-freebsd-x64@npm:4.39.0" @@ -510,6 +720,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.40.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0" @@ -517,6 +734,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.39.0" @@ -524,6 +748,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.39.0" @@ -531,6 +762,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.39.0" @@ -538,6 +776,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0" @@ -545,6 +790,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0" @@ -552,6 +804,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.39.0" @@ -559,6 +818,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-musl@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.39.0" @@ -566,6 +832,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-musl@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.39.0" @@ -573,6 +846,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.39.0" @@ -580,6 +860,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.39.0" @@ -587,6 +874,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.39.0" @@ -594,6 +888,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.39.0" @@ -601,6 +902,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.39.0": version: 4.39.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.39.0" @@ -608,6 +916,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.40.0": + version: 4.40.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@tests/analysis@workspace:tests/analysis_tests/tests": version: 0.0.0-use.local resolution: "@tests/analysis@workspace:tests/analysis_tests/tests" @@ -623,6 +938,7 @@ __metadata: dependencies: "@rescript/react": "link:../../dependencies/rescript-react" rescript: "workspace:^" + vitest: "npm:3.1.2" languageName: unknown linkType: soft @@ -739,6 +1055,87 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/expect@npm:3.1.2" + dependencies: + "@vitest/spy": "npm:3.1.2" + "@vitest/utils": "npm:3.1.2" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/63507f77b225196d79f5aabedbb10f93974808a2b507661b66def95e803e6f7f958049e9b985d2d5fee83317f157f8018fea6e1240c64a5fec8e9753235ad081 + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/mocker@npm:3.1.2" + dependencies: + "@vitest/spy": "npm:3.1.2" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/4447962d7e160d774cf5b1eef03067230b5e36131e3441d3dd791ad38b6c06e16940f21fa20c311c58b635ba376ffb45d003b6f04d0d4cc0d7c4be854df4b8e4 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.1.2, @vitest/pretty-format@npm:^3.1.2": + version: 3.1.2 + resolution: "@vitest/pretty-format@npm:3.1.2" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/f4a79be6d5a1a0b3215ba66b3cc62b2e0fc3a81b4eee07b2644600450b796a8630ee86180691391a5597c9a792f3d213d54f2043f4a0809a9386473bfcca85fb + languageName: node + linkType: hard + +"@vitest/runner@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/runner@npm:3.1.2" + dependencies: + "@vitest/utils": "npm:3.1.2" + pathe: "npm:^2.0.3" + checksum: 10c0/7312013c87a6869d07380506e808f686ab04cb989f8ae6d3c7ea16a4990fce715801c8c4d5836612706a9e8a2e5ed01629d728360fba035d8f2570a90b0050cd + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/snapshot@npm:3.1.2" + dependencies: + "@vitest/pretty-format": "npm:3.1.2" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f3e451ec41eb54ace4c08f3dc3dbd3c283ff73b4c8eab899bb6bcd6589bf864bcaa33afb611751a76c87c5ca31fb3420511633fb7fb06af2692a70e6c8578db2 + languageName: node + linkType: hard + +"@vitest/spy@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/spy@npm:3.1.2" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10c0/0f827970c34e256f3af964df5a5133c181ef1475b73a15b47565ad3187e4b2627e949e632c21e34a694e16b98ceb1e670f5e7dc99baeb53cb029578147d4ccee + languageName: node + linkType: hard + +"@vitest/utils@npm:3.1.2": + version: 3.1.2 + resolution: "@vitest/utils@npm:3.1.2" + dependencies: + "@vitest/pretty-format": "npm:3.1.2" + loupe: "npm:^3.1.3" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/9e778ab7cf483396d650ddd079e702af6b9f087443a99045707865bf433cfa3c4f468d94d17a44173e6adcc5cce218a1b0073d1b94bbd84a03262033e427336d + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.0 resolution: "abbrev@npm:3.0.0" @@ -842,6 +1239,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -905,6 +1309,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -958,6 +1369,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.2.0": + version: 5.2.0 + resolution: "chai@npm:5.2.0" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d + languageName: node + linkType: hard + "chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -968,6 +1392,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e + languageName: node + linkType: hard + "chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -1085,7 +1516,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.5": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -1111,6 +1542,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -1185,6 +1623,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.6.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es6-error@npm:^4.0.1": version: 4.1.1 resolution: "es6-error@npm:4.1.1" @@ -1192,6 +1637,92 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.25.0": + version: 0.25.3 + resolution: "esbuild@npm:0.25.3" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.3" + "@esbuild/android-arm": "npm:0.25.3" + "@esbuild/android-arm64": "npm:0.25.3" + "@esbuild/android-x64": "npm:0.25.3" + "@esbuild/darwin-arm64": "npm:0.25.3" + "@esbuild/darwin-x64": "npm:0.25.3" + "@esbuild/freebsd-arm64": "npm:0.25.3" + "@esbuild/freebsd-x64": "npm:0.25.3" + "@esbuild/linux-arm": "npm:0.25.3" + "@esbuild/linux-arm64": "npm:0.25.3" + "@esbuild/linux-ia32": "npm:0.25.3" + "@esbuild/linux-loong64": "npm:0.25.3" + "@esbuild/linux-mips64el": "npm:0.25.3" + "@esbuild/linux-ppc64": "npm:0.25.3" + "@esbuild/linux-riscv64": "npm:0.25.3" + "@esbuild/linux-s390x": "npm:0.25.3" + "@esbuild/linux-x64": "npm:0.25.3" + "@esbuild/netbsd-arm64": "npm:0.25.3" + "@esbuild/netbsd-x64": "npm:0.25.3" + "@esbuild/openbsd-arm64": "npm:0.25.3" + "@esbuild/openbsd-x64": "npm:0.25.3" + "@esbuild/sunos-x64": "npm:0.25.3" + "@esbuild/win32-arm64": "npm:0.25.3" + "@esbuild/win32-ia32": "npm:0.25.3" + "@esbuild/win32-x64": "npm:0.25.3" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/127aff654310ede4e2eb232a7b1d8823f5b5d69222caf17aa7f172574a5b6b75f71ce78c6d8a40030421d7c75b784dc640de0fb1b87b7ea77ab2a1c832fa8df8 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -1223,6 +1754,22 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"expect-type@npm:^1.2.1": + version: 1.2.1 + resolution: "expect-type@npm:1.2.1" + checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -1230,6 +1777,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -1322,7 +1881,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -1332,7 +1891,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -1871,6 +2430,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.3": + version: 3.1.3 + resolution: "loupe@npm:3.1.3" + checksum: 10c0/f5dab4144254677de83a35285be1b8aba58b3861439ce4ba65875d0d5f3445a4a496daef63100ccf02b2dbc25bf58c6db84c9cb0b96d6435331e9d0a33b48541 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -1894,6 +2460,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + "make-dir@npm:^3.0.0, make-dir@npm:^3.0.2": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -2091,6 +2666,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + "negotiator@npm:^1.0.0": version: 1.0.0 resolution: "negotiator@npm:1.0.0" @@ -2325,6 +2909,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -2367,6 +2965,17 @@ __metadata: languageName: unknown linkType: soft +"postcss@npm:^8.5.3": + version: 8.5.3 + resolution: "postcss@npm:8.5.3" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 + languageName: node + linkType: hard + "proc-log@npm:^5.0.0": version: 5.0.0 resolution: "proc-log@npm:5.0.0" @@ -2612,6 +3221,81 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.34.9": + version: 4.40.0 + resolution: "rollup@npm:4.40.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.40.0" + "@rollup/rollup-android-arm64": "npm:4.40.0" + "@rollup/rollup-darwin-arm64": "npm:4.40.0" + "@rollup/rollup-darwin-x64": "npm:4.40.0" + "@rollup/rollup-freebsd-arm64": "npm:4.40.0" + "@rollup/rollup-freebsd-x64": "npm:4.40.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.40.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.40.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.0" + "@rollup/rollup-linux-riscv64-musl": "npm:4.40.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.40.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.40.0" + "@rollup/rollup-linux-x64-musl": "npm:4.40.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.40.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.40.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.40.0" + "@types/estree": "npm:1.0.7" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/90aa57487d4a9a7de1a47bf42a6091f83f1cb7fe1814650dfec278ab8ddae5736b86535d4c766493517720f334dfd4aa0635405ca8f4f36ed8d3c0f875f2a801 + languageName: node + linkType: hard + "safe-buffer@npm:^5.1.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -2694,6 +3378,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -2736,6 +3427,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -2780,6 +3478,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.9.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -2884,6 +3596,51 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.13": + version: 0.2.13 + resolution: "tinyglobby@npm:0.2.13" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c + languageName: node + linkType: hard + +"tinypool@npm:^1.0.2": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10c0/31ac184c0ff1cf9a074741254fe9ea6de95026749eb2b8ec6fd2b9d8ca94abdccda731f8e102e7f32e72ed3b36d32c6975fd5f5523df3f1b6de6c3d8dfd95e63 + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -2986,6 +3743,130 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:3.1.2": + version: 3.1.2 + resolution: "vite-node@npm:3.1.2" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.0" + es-module-lexer: "npm:^1.6.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/eb0788b43a241c69ca23ba6cf5ab5226157947938dc4e02247b2008e1fd425e45a347d3caac7d53e0b804beb4c9e97395908fd87c1f23bda1590e1b011c63edb + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0": + version: 6.3.3 + resolution: "vite@npm:6.3.3" + dependencies: + esbuild: "npm:^0.25.0" + fdir: "npm:^6.4.4" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.2" + postcss: "npm:^8.5.3" + rollup: "npm:^4.34.9" + tinyglobby: "npm:^0.2.13" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/7ea27d2c80a9e0b7ccf6cbd6c251455501286568160e8b632984e5332440f21a6d05f9236408212ba7653f7d2d4790f848956d8a620bbf4dd2ecb792a2fe1ab1 + languageName: node + linkType: hard + +"vitest@npm:3.1.2": + version: 3.1.2 + resolution: "vitest@npm:3.1.2" + dependencies: + "@vitest/expect": "npm:3.1.2" + "@vitest/mocker": "npm:3.1.2" + "@vitest/pretty-format": "npm:^3.1.2" + "@vitest/runner": "npm:3.1.2" + "@vitest/snapshot": "npm:3.1.2" + "@vitest/spy": "npm:3.1.2" + "@vitest/utils": "npm:3.1.2" + chai: "npm:^5.2.0" + debug: "npm:^4.4.0" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.13" + tinypool: "npm:^1.0.2" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0" + vite-node: "npm:3.1.2" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.1.2 + "@vitest/ui": 3.1.2 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/14b9c99812282d88b6e1dafde8cca22b07dcefa0a00d240145cf5cb95b082c287807bd884f417a046992bc74246aaf64662fd07179e60547c9277fbc8986439b + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.1 resolution: "which-module@npm:2.0.1" @@ -3015,6 +3896,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "workerpool@npm:^6.5.1": version: 6.5.1 resolution: "workerpool@npm:6.5.1"