From e658d75f9bda916bd36b651bc9486777388b6d92 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Wed, 2 Oct 2024 09:13:32 -0400 Subject: [PATCH 01/23] In progress --- src/haz3lcore/dune | 3 +- src/haz3lcore/lang/Precedence.re | 2 +- src/haz3lcore/lang/Sort.re | 2 +- src/haz3lcore/tiles/Base.re | 6 ++- src/haz3lcore/tiles/Grout.re | 4 +- src/haz3lcore/tiles/Label.re | 2 +- src/haz3lcore/tiles/Mold.re | 2 +- src/haz3lcore/tiles/Nib.re | 4 +- src/haz3lcore/tiles/Nibs.re | 2 +- src/haz3lcore/tiles/Piece.re | 2 +- src/haz3lcore/tiles/Secondary.re | 5 ++- src/haz3lcore/tiles/Segment.re | 2 +- src/haz3lcore/tiles/Token.re | 2 +- src/haz3lcore/zipper/Ancestor.re | 5 ++- src/haz3lcore/zipper/Ancestors.re | 4 +- src/haz3lcore/zipper/Backpack.re | 2 +- src/haz3lcore/zipper/Editor.re | 7 ++-- src/haz3lcore/zipper/Relatives.re | 2 +- src/haz3lcore/zipper/Selection.re | 6 +-- src/haz3lcore/zipper/Siblings.re | 2 +- src/haz3lcore/zipper/Zipper.re | 4 +- src/haz3lcore/zipper/ZipperBase.re | 4 +- src/haz3lcore/zipper/action/Action.re | 36 +++++++++--------- src/util/Direction.re | 2 +- src/util/Point.re | 6 +-- src/util/dune | 3 +- test/Test_Editor.re | 55 +++++++++++++++++++++++++++ test/haz3ltest.re | 1 + 28 files changed, 120 insertions(+), 57 deletions(-) create mode 100644 test/Test_Editor.re diff --git a/src/haz3lcore/dune b/src/haz3lcore/dune index 77e2ca3fe1..3579ce73a5 100644 --- a/src/haz3lcore/dune +++ b/src/haz3lcore/dune @@ -10,7 +10,8 @@ js_of_ocaml-ppx ppx_let ppx_sexp_conv - ppx_deriving.show))) + ppx_deriving.show + ppx_deriving.eq))) (env (dev diff --git a/src/haz3lcore/lang/Precedence.re b/src/haz3lcore/lang/Precedence.re index 7d72b66404..23bbc9466f 100644 --- a/src/haz3lcore/lang/Precedence.re +++ b/src/haz3lcore/lang/Precedence.re @@ -3,7 +3,7 @@ open Util; /** * higher precedence means lower int representation */ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = int; let max: t = 0; diff --git a/src/haz3lcore/lang/Sort.re b/src/haz3lcore/lang/Sort.re index 2b66c3282b..c75225e476 100644 --- a/src/haz3lcore/lang/Sort.re +++ b/src/haz3lcore/lang/Sort.re @@ -1,4 +1,4 @@ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Any | Nul diff --git a/src/haz3lcore/tiles/Base.re b/src/haz3lcore/tiles/Base.re index 8c127d83ba..0482defc2c 100644 --- a/src/haz3lcore/tiles/Base.re +++ b/src/haz3lcore/tiles/Base.re @@ -3,7 +3,7 @@ open Util; /* The different kinds of projector. New projectors * types need to be registered here in order to be * able to create and update their instances */ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type kind = | Fold | Info @@ -12,7 +12,7 @@ type kind = | SliderF | TextArea; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type segment = list(piece) and piece = | Tile(tile) @@ -25,6 +25,7 @@ and tile = { // - length(shards) <= length(label) // - length(shards) == length(children) + 1 // - sort(shards) == shards + [@equal (_, _) => true] id: Id.t, label: Label.t, mold: Mold.t, @@ -32,6 +33,7 @@ and tile = { children: list(segment), } and projector = { + [@equal (_, _) => true] id: Id.t, kind, syntax: piece, diff --git a/src/haz3lcore/tiles/Grout.re b/src/haz3lcore/tiles/Grout.re index 496de68f10..9223b293be 100644 --- a/src/haz3lcore/tiles/Grout.re +++ b/src/haz3lcore/tiles/Grout.re @@ -1,6 +1,6 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type shape = | Convex | Concave; @@ -10,7 +10,7 @@ type t = { id: Id.t, shape, }; - +let equal = (a: t, b: t) => a.shape == b.shape; let id = g => g.id; let shapes = g => diff --git a/src/haz3lcore/tiles/Label.re b/src/haz3lcore/tiles/Label.re index e26eeaa5a8..f47994764a 100644 --- a/src/haz3lcore/tiles/Label.re +++ b/src/haz3lcore/tiles/Label.re @@ -1,6 +1,6 @@ open Util; /* A label is the textual expression of a form's delimiters */ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = list(Token.t); exception Empty_label; diff --git a/src/haz3lcore/tiles/Mold.re b/src/haz3lcore/tiles/Mold.re index 743fcb0d18..a40dba0017 100644 --- a/src/haz3lcore/tiles/Mold.re +++ b/src/haz3lcore/tiles/Mold.re @@ -1,6 +1,6 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { out: Sort.t, in_: list(Sort.t), diff --git a/src/haz3lcore/tiles/Nib.re b/src/haz3lcore/tiles/Nib.re index 863ea9bd9f..81c2f2ed65 100644 --- a/src/haz3lcore/tiles/Nib.re +++ b/src/haz3lcore/tiles/Nib.re @@ -1,7 +1,7 @@ open Util; module Shape = { - [@deriving (show({with_path: false}), sexp, yojson)] + [@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Convex | Concave(Precedence.t); @@ -45,7 +45,7 @@ module Shape = { }; }; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { shape: Shape.t, sort: Sort.t, diff --git a/src/haz3lcore/tiles/Nibs.re b/src/haz3lcore/tiles/Nibs.re index 0c4225a279..88df87de86 100644 --- a/src/haz3lcore/tiles/Nibs.re +++ b/src/haz3lcore/tiles/Nibs.re @@ -1,4 +1,4 @@ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = (Nib.t, Nib.t); [@deriving show] diff --git a/src/haz3lcore/tiles/Piece.re b/src/haz3lcore/tiles/Piece.re index fc6207a979..bade3f9a6f 100644 --- a/src/haz3lcore/tiles/Piece.re +++ b/src/haz3lcore/tiles/Piece.re @@ -1,6 +1,6 @@ include Base; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = piece; let secondary = w => Secondary(w); diff --git a/src/haz3lcore/tiles/Secondary.re b/src/haz3lcore/tiles/Secondary.re index c973469254..d075363fa1 100644 --- a/src/haz3lcore/tiles/Secondary.re +++ b/src/haz3lcore/tiles/Secondary.re @@ -1,11 +1,11 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type cls = | Whitespace | Comment; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type secondary_content = | Whitespace(string) | Comment(string); @@ -16,6 +16,7 @@ type t = { content: secondary_content, }; +let equal = (a: t, b: t) => a.content == b.content; let cls_of = (s: t): cls => switch (s.content) { | Whitespace(_) => Whitespace diff --git a/src/haz3lcore/tiles/Segment.re b/src/haz3lcore/tiles/Segment.re index de8689f08a..463c4c643f 100644 --- a/src/haz3lcore/tiles/Segment.re +++ b/src/haz3lcore/tiles/Segment.re @@ -2,7 +2,7 @@ open Util; exception Empty_segment; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = Base.segment; let empty = []; diff --git a/src/haz3lcore/tiles/Token.re b/src/haz3lcore/tiles/Token.re index 8b68de1eb3..33df2d7203 100644 --- a/src/haz3lcore/tiles/Token.re +++ b/src/haz3lcore/tiles/Token.re @@ -1,7 +1,7 @@ open Util; // make an enum -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = string; module Index = { diff --git a/src/haz3lcore/zipper/Ancestor.re b/src/haz3lcore/zipper/Ancestor.re index 498b18b93e..9ae42e30e8 100644 --- a/src/haz3lcore/zipper/Ancestor.re +++ b/src/haz3lcore/zipper/Ancestor.re @@ -2,11 +2,12 @@ open Util; exception Empty_shard_affix; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type step = int; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { + [@equal (_, _) => true] id: Id.t, label: Label.t, mold: Mold.t, diff --git a/src/haz3lcore/zipper/Ancestors.re b/src/haz3lcore/zipper/Ancestors.re index 2acc7d0838..0cf137da54 100644 --- a/src/haz3lcore/zipper/Ancestors.re +++ b/src/haz3lcore/zipper/Ancestors.re @@ -1,9 +1,9 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type generation = (Ancestor.t, Siblings.t); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = list(generation); let empty = []; diff --git a/src/haz3lcore/zipper/Backpack.re b/src/haz3lcore/zipper/Backpack.re index b704e36721..ac45789c9c 100644 --- a/src/haz3lcore/zipper/Backpack.re +++ b/src/haz3lcore/zipper/Backpack.re @@ -203,7 +203,7 @@ module ShardInfo = { }; }; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = list(Selection.t); let empty = []; diff --git a/src/haz3lcore/zipper/Editor.re b/src/haz3lcore/zipper/Editor.re index cd05476fd9..7f44fb54e0 100644 --- a/src/haz3lcore/zipper/Editor.re +++ b/src/haz3lcore/zipper/Editor.re @@ -136,6 +136,7 @@ module State = { meta: Meta.t, }; + let equal = (a: t, b: t) => Zipper.equal(a.zipper, b.zipper); let init = (zipper, ~settings: CoreSettings.t) => { zipper, meta: Meta.init(zipper, ~settings), @@ -148,9 +149,9 @@ module State = { }; module History = { - [@deriving (show({with_path: false}), sexp, yojson)] + [@deriving (show({with_path: false}), sexp, yojson, eq)] type affix = list((Action.t, State.t)); - [@deriving (show({with_path: false}), sexp, yojson)] + [@deriving (show({with_path: false}), sexp, yojson, eq)] type t = (affix, affix); let empty = ([], []); @@ -161,7 +162,7 @@ module History = { ); }; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { state: State.t, history: History.t, diff --git a/src/haz3lcore/zipper/Relatives.re b/src/haz3lcore/zipper/Relatives.re index 251cdbc4e9..65cf81c324 100644 --- a/src/haz3lcore/zipper/Relatives.re +++ b/src/haz3lcore/zipper/Relatives.re @@ -1,6 +1,6 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { siblings: Siblings.t, ancestors: Ancestors.t, diff --git a/src/haz3lcore/zipper/Selection.re b/src/haz3lcore/zipper/Selection.re index 92d6509fb8..4d119ebd8b 100644 --- a/src/haz3lcore/zipper/Selection.re +++ b/src/haz3lcore/zipper/Selection.re @@ -1,16 +1,16 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type buffer = //| Parsed | Unparsed; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type mode = | Normal | Buffer(buffer); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { focus: Direction.t, content: Segment.t, diff --git a/src/haz3lcore/zipper/Siblings.re b/src/haz3lcore/zipper/Siblings.re index 332b63f8df..78d4f17966 100644 --- a/src/haz3lcore/zipper/Siblings.re +++ b/src/haz3lcore/zipper/Siblings.re @@ -1,6 +1,6 @@ open Util; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = (Segment.t, Segment.t); let empty = Segment.(empty, empty); diff --git a/src/haz3lcore/zipper/Zipper.re b/src/haz3lcore/zipper/Zipper.re index f87fb964e6..7f4fd9d799 100644 --- a/src/haz3lcore/zipper/Zipper.re +++ b/src/haz3lcore/zipper/Zipper.re @@ -15,13 +15,13 @@ let init: unit => t = let next_blank = _ => Id.mk(); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type chunkiness = | ByChar | MonoByChar | ByToken; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type planar = | Up | Down diff --git a/src/haz3lcore/zipper/ZipperBase.re b/src/haz3lcore/zipper/ZipperBase.re index cb6311a4b8..ae73d999c3 100644 --- a/src/haz3lcore/zipper/ZipperBase.re +++ b/src/haz3lcore/zipper/ZipperBase.re @@ -1,7 +1,7 @@ open Util; module Caret = { - [@deriving (show({with_path: false}), sexp, yojson)] + [@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Outer | Inner(int, int); @@ -19,7 +19,7 @@ module Caret = { }; // assuming single backpack, shards may appear in selection, backpack, or siblings -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { selection: Selection.t, backpack: Backpack.t, diff --git a/src/haz3lcore/zipper/action/Action.re b/src/haz3lcore/zipper/action/Action.re index 85b24be4f1..be0cacf004 100644 --- a/src/haz3lcore/zipper/action/Action.re +++ b/src/haz3lcore/zipper/action/Action.re @@ -2,7 +2,7 @@ open Util; open Zipper; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type piece_goal = | Grout; @@ -14,28 +14,28 @@ let of_piece_goal = | _ => false ); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type goal = | Point(Point.t) | Piece(piece_goal, Direction.t); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type move = | Extreme(planar) | Local(planar) | Goal(goal); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type jump_target = - | TileId(Id.t) + | TileId([@equal (_, _) => true] Id.t) | BindingSiteOfIndicatedVar; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type rel = | Current - | Id(Id.t, Direction.t); + | Id([@equal (_, _) => true] Id.t, Direction.t); -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type select = | All | Resize(move) @@ -47,27 +47,27 @@ type select = * projectors,as distinguished from external_action, * which defines the actions available internally to all projectors, * and from each projector's own internal action type */ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type project = | SetIndicated(Base.kind) /* Project syntax at caret */ | ToggleIndicated(Base.kind) /* Un/Project syntax at caret */ - | Remove(Id.t) /* Remove projector at Id */ - | SetSyntax(Id.t, Piece.t) /* Set underlying syntax */ - | SetModel(Id.t, string) /* Set serialized projector model */ - | Focus(Id.t, option(Util.Direction.t)) /* Pass control to projector */ - | Escape(Id.t, Direction.t); /* Pass control to parent editor */ + | Remove([@equal (_, _) => true] Id.t) /* Remove projector at Id */ + | SetSyntax([@equal (_, _) => true] Id.t, Piece.t) /* Set underlying syntax */ + | SetModel([@equal (_, _) => true] Id.t, string) /* Set serialized projector model */ + | Focus([@equal (_, _) => true] Id.t, option(Util.Direction.t)) /* Pass control to projector */ + | Escape([@equal (_, _) => true] Id.t, Direction.t); /* Pass control to parent editor */ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type agent = | TyDi; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type buffer = | Set(agent) | Clear | Accept; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Reparse | Buffer(buffer) @@ -87,7 +87,7 @@ type t = | Put_down; module Failure = { - [@deriving (show({with_path: false}), sexp, yojson)] + [@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Cant_move | Cant_insert diff --git a/src/util/Direction.re b/src/util/Direction.re index b59b7faac0..7b611423ad 100644 --- a/src/util/Direction.re +++ b/src/util/Direction.re @@ -1,4 +1,4 @@ -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = | Left | Right; diff --git a/src/util/Point.re b/src/util/Point.re index 6a8f80b698..cc2249c41d 100644 --- a/src/util/Point.re +++ b/src/util/Point.re @@ -1,12 +1,12 @@ open Sexplib.Std; open Ppx_yojson_conv_lib.Yojson_conv; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type row = int; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type col = int; -[@deriving (show({with_path: false}), sexp, yojson)] +[@deriving (show({with_path: false}), sexp, yojson, eq)] type t = { row, col, diff --git a/src/util/dune b/src/util/dune index 889c95bd2c..b0af286475 100644 --- a/src/util/dune +++ b/src/util/dune @@ -8,7 +8,8 @@ js_of_ocaml-ppx ppx_let ppx_sexp_conv - ppx_deriving.show))) + ppx_deriving.show + ppx_deriving.eq))) (env (dev diff --git a/test/Test_Editor.re b/test/Test_Editor.re new file mode 100644 index 0000000000..0b7d28ebc7 --- /dev/null +++ b/test/Test_Editor.re @@ -0,0 +1,55 @@ +open Alcotest; +open Haz3lcore; +let typ = testable(Fmt.using(Editor.show, Fmt.string), Editor.equal); + +let test_initial_editor = () => { + let zipper = Zipper.init(); + let ed = Editor.init(~settings=CoreSettings.on, zipper); + + let expected: Editor.t = { + state: { + zipper, + meta: Editor.Meta.init(zipper, ~settings=CoreSettings.on), + }, + history: ([], []), + read_only: false, + }; + check(typ, "Initial editor", expected, ed); +}; + +// test Perform.go with Insert("4+5") +let test_insert = () => { + let zipper = Zipper.init(); + let ed = Editor.init(~settings=CoreSettings.on, zipper); + let a = Action.Insert("4+5"); + let ed = Perform.go(~settings=CoreSettings.on, a, ed); + let m: Mold.t = { + in_: Any, + out: Any, + nibs: (Nib.{shape: Convex, sort: 0}, Nib.{shape: Convex, sort: 0}), + }; + let expected: Editor.t = { + state: { + zipper: + Zipper.unzip([ + Tile({ + label: ["4+5"], + mold: { + in_: Any, + out: Any, + nibs: ( + Nib.{shape: Convex, sort: 0}, + Nib.{shape: Convex, sort: 0}, + ), + }, + }), + ]), + meta: Editor.Meta.init(zipper, ~settings=CoreSettings.on), + }, + history: ([(a, ed.state)], []), + read_only: false, + }; + check(typ, "Insert 4+5", expected, ed); +}; + +let tests = [test_case("Initial editor", `Quick, test_initial_editor)]; diff --git a/test/haz3ltest.re b/test/haz3ltest.re index 3e13ae44b7..d883f296d5 100644 --- a/test/haz3ltest.re +++ b/test/haz3ltest.re @@ -8,6 +8,7 @@ let (suite, _) = ("Elaboration", Test_Elaboration.elaboration_tests), ("Statics", Test_Statics.tests), ("Evaluator", Test_Evaluator.tests), + ("Editor", Test_Editor.tests), ], ); Junit.to_file(Junit.make([suite]), "junit_tests.xml"); From 26da8bbb845283e7dd9d10ba3ee70e0cbf2f14c9 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Wed, 2 Oct 2024 09:50:35 -0400 Subject: [PATCH 02/23] Add in progress test --- test/Test_Editor.re | 49 ++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/test/Test_Editor.re b/test/Test_Editor.re index 0b7d28ebc7..12838d2676 100644 --- a/test/Test_Editor.re +++ b/test/Test_Editor.re @@ -1,6 +1,7 @@ open Alcotest; open Haz3lcore; let typ = testable(Fmt.using(Editor.show, Fmt.string), Editor.equal); +let zipper_typ = testable(Fmt.using(Zipper.show, Fmt.string), Zipper.equal); let test_initial_editor = () => { let zipper = Zipper.init(); @@ -17,39 +18,45 @@ let test_initial_editor = () => { check(typ, "Initial editor", expected, ed); }; -// test Perform.go with Insert("4+5") +// TODO Test inserting on the editor let test_insert = () => { let zipper = Zipper.init(); let ed = Editor.init(~settings=CoreSettings.on, zipper); let a = Action.Insert("4+5"); - let ed = Perform.go(~settings=CoreSettings.on, a, ed); + let ed: Action.Result.t(Editor.t) = + Perform.go(~settings=CoreSettings.on, a, ed); let m: Mold.t = { - in_: Any, + in_: [Any], out: Any, - nibs: (Nib.{shape: Convex, sort: 0}, Nib.{shape: Convex, sort: 0}), + nibs: (Nib.{shape: Convex, sort: Any}, Nib.{shape: Convex, sort: Any}), }; + let t: Tile.t = { + label: ["4"], + mold: m, + shards: [], + children: [], + id: Id.mk(), + }; + let til: Segment.t = [Tile(t)]; + let history: Editor.History.t = ([], []); let expected: Editor.t = { state: { - zipper: - Zipper.unzip([ - Tile({ - label: ["4+5"], - mold: { - in_: Any, - out: Any, - nibs: ( - Nib.{shape: Convex, sort: 0}, - Nib.{shape: Convex, sort: 0}, - ), - }, - }), - ]), + zipper: Zipper.unzip(til), meta: Editor.Meta.init(zipper, ~settings=CoreSettings.on), }, - history: ([(a, ed.state)], []), + history, read_only: false, }; - check(typ, "Insert 4+5", expected, ed); + check( + zipper_typ, + "Insert 4", + expected.state.zipper, + Result.get_ok(ed).state.zipper, + ); + check(typ, "Insert 4", expected, Result.get_ok(ed)); }; -let tests = [test_case("Initial editor", `Quick, test_initial_editor)]; +let tests = [ + test_case("Initial editor", `Quick, test_initial_editor), + // test_case("Insert 4", `Quick, test_insert), +]; From 2d41b9107127477d61cb528c8c984a7eaf1a42cc Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 2 Oct 2024 10:11:53 -0400 Subject: [PATCH 03/23] added skeleton internals, not being parsed --- src/haz3lcore/dynamics/DHExp.re | 2 ++ src/haz3lcore/dynamics/DHPat.re | 2 ++ src/haz3lcore/dynamics/Elaborator.re | 3 +++ src/haz3lcore/dynamics/FilterMatcher.re | 1 + src/haz3lcore/dynamics/PatternMatch.re | 1 + src/haz3lcore/dynamics/Substitution.re | 1 + src/haz3lcore/dynamics/Transition.re | 1 + src/haz3lcore/dynamics/TypeAssignment.re | 4 ++++ src/haz3lcore/dynamics/Unboxing.re | 1 + src/haz3lcore/lang/Form.re | 5 +++++ src/haz3lcore/statics/MakeTerm.re | 1 + src/haz3lcore/statics/Statics.re | 3 +++ src/haz3lcore/statics/Term.re | 17 +++++++++++++++++ src/haz3lcore/statics/TermBase.re | 8 ++++++++ src/haz3lcore/zipper/EditorUtil.re | 1 + src/haz3lschool/SyntaxTest.re | 7 +++++++ src/haz3lweb/view/ExplainThis.re | 12 ++++++++++++ src/haz3lweb/view/dhcode/layout/DHDoc_Exp.re | 2 ++ src/haz3lweb/view/dhcode/layout/DHDoc_Pat.re | 2 ++ 19 files changed, 74 insertions(+) diff --git a/src/haz3lcore/dynamics/DHExp.re b/src/haz3lcore/dynamics/DHExp.re index f7651ba963..a737098925 100644 --- a/src/haz3lcore/dynamics/DHExp.re +++ b/src/haz3lcore/dynamics/DHExp.re @@ -77,6 +77,7 @@ let rec strip_casts = | TypFun(_) | TypAp(_) | Undefined + | LivelitInvocation(_) | If(_) => continue(exp) /* Remove casts*/ | FailedCast(d, _, _) @@ -127,6 +128,7 @@ let ty_subst = (s: Typ.t, tpat: TPat.t, exp: t): t => { | ListConcat(_) | Tuple(_) | Match(_) + | LivelitInvocation(_) | DynamicErrorHole(_) | Filter(_) | If(_) diff --git a/src/haz3lcore/dynamics/DHPat.re b/src/haz3lcore/dynamics/DHPat.re index f9e4adbddb..273fd505c2 100644 --- a/src/haz3lcore/dynamics/DHPat.re +++ b/src/haz3lcore/dynamics/DHPat.re @@ -20,6 +20,7 @@ let rec binds_var = (m: Statics.Map.t, x: Var.t, dp: t): bool => | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | Constructor(_) => false | Cast(y, _, _) | Parens(y) => binds_var(m, x, y) @@ -43,6 +44,7 @@ let rec bound_vars = (dp: t): list(Var.t) => | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | Constructor(_) => [] | Cast(y, _, _) | Parens(y) => bound_vars(y) diff --git a/src/haz3lcore/dynamics/Elaborator.re b/src/haz3lcore/dynamics/Elaborator.re index c1f3aa12d7..e3634e42e6 100644 --- a/src/haz3lcore/dynamics/Elaborator.re +++ b/src/haz3lcore/dynamics/Elaborator.re @@ -115,6 +115,8 @@ let rec elaborate_pattern = | Bool(_) => upat |> cast_from(Bool |> Typ.temp) | Float(_) => upat |> cast_from(Float |> Typ.temp) | String(_) => upat |> cast_from(String |> Typ.temp) + | LivelitInvocation(_) => + upat |> cast_from(Unknown(Internal) |> Typ.temp) | ListLit(ps) => let (ps, tys) = List.map(elaborate_pattern(m), ps) |> ListUtil.unzip; let inner_type = @@ -249,6 +251,7 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { |> Option.value(~default=Typ.temp(Typ.Unknown(Internal))); let ds' = List.map2((d, t) => fresh_cast(d, t, inner_type), ds, tys); Exp.ListLit(ds') |> rewrap |> cast_from(List(inner_type) |> Typ.temp); + | LivelitInvocation(_) => uexp |> cast_from(String |> Typ.temp) | Constructor(c, _) => let mode = switch (Id.Map.find_opt(Exp.rep_id(uexp), m)) { diff --git a/src/haz3lcore/dynamics/FilterMatcher.re b/src/haz3lcore/dynamics/FilterMatcher.re index d6d0bcc543..0e0ececcf7 100644 --- a/src/haz3lcore/dynamics/FilterMatcher.re +++ b/src/haz3lcore/dynamics/FilterMatcher.re @@ -322,6 +322,7 @@ let rec matches_exp = ) | (Match(_), _) => false // TODO: should these not default to false? + | (LivelitInvocation(_), _) => false | (MultiHole(_), _) => false | (Invalid(_), _) => false | (DynamicErrorHole(_), _) => false diff --git a/src/haz3lcore/dynamics/PatternMatch.re b/src/haz3lcore/dynamics/PatternMatch.re index 329ca1efd8..c6500c7ac6 100644 --- a/src/haz3lcore/dynamics/PatternMatch.re +++ b/src/haz3lcore/dynamics/PatternMatch.re @@ -29,6 +29,7 @@ let rec matches = (dp: Pat.t, d: DHExp.t): match_result => | String(s) => let* s' = Unboxing.unbox(String, d); s == s' ? Matches(Environment.empty) : DoesNotMatch; + | LivelitInvocation(_) => IndetMatch | ListLit(xs) => let* s' = Unboxing.unbox(List, d); if (List.length(xs) == List.length(s')) { diff --git a/src/haz3lcore/dynamics/Substitution.re b/src/haz3lcore/dynamics/Substitution.re index 5d918e520b..7936621e92 100644 --- a/src/haz3lcore/dynamics/Substitution.re +++ b/src/haz3lcore/dynamics/Substitution.re @@ -64,6 +64,7 @@ let rec subst_var = (m, d1: DHExp.t, x: Var.t, d2: DHExp.t): DHExp.t => { | Int(_) | Float(_) | String(_) + | LivelitInvocation(_) | Constructor(_) => d2 | ListLit(ds) => ListLit(List.map(subst_var(m, d1, x), ds)) |> rewrap | Cons(d3, d4) => diff --git a/src/haz3lcore/dynamics/Transition.re b/src/haz3lcore/dynamics/Transition.re index a54c9d18d8..9dcf989c26 100644 --- a/src/haz3lcore/dynamics/Transition.re +++ b/src/haz3lcore/dynamics/Transition.re @@ -445,6 +445,7 @@ module Transition = (EV: EV_MODE) => { | Bool(_) | Int(_) | Float(_) + | LivelitInvocation(_) | String(_) | Constructor(_) | BuiltinFun(_) => diff --git a/src/haz3lcore/dynamics/TypeAssignment.re b/src/haz3lcore/dynamics/TypeAssignment.re index f4979d94bf..382b557d94 100644 --- a/src/haz3lcore/dynamics/TypeAssignment.re +++ b/src/haz3lcore/dynamics/TypeAssignment.re @@ -68,6 +68,8 @@ let dhpat_extend_ctx = (dhpat: DHPat.t, ty: Typ.t, ctx: Ctx.t): option(Ctx.t) => | Int(_) => Typ.eq(ty, Int |> Typ.temp) ? Some([]) : None | Float(_) => Typ.eq(ty, Float |> Typ.temp) ? Some([]) : None | Bool(_) => Typ.eq(ty, Bool |> Typ.temp) ? Some([]) : None + | LivelitInvocation(_) => + Typ.eq(ty, String |> Typ.temp) ? Some([]) : None | String(_) => Typ.eq(ty, String |> Typ.temp) ? Some([]) : None | Constructor(_) => Some([]) // TODO: make this stricter | Cast(dhp, ty1, ty2) => @@ -103,6 +105,7 @@ let rec dhpat_synthesize = (dhpat: DHPat.t, ctx: Ctx.t): option(Typ.t) => { | Float(_) => Some(Float |> Typ.temp) | Bool(_) => Some(Bool |> Typ.temp) | String(_) => Some(String |> Typ.temp) + | LivelitInvocation(_) => Some(String |> Typ.temp) | Cast(_, _, ty) => Some(ty) }; }; @@ -291,6 +294,7 @@ and typ_of_dhexp = (ctx: Ctx.t, m: Statics.Map.t, dh: DHExp.t): option(Typ.t) => | UnOp(Meta(Unquote), d) => let* ty = typ_of_dhexp(ctx, m, d); Some(ty); + | LivelitInvocation(_) => Some(String |> Typ.temp) | ListLit([]) => Some(List(Unknown(Internal) |> Typ.temp) |> Typ.temp) | ListLit([x, ...xs]) => let* t_x = typ_of_dhexp(ctx, m, x); diff --git a/src/haz3lcore/dynamics/Unboxing.re b/src/haz3lcore/dynamics/Unboxing.re index 400620026c..c5094b9e34 100644 --- a/src/haz3lcore/dynamics/Unboxing.re +++ b/src/haz3lcore/dynamics/Unboxing.re @@ -191,6 +191,7 @@ let rec unbox: type a. (unbox_request(a), DHExp.t) => unboxed(a) = ListConcat(_) | UnOp(_) | BinOp(_) | + LivelitInvocation(_) | Match(_), ) => IndetMatch diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index 1990461239..3faf746cd3 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -166,6 +166,10 @@ let is_typ_var = str => is_var(str) || match(capitalized_name_regexp, str); let wild = "_"; let is_wild = match(regexp("^" ++ wild ++ "$")); +let is_livelit = str => { + match(regexp("^[\\^]([a-z][A-Za-z0-9_]*)?\t?$"), str); +}; + /* List literals */ let list_start = "["; let list_end = "]"; @@ -237,6 +241,7 @@ let atomic_forms: list((string, (string => bool, list(Mold.t)))) = [ ("ty_var", (is_typ_var, [mk_op(Typ, [])])), ("ty_var_p", (is_typ_var, [mk_op(TPat, [])])), ("ctr", (is_ctr, [mk_op(Exp, []), mk_op(Pat, [])])), + ("livelit", (is_livelit, [mk_op(Exp, []), mk_op(Pat, [])])), ("type", (is_base_typ, [mk_op(Typ, [])])), ]; diff --git a/src/haz3lcore/statics/MakeTerm.re b/src/haz3lcore/statics/MakeTerm.re index 673af0bb89..fa1ca70bf5 100644 --- a/src/haz3lcore/statics/MakeTerm.re +++ b/src/haz3lcore/statics/MakeTerm.re @@ -341,6 +341,7 @@ and pat_term: unsorted => (UPat.term, list(Id.t)) = { | ([t], []) when Form.is_float(t) => Float(float_of_string(t)) | ([t], []) when Form.is_int(t) => Int(int_of_string(t)) | ([t], []) when Form.is_string(t) => String(Form.strip_quotes(t)) + | ([t], []) when Form.is_livelit(t) => LivelitInvocation(t) | ([t], []) when Form.is_var(t) => Var(t) | ([t], []) when Form.is_wild(t) => Wild | ([t], []) when Form.is_ctr(t) => diff --git a/src/haz3lcore/statics/Statics.re b/src/haz3lcore/statics/Statics.re index aca1ce0389..0ca1711613 100644 --- a/src/haz3lcore/statics/Statics.re +++ b/src/haz3lcore/statics/Statics.re @@ -231,6 +231,7 @@ and uexp_to_info_map = | Int(_) => atomic(Just(Int |> Typ.temp)) | Float(_) => atomic(Just(Float |> Typ.temp)) | String(_) => atomic(Just(String |> Typ.temp)) + | LivelitInvocation(_) => atomic(Just(String |> Typ.temp)) | ListLit(es) => let ids = List.map(UExp.rep_id, es); let modes = Mode.of_list_lit(ctx, List.length(es), mode); @@ -732,6 +733,8 @@ and upat_to_info_map = ) | String(string) => atomic(Just(String |> Typ.temp), Constraint.String(string)) + | LivelitInvocation(_) => + atomic(Just(String |> Typ.temp), Constraint.Truth) | ListLit(ps) => let ids = List.map(UPat.rep_id, ps); let modes = Mode.of_list_lit(ctx, List.length(ps), mode); diff --git a/src/haz3lcore/statics/Term.re b/src/haz3lcore/statics/Term.re index 0493150865..e2551476b1 100644 --- a/src/haz3lcore/statics/Term.re +++ b/src/haz3lcore/statics/Term.re @@ -9,6 +9,7 @@ module Pat = { | Float | Bool | String + | LivelitInvocation | ListLit | Constructor | Cons @@ -47,6 +48,7 @@ module Pat = { | Float(_) => Float | Bool(_) => Bool | String(_) => String + | LivelitInvocation(_) => LivelitInvocation | ListLit(_) => ListLit | Constructor(_) => Constructor | Cons(_) => Cons @@ -66,6 +68,7 @@ module Pat = { | Float => "Float literal" | Bool => "Boolean literal" | String => "String literal" + | LivelitInvocation => "Livelit invocation" | ListLit => "List literal" | Constructor => "Constructor" | Cons => "Cons" @@ -88,6 +91,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Tuple(_) @@ -109,6 +113,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -132,6 +137,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -156,6 +162,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -177,6 +184,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Tuple(_) @@ -202,6 +210,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -233,6 +242,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -258,6 +268,7 @@ module Pat = { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | ListLit(_) | Cons(_, _) | Var(_) @@ -316,6 +327,7 @@ module Exp = { | BuiltinFun | Match | Cast + | LivelitInvocation | ListConcat; let hole = (tms: list(TermBase.Any.t)): term => @@ -365,6 +377,7 @@ module Exp = { | BinOp(op, _, _) => BinOp(op) | BuiltinFun(_) => BuiltinFun | Match(_) => Match + | LivelitInvocation(_) => LivelitInvocation | Cast(_) => Cast; let show_cls: cls => string = @@ -407,6 +420,7 @@ module Exp = { | UnOp(op) => Operators.show_unop(op) | BuiltinFun => "Built-in Function" | Match => "Case expression" + | LivelitInvocation => "Livelit invocation" | Cast => "Cast expression"; // Typfun should be treated as a function here as this is only used to @@ -448,6 +462,7 @@ module Exp = { | UnOp(_) | BinOp(_) | Match(_) + | LivelitInvocation(_) | Constructor(_) => false }; }; @@ -491,6 +506,7 @@ module Exp = { | UnOp(_) | BinOp(_) | Match(_) + | LivelitInvocation(_) | Constructor(_) => false } ); @@ -548,6 +564,7 @@ module Exp = { | UnOp(_) | BinOp(_) | Match(_) + | LivelitInvocation(_) | Constructor(_) => None }; }; diff --git a/src/haz3lcore/statics/TermBase.re b/src/haz3lcore/statics/TermBase.re index f0585955c6..281ce71fd3 100644 --- a/src/haz3lcore/statics/TermBase.re +++ b/src/haz3lcore/statics/TermBase.re @@ -173,6 +173,7 @@ and Exp: { | BinOp(Operators.op_bin, t, t) | BuiltinFun(string) | Match(t, list((Pat.t, t))) + | LivelitInvocation(string) /* INVARIANT: in dynamic expressions, casts must be between two consistent types. Both types should be normalized in dynamics for the cast calculus to work right. */ @@ -240,6 +241,7 @@ and Exp: { | BinOp(Operators.op_bin, t, t) | BuiltinFun(string) /// Doesn't currently have a distinguishable syntax | Match(t, list((Pat.t, t))) + | LivelitInvocation(string) | Cast(t, Typ.t, Typ.t) and t = IdTagged.t(term); @@ -325,6 +327,7 @@ and Exp: { rls, ), ) + | LivelitInvocation(str) => LivelitInvocation(str) | Cast(e, t1, t2) => Cast(exp_map_term(e), t1, t2) }, }; @@ -417,6 +420,7 @@ and Exp: { | (Int(_), _) | (Float(_), _) | (String(_), _) + | (LivelitInvocation(_), _) | (ListLit(_), _) | (Constructor(_), _) | (Fun(_), _) @@ -457,6 +461,7 @@ and Pat: { | Float(float) | Bool(bool) | String(string) + | LivelitInvocation(string) | ListLit(list(t)) | Constructor(string, Typ.t) // Typ.t field is only meaningful in dynamic patterns | Cons(t, t) @@ -491,6 +496,7 @@ and Pat: { | Float(float) | Bool(bool) | String(string) + | LivelitInvocation(string) | ListLit(list(t)) | Constructor(string, Typ.t) | Cons(t, t) @@ -529,6 +535,7 @@ and Pat: { | Float(_) | Constructor(_) | String(_) + | LivelitInvocation(_) | Var(_) => term | MultiHole(things) => MultiHole(List.map(any_map_term, things)) | ListLit(ts) => ListLit(List.map(pat_map_term, ts)) @@ -577,6 +584,7 @@ and Pat: { | (Int(_), _) | (Float(_), _) | (String(_), _) + | (LivelitInvocation(_), _) | (ListLit(_), _) | (Constructor(_), _) | (Cons(_), _) diff --git a/src/haz3lcore/zipper/EditorUtil.re b/src/haz3lcore/zipper/EditorUtil.re index ff59e48f55..17ea33e14a 100644 --- a/src/haz3lcore/zipper/EditorUtil.re +++ b/src/haz3lcore/zipper/EditorUtil.re @@ -32,6 +32,7 @@ let rec append_exp = (e1: Exp.t, e2: Exp.t): Exp.t => { | BinOp(_) | BuiltinFun(_) | Cast(_) + | LivelitInvocation(_) | Match(_) => Exp.{ids: [Id.mk()], copied: false, term: Seq(e1, e2)} | Seq(e11, e12) => let e12' = append_exp(e12, e2); diff --git a/src/haz3lschool/SyntaxTest.re b/src/haz3lschool/SyntaxTest.re index 23dff72251..89ac278b39 100644 --- a/src/haz3lschool/SyntaxTest.re +++ b/src/haz3lschool/SyntaxTest.re @@ -25,6 +25,7 @@ let rec find_var_upat = (name: string, upat: Pat.t): bool => { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | Constructor(_) => false | Cons(up1, up2) => find_var_upat(name, up1) || find_var_upat(name, up2) | ListLit(l) @@ -63,6 +64,7 @@ let rec find_in_let = ul, ); } + | (LivelitInvocation(_), _) | (Var(_), _) | (Tuple(_), _) | ( @@ -126,6 +128,7 @@ let rec find_fn = | Int(_) | Float(_) | String(_) + | LivelitInvocation(_) | Constructor(_) | Undefined | BuiltinFun(_) @@ -147,6 +150,7 @@ let rec var_mention_upat = (name: string, upat: Pat.t): bool => { | Float(_) | Bool(_) | String(_) + | LivelitInvocation(_) | Constructor(_) => false | Cons(up1, up2) => var_mention_upat(name, up1) || var_mention_upat(name, up2) @@ -179,6 +183,7 @@ let rec var_mention = (name: string, uexp: Exp.t): bool => { | String(_) | Constructor(_) | Undefined + | LivelitInvocation(_) | Deferral(_) => false | Fun(args, body, _, _) => var_mention_upat(name, args) ? false : var_mention(name, body) @@ -240,6 +245,7 @@ let rec var_applied = (name: string, uexp: Exp.t): bool => { | String(_) | Constructor(_) | Undefined + | LivelitInvocation(_) | Deferral(_) => false | Fun(args, body, _, _) | FixF(args, body, _) => @@ -332,6 +338,7 @@ let rec tail_check = (name: string, uexp: Exp.t): bool => { | Constructor(_) | Undefined | Var(_) + | LivelitInvocation(_) | BuiltinFun(_) => true | FixF(args, body, _) | Fun(args, body, _, _) => diff --git a/src/haz3lweb/view/ExplainThis.re b/src/haz3lweb/view/ExplainThis.re index cbfdf4df9f..942af23ff2 100644 --- a/src/haz3lweb/view/ExplainThis.re +++ b/src/haz3lweb/view/ExplainThis.re @@ -539,6 +539,7 @@ let get_doc = | Closure(_) | Cast(_) | BuiltinFun(_) => simple("Internal expression") + | LivelitInvocation(_) => simple("Livelit invocation") | EmptyHole => get_message(HoleExp.empty_hole_exps) | MultiHole(_children) => get_message(HoleExp.multi_hole_exps) | TyAlias(ty_pat, ty_def, _body) => @@ -1058,6 +1059,7 @@ let get_doc = | Invalid(_) => default // Shouldn't get hit | Parens(_) => default // Shouldn't get hit? | Cast(_) => default // Shouldn't get hit? + | LivelitInvocation(_) => default // Shouldn't get hit? }; | Tuple(terms) => let basic = group_id => @@ -1312,6 +1314,7 @@ let get_doc = LetExp.lets_str, ); } + | LivelitInvocation(_) => default | Tuple([]) => if (LetExp.let_triv_exp.id == get_specificity_level(LetExp.lets_triv)) { @@ -1945,6 +1948,15 @@ let get_doc = ), TerminalPat.strlit(s), ) + | LivelitInvocation(s) => + get_message( + ~format= + Some( + msg => + Printf.sprintf(Scanf.format_from_string(msg, "%s%s"), s, s), + ), + TerminalPat.strlit(s), + ) | Tuple([]) => get_message(TerminalPat.triv) | ListLit(elements) => if (List.length(elements) == 0) { diff --git a/src/haz3lweb/view/dhcode/layout/DHDoc_Exp.re b/src/haz3lweb/view/dhcode/layout/DHDoc_Exp.re index ffb0eed0c5..9cae28323c 100644 --- a/src/haz3lweb/view/dhcode/layout/DHDoc_Exp.re +++ b/src/haz3lweb/view/dhcode/layout/DHDoc_Exp.re @@ -54,6 +54,7 @@ let rec precedence = (~show_function_bodies, ~show_casts: bool, d: DHExp.t) => { | Float(_) | String(_) | ListLit(_) + | LivelitInvocation(_) | EmptyHole | Constructor(_) | FailedCast(_) @@ -319,6 +320,7 @@ let mk = | Int(n) => DHDoc_common.mk_IntLit(n) | Float(f) => DHDoc_common.mk_FloatLit(f) | String(s) => DHDoc_common.mk_StringLit(s) + | LivelitInvocation(s) => DHDoc_common.mk_StringLit(s) | Undefined => DHDoc_common.mk_Undefined() | Test(d) => DHDoc_common.mk_Test(go'(d)) | Deferral(_) => text("_") diff --git a/src/haz3lweb/view/dhcode/layout/DHDoc_Pat.re b/src/haz3lweb/view/dhcode/layout/DHDoc_Pat.re index 8996bd4b03..aa53da02f4 100644 --- a/src/haz3lweb/view/dhcode/layout/DHDoc_Pat.re +++ b/src/haz3lweb/view/dhcode/layout/DHDoc_Pat.re @@ -19,6 +19,7 @@ let precedence = (dp: Pat.t) => | Ap(_) => DHDoc_common.precedence_Ap | Parens(_) => DHDoc_common.precedence_const | Cast(_) => DHDoc_common.precedence_Ap + | LivelitInvocation(_) => DHDoc_common.precedence_const }; let rec mk = @@ -51,6 +52,7 @@ let rec mk = | Float(f) => DHDoc_common.mk_FloatLit(f) | Bool(b) => DHDoc_common.mk_BoolLit(b) | String(s) => DHDoc_common.mk_StringLit(s) + | LivelitInvocation(s) => DHDoc_common.mk_StringLit(s) | ListLit(d_list) => let ol = List.map(mk', d_list); DHDoc_common.mk_ListLit(ol); From 4ab9e5504000c704c8d61039bb0f19da130d6ea1 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Sun, 6 Oct 2024 21:44:47 -0400 Subject: [PATCH 04/23] Fix test --- test/Test_Editor.re | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/Test_Editor.re b/test/Test_Editor.re index 12838d2676..64fe87882b 100644 --- a/test/Test_Editor.re +++ b/test/Test_Editor.re @@ -26,14 +26,14 @@ let test_insert = () => { let ed: Action.Result.t(Editor.t) = Perform.go(~settings=CoreSettings.on, a, ed); let m: Mold.t = { - in_: [Any], + in_: [], out: Any, nibs: (Nib.{shape: Convex, sort: Any}, Nib.{shape: Convex, sort: Any}), }; let t: Tile.t = { - label: ["4"], + label: ["4+5"], mold: m, - shards: [], + shards: [0], children: [], id: Id.mk(), }; @@ -47,16 +47,16 @@ let test_insert = () => { history, read_only: false, }; + check( zipper_typ, - "Insert 4", + "Insert 4+5", expected.state.zipper, Result.get_ok(ed).state.zipper, ); - check(typ, "Insert 4", expected, Result.get_ok(ed)); }; let tests = [ test_case("Initial editor", `Quick, test_initial_editor), - // test_case("Insert 4", `Quick, test_insert), + test_case("Insert 4", `Quick, test_insert), ]; From 703c55423e3bb9efc934eef043cea6e18a3776e4 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Mon, 7 Oct 2024 10:39:39 -0400 Subject: [PATCH 05/23] Add MakeTerm tests to test regular hazel parsing --- test/Test_Editor.re | 14 ++++------- test/Test_MakeTerm.re | 58 +++++++++++++++++++++++++++++++++++++++++++ test/haz3ltest.re | 1 + 3 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 test/Test_MakeTerm.re diff --git a/test/Test_Editor.re b/test/Test_Editor.re index 64fe87882b..f5be611b39 100644 --- a/test/Test_Editor.re +++ b/test/Test_Editor.re @@ -18,11 +18,11 @@ let test_initial_editor = () => { check(typ, "Initial editor", expected, ed); }; -// TODO Test inserting on the editor +// TODO Test inserting in the editor let test_insert = () => { let zipper = Zipper.init(); let ed = Editor.init(~settings=CoreSettings.on, zipper); - let a = Action.Insert("4+5"); + let a = Action.Paste("4+5"); let ed: Action.Result.t(Editor.t) = Perform.go(~settings=CoreSettings.on, a, ed); let m: Mold.t = { @@ -47,16 +47,12 @@ let test_insert = () => { history, read_only: false, }; + let actual = Result.get_ok(ed); - check( - zipper_typ, - "Insert 4+5", - expected.state.zipper, - Result.get_ok(ed).state.zipper, - ); + check(zipper_typ, "Insert 4+5", expected.state.zipper, actual.state.zipper); }; let tests = [ test_case("Initial editor", `Quick, test_initial_editor), - test_case("Insert 4", `Quick, test_insert), + // test_case("Insert 4", `Quick, test_insert), ]; diff --git a/test/Test_MakeTerm.re b/test/Test_MakeTerm.re new file mode 100644 index 0000000000..5bfa76b6ff --- /dev/null +++ b/test/Test_MakeTerm.re @@ -0,0 +1,58 @@ +/** + * This file contains tests to validate the `MakeTerm` module's ability to convert + * zippers into expressions. + */ +open Alcotest; +open Haz3lcore; + +let exp_typ = testable(Fmt.using(Exp.show, Fmt.string), Exp.fast_equal); + +// TODO Assertion if it doesn't parse +let parse_exp = (s: string) => + MakeTerm.from_zip_for_sem(Option.get(Printer.zipper_of_string(s))).term; +let exp_check = (expected, actual) => + check(exp_typ, actual, expected, parse_exp(actual)); + +let tests = [ + test_case("Integer Literal", `Quick, () => { + exp_check(Int(0) |> Exp.fresh, "0") + }), + test_case("Empty Hole", `Quick, () => { + exp_check(EmptyHole |> Exp.fresh, "?") + }), + test_case("Free Variable", `Quick, () => { + exp_check(Var("x") |> Exp.fresh, "x") + }), + test_case("Parenthesized Expression", `Quick, () => { + exp_check(Parens(Int(0) |> Exp.fresh) |> Exp.fresh, "(0)") + }), + test_case("Let Expression", `Quick, () => { + exp_check( + Let( + Var("x") |> Pat.fresh, + Int(1) |> Exp.fresh, + Var("x") |> Exp.fresh, + ) + |> Exp.fresh, + "let x = 1 in x", + ) + }), + test_case("Function Application", `Quick, () => { + exp_check( + Ap(Forward, Var("f") |> Exp.fresh, Var("x") |> Exp.fresh) |> Exp.fresh, + "f(x)", + ) + }), + test_case("Named Function Definition", `Quick, () => { + exp_check( + Let( + Var("f") |> Pat.fresh, + Fun(Var("x") |> Pat.fresh, Var("x") |> Exp.fresh, None, None) // It seems as though the function naming happens during elaboration and not during parsing + |> Exp.fresh, + Int(1) |> Exp.fresh, + ) + |> Exp.fresh, + "let f = fun x -> x in 1", + ) + }), +]; diff --git a/test/haz3ltest.re b/test/haz3ltest.re index d883f296d5..e89b2047ec 100644 --- a/test/haz3ltest.re +++ b/test/haz3ltest.re @@ -9,6 +9,7 @@ let (suite, _) = ("Statics", Test_Statics.tests), ("Evaluator", Test_Evaluator.tests), ("Editor", Test_Editor.tests), + ("MakeTerm", Test_MakeTerm.tests), ], ); Junit.to_file(Junit.make([suite]), "junit_tests.xml"); From e9dfe1c9cd7a037892d89830d8509e2a815c308f Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Mon, 7 Oct 2024 11:44:40 -0400 Subject: [PATCH 06/23] Remove test editor --- test/Test_Editor.re | 58 ------------------------------------------- test/Test_MakeTerm.re | 2 +- test/haz3ltest.re | 1 - 3 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 test/Test_Editor.re diff --git a/test/Test_Editor.re b/test/Test_Editor.re deleted file mode 100644 index f5be611b39..0000000000 --- a/test/Test_Editor.re +++ /dev/null @@ -1,58 +0,0 @@ -open Alcotest; -open Haz3lcore; -let typ = testable(Fmt.using(Editor.show, Fmt.string), Editor.equal); -let zipper_typ = testable(Fmt.using(Zipper.show, Fmt.string), Zipper.equal); - -let test_initial_editor = () => { - let zipper = Zipper.init(); - let ed = Editor.init(~settings=CoreSettings.on, zipper); - - let expected: Editor.t = { - state: { - zipper, - meta: Editor.Meta.init(zipper, ~settings=CoreSettings.on), - }, - history: ([], []), - read_only: false, - }; - check(typ, "Initial editor", expected, ed); -}; - -// TODO Test inserting in the editor -let test_insert = () => { - let zipper = Zipper.init(); - let ed = Editor.init(~settings=CoreSettings.on, zipper); - let a = Action.Paste("4+5"); - let ed: Action.Result.t(Editor.t) = - Perform.go(~settings=CoreSettings.on, a, ed); - let m: Mold.t = { - in_: [], - out: Any, - nibs: (Nib.{shape: Convex, sort: Any}, Nib.{shape: Convex, sort: Any}), - }; - let t: Tile.t = { - label: ["4+5"], - mold: m, - shards: [0], - children: [], - id: Id.mk(), - }; - let til: Segment.t = [Tile(t)]; - let history: Editor.History.t = ([], []); - let expected: Editor.t = { - state: { - zipper: Zipper.unzip(til), - meta: Editor.Meta.init(zipper, ~settings=CoreSettings.on), - }, - history, - read_only: false, - }; - let actual = Result.get_ok(ed); - - check(zipper_typ, "Insert 4+5", expected.state.zipper, actual.state.zipper); -}; - -let tests = [ - test_case("Initial editor", `Quick, test_initial_editor), - // test_case("Insert 4", `Quick, test_insert), -]; diff --git a/test/Test_MakeTerm.re b/test/Test_MakeTerm.re index 5bfa76b6ff..a7f8d11cb7 100644 --- a/test/Test_MakeTerm.re +++ b/test/Test_MakeTerm.re @@ -47,7 +47,7 @@ let tests = [ exp_check( Let( Var("f") |> Pat.fresh, - Fun(Var("x") |> Pat.fresh, Var("x") |> Exp.fresh, None, None) // It seems as though the function naming happens during elaboration and not during parsing + Fun(Var("x") |> Pat.fresh, Var("x") |> Exp.fresh, None, None) // It seems as though the function naming happens during elaboration and not during parsing |> Exp.fresh, Int(1) |> Exp.fresh, ) diff --git a/test/haz3ltest.re b/test/haz3ltest.re index e89b2047ec..3c6cbb6098 100644 --- a/test/haz3ltest.re +++ b/test/haz3ltest.re @@ -8,7 +8,6 @@ let (suite, _) = ("Elaboration", Test_Elaboration.elaboration_tests), ("Statics", Test_Statics.tests), ("Evaluator", Test_Evaluator.tests), - ("Editor", Test_Editor.tests), ("MakeTerm", Test_MakeTerm.tests), ], ); From f0e16e74ee16df27d080c0aafc6014c578ce078d Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Mon, 7 Oct 2024 12:43:54 -0400 Subject: [PATCH 07/23] Add example with holes --- test/Test_MakeTerm.re | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/Test_MakeTerm.re b/test/Test_MakeTerm.re index a7f8d11cb7..82eee683b6 100644 --- a/test/Test_MakeTerm.re +++ b/test/Test_MakeTerm.re @@ -55,4 +55,16 @@ let tests = [ "let f = fun x -> x in 1", ) }), + test_case("Incomplete Function Definition", `Quick, () => { + exp_check( + Let( + EmptyHole |> Pat.fresh, + Fun(Var("x") |> Pat.fresh, EmptyHole |> Exp.fresh, None, None) + |> Exp.fresh, + EmptyHole |> Exp.fresh, + ) + |> Exp.fresh, + "let = fun x -> in ", + ) + }), ]; From d9fcbf04397bca305fe2b2824365a2ad1949e133 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Tue, 8 Oct 2024 17:39:57 -0400 Subject: [PATCH 08/23] created dummy keyword 'll' for livelit invocation --- src/haz3lcore/Measured.re | 23 +++++++++++--- src/haz3lcore/lang/Form.re | 22 +++++++++----- src/haz3lcore/statics/MakeTerm.re | 2 ++ src/haz3lcore/tiles/Livelit.re | 50 +++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 src/haz3lcore/tiles/Livelit.re diff --git a/src/haz3lcore/Measured.re b/src/haz3lcore/Measured.re index 61dad8a831..a8e9c013ec 100644 --- a/src/haz3lcore/Measured.re +++ b/src/haz3lcore/Measured.re @@ -282,6 +282,16 @@ let last_of_token = (token: string, origin: Point.t): Point.t => row: origin.row + StringUtil.num_linebreaks(token), }; +let livelit_padding = (t: Base.tile): abs_indent => + switch (t.label) { + | [possible_livelit_name] => + switch (Livelit.find_livelit(possible_livelit_name)) { + | Some(ll) => ll.width + 1 // Add one for margin + | None => 0 + } + | _ => 0 + }; + let of_segment = (seg: Segment.t, info_map: Statics.Map.t): t => { let is_indented = is_indented_map(seg); @@ -360,11 +370,16 @@ let of_segment = (seg: Segment.t, info_map: Statics.Map.t): t => { let map = add_pr(p, {origin, last}, map); (contained_indent, last, map); | Tile(t) => + let token = List.nth(t.label); let add_shard = (origin, shard, map) => { - let token = List.nth(t.label, shard); - let map = extra_rows(token, origin, map); - let last = last_of_token(token, origin); - let map = add_s(t.id, shard, {origin, last}, map); + let lp = livelit_padding(t); + let last = + Point.{ + ...origin, + col: + origin.col + (lp > 0 ? lp : String.length(token(shard))), + }; + let map = map |> add_s(t.id, shard, {origin, last}); (last, map); }; let (last, map) = diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index 3faf746cd3..729a8fb431 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -10,7 +10,10 @@ module P = Precedence; the 'convex_monos' table, for single-token forms, or the 'forms' table, for compound forms. The wrapping functions seen in both of those tables determine the - shape, precedence, and expansion behavior of the form. */ + shape, precedence, and expansion behavior of the form. + + convex_monos tale doesn't exist? + */ /* A label is the textual expression of a form's delimiters */ [@deriving (show({with_path: false}), sexp, yojson)] @@ -147,6 +150,15 @@ let is_bool = match(regexp("^(" ++ String.concat("|", bools) ++ ")$")); let undefined = "undefined"; let is_undefined = match(regexp("^" ++ undefined ++ "$")); +let is_livelit = str => { + let re = regexp("^(ll)([a-z][A-Za-z0-9_]*)$"); + // print_endline("is_livelit"); + // print_endline(str); + let result = match(re, str); + // print_endline(string_of_bool(result)); + result; +}; + let var_regexp = regexp( {|(^[a-z_][A-Za-z0-9_']*$)|(^[A-Z][A-Za-z0-9_']*\.[a-z][A-Za-z0-9_']*$)|}, @@ -154,8 +166,8 @@ let var_regexp = let is_var = str => !is_bool(str) && !is_undefined(str) + && !is_livelit(str) && str != "_" - //&& !is_keyword(str) && match(var_regexp, str); let capitalized_name_regexp = regexp("^[A-Z][A-Za-z0-9_]*$"); let is_ctr = match(capitalized_name_regexp); @@ -166,10 +178,6 @@ let is_typ_var = str => is_var(str) || match(capitalized_name_regexp, str); let wild = "_"; let is_wild = match(regexp("^" ++ wild ++ "$")); -let is_livelit = str => { - match(regexp("^[\\^]([a-z][A-Za-z0-9_]*)?\t?$"), str); -}; - /* List literals */ let list_start = "["; let list_end = "]"; @@ -218,6 +226,7 @@ let bad_token_cls: string => bad_token_cls = Order in this list determines relative remolding priority for forms with overlapping regexps */ let atomic_forms: list((string, (string => bool, list(Mold.t)))) = [ + ("livelit", (is_livelit, [mk_op(Exp, []), mk_op(Pat, [])])), ("var", (is_var, [mk_op(Exp, []), mk_op(Pat, [])])), ( "explicit_hole", @@ -241,7 +250,6 @@ let atomic_forms: list((string, (string => bool, list(Mold.t)))) = [ ("ty_var", (is_typ_var, [mk_op(Typ, [])])), ("ty_var_p", (is_typ_var, [mk_op(TPat, [])])), ("ctr", (is_ctr, [mk_op(Exp, []), mk_op(Pat, [])])), - ("livelit", (is_livelit, [mk_op(Exp, []), mk_op(Pat, [])])), ("type", (is_base_typ, [mk_op(Typ, [])])), ]; diff --git a/src/haz3lcore/statics/MakeTerm.re b/src/haz3lcore/statics/MakeTerm.re index fa1ca70bf5..f95577d092 100644 --- a/src/haz3lcore/statics/MakeTerm.re +++ b/src/haz3lcore/statics/MakeTerm.re @@ -188,6 +188,8 @@ and exp_term: unsorted => (UExp.term, list(Id.t)) = { | ([t], []) when Form.is_string(t) => ret(String(Form.strip_quotes(t))) | ([t], []) when Form.is_float(t) => ret(Float(float_of_string(t))) + | ([t], []) when Form.is_livelit(t) => + ret(LivelitInvocation("livelit name")) | ([t], []) when Form.is_var(t) => ret(Var(t)) | ([t], []) when Form.is_ctr(t) => ret(Constructor(t, Unknown(Internal) |> Typ.temp)) diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re new file mode 100644 index 0000000000..53261739f5 --- /dev/null +++ b/src/haz3lcore/tiles/Livelit.re @@ -0,0 +1,50 @@ +open Util; + +[@deriving (show({with_path: false}), sexp, yojson)] +type t = { + name: string, + width: int, + default: Pat.term, + expansion_type: Typ.cls, +}; + +type state = Id.Map.t(DHExp.t); +let empty_state: state = Id.Map.empty; +let slider: t = { + name: "llslider\t", + width: 10, + default: Int(30), + expansion_type: Int, +}; + +let checkbox: t = { + name: "llcheckbox\t", + width: 1, + default: Bool(false), + expansion_type: Bool, +}; + +let fslider: t = { + name: "llfslider\t", + width: 10, + default: Float(0.5), + expansion_type: Float, +}; + +let livelits: list(t) = [checkbox, fslider, slider]; + +let find_livelit = (livelit_name: string): option(t) => + List.find_opt(l => l.name == livelit_name, livelits); + +let elaborate_livelit = + (livelit_name: string, uexp_id: Uuidm.t, livelits: state) + : option(Pat.term) => { + switch (Id.Map.find_opt(uexp_id, livelits)) { + // | Some(t) => Some(t) + | _ => + switch (find_livelit(livelit_name)) { + | Some(l) => Some(l.default) + | None => None + } + }; +}; From 7870b90cc8df24e0f23ad0490d6a8827d5f560f6 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 9 Oct 2024 08:51:04 -0400 Subject: [PATCH 09/23] added basic browser test example --- browertest/.gitignore | 5 + browertest/.prettierignore | 3 + browertest/.prettierrc.cjs | 6 + browertest/mp4_to_gif.sh | 7 + browertest/out/.keep | 0 browertest/output.gif | Bin 0 -> 812666 bytes browertest/package.json | 27 + browertest/pnpm-lock.yaml | 2996 +++++++++++++++++++++++++++++ browertest/readme.md | 36 + browertest/src/index.ts | 279 +++ browertest/src/utils.ts | 204 ++ browertest/tests/detailed.test.ts | 153 ++ browertest/tests/utils.test.ts | 145 ++ browertest/tsconfig.json | 16 + 14 files changed, 3877 insertions(+) create mode 100644 browertest/.gitignore create mode 100644 browertest/.prettierignore create mode 100644 browertest/.prettierrc.cjs create mode 100644 browertest/mp4_to_gif.sh create mode 100644 browertest/out/.keep create mode 100644 browertest/output.gif create mode 100644 browertest/package.json create mode 100644 browertest/pnpm-lock.yaml create mode 100644 browertest/readme.md create mode 100644 browertest/src/index.ts create mode 100644 browertest/src/utils.ts create mode 100644 browertest/tests/detailed.test.ts create mode 100644 browertest/tests/utils.test.ts create mode 100644 browertest/tsconfig.json diff --git a/browertest/.gitignore b/browertest/.gitignore new file mode 100644 index 0000000000..f5af369be9 --- /dev/null +++ b/browertest/.gitignore @@ -0,0 +1,5 @@ +history/* +dist/ +node_modules/ +out/* +!out/.keep \ No newline at end of file diff --git a/browertest/.prettierignore b/browertest/.prettierignore new file mode 100644 index 0000000000..4de0baf5aa --- /dev/null +++ b/browertest/.prettierignore @@ -0,0 +1,3 @@ +**/build/** +**/dist/** +*.test.ts \ No newline at end of file diff --git a/browertest/.prettierrc.cjs b/browertest/.prettierrc.cjs new file mode 100644 index 0000000000..ffb479964e --- /dev/null +++ b/browertest/.prettierrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + semi: true, + singleQuote: false, + tabWidth: 4, + useTabs: true, +}; diff --git a/browertest/mp4_to_gif.sh b/browertest/mp4_to_gif.sh new file mode 100644 index 0000000000..e470dfb4de --- /dev/null +++ b/browertest/mp4_to_gif.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +filename=$1 +# extract filename without extension +filename_no_ext="${filename%.*}" + +ffmpeg -i $filename -vf "fps=30,scale=512:-1:flags=lanczos" $filename_no_ext.gif \ No newline at end of file diff --git a/browertest/out/.keep b/browertest/out/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/browertest/output.gif b/browertest/output.gif new file mode 100644 index 0000000000000000000000000000000000000000..a75988b211f0d88632fc42031b9889944e5410ef GIT binary patch literal 812666 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

WUH9 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�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%0D7>(q3 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

  • x#)~`q|3osB!iT}gh8v{ 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≻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

    auBXfKUtkFA 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⋙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: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

    E*WJL0EmkO3%_wA~W(eCX+bK^E|4e643@c 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 vW}db^^%^^Bpmx2XWE^d|C&h;+E{eVDcd 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 z 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 butHyIwFoc(D474^ef)p^fAueaK79WdcRkv` literal 0 HcmV?d00001 diff --git a/browertest/package.json b/browertest/package.json new file mode 100644 index 0000000000..a349932838 --- /dev/null +++ b/browertest/package.json @@ -0,0 +1,27 @@ +{ + "name": "hazel_ci", + "version": "1.0.0", + "description": "", + "main": "tests/index.ts", + "scripts": { + "build:hazel": "cd .. && make deps && make release", + "dev:hazel": "cd .. && make serve", + "execute": "npm run dev:hazel > /dev/null 2>&1 & tsc --outDir dist && cd dist && node src/index.js; kill -9 $(lsof -t -i:8000)", + "test": "vitest", + "style": "prettier '**/*.ts' --write ." + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/jsdom": "^21.1.7", + "jsdom": "^25.0.1", + "puppeteer": "^23.4.1", + "puppeteer-screen-recorder": "^3.0.3", + "vitest": "^2.1.1" + }, + "devDependencies": { + "prettier": "^3.3.3", + "ts-node": "^10.9.2" + } +} diff --git a/browertest/pnpm-lock.yaml b/browertest/pnpm-lock.yaml new file mode 100644 index 0000000000..74c10177e0 --- /dev/null +++ b/browertest/pnpm-lock.yaml @@ -0,0 +1,2996 @@ +lockfileVersion: "9.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + dependencies: + "@types/jsdom": + specifier: ^21.1.7 + version: 21.1.7 + jsdom: + specifier: ^25.0.1 + version: 25.0.1 + puppeteer: + specifier: ^23.4.1 + version: 23.4.1(typescript@5.6.2) + puppeteer-screen-recorder: + specifier: ^3.0.3 + version: 3.0.3(puppeteer@23.4.1(typescript@5.6.2)) + vitest: + specifier: ^2.1.1 + version: 2.1.1(@types/node@22.7.1)(jsdom@25.0.1) + devDependencies: + prettier: + specifier: ^3.3.3 + version: 3.3.3 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.7.1)(typescript@5.6.2) + +packages: + "@babel/code-frame@7.24.7": + resolution: + { + integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.24.7": + resolution: + { + integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==, + } + engines: { node: ">=6.9.0" } + + "@babel/highlight@7.24.7": + resolution: + { + integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==, + } + engines: { node: ">=6.9.0" } + + "@cspotcode/source-map-support@0.8.1": + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + } + engines: { node: ">=12" } + + "@esbuild/aix-ppc64@0.21.5": + resolution: + { + integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.21.5": + resolution: + { + integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm@0.21.5": + resolution: + { + integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.21.5": + resolution: + { + integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.21.5": + resolution: + { + integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-x64@0.21.5": + resolution: + { + integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [darwin] + + "@esbuild/freebsd-arm64@0.21.5": + resolution: + { + integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.21.5": + resolution: + { + integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.21.5": + resolution: + { + integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm@0.21.5": + resolution: + { + integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-ia32@0.21.5": + resolution: + { + integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-loong64@0.21.5": + resolution: + { + integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, + } + engines: { node: ">=12" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-mips64el@0.21.5": + resolution: + { + integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, + } + engines: { node: ">=12" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-ppc64@0.21.5": + resolution: + { + integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-riscv64@0.21.5": + resolution: + { + integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, + } + engines: { node: ">=12" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-s390x@0.21.5": + resolution: + { + integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, + } + engines: { node: ">=12" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-x64@0.21.5": + resolution: + { + integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [linux] + + "@esbuild/netbsd-x64@0.21.5": + resolution: + { + integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-x64@0.21.5": + resolution: + { + integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [openbsd] + + "@esbuild/sunos-x64@0.21.5": + resolution: + { + integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.21.5": + resolution: + { + integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-ia32@0.21.5": + resolution: + { + integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-x64@0.21.5": + resolution: + { + integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [win32] + + "@ffmpeg-installer/darwin-arm64@4.1.5": + resolution: + { + integrity: sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==, + } + cpu: [arm64] + os: [darwin] + + "@ffmpeg-installer/darwin-x64@4.1.0": + resolution: + { + integrity: sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==, + } + cpu: [x64] + os: [darwin] + + "@ffmpeg-installer/ffmpeg@1.1.0": + resolution: + { + integrity: sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==, + } + + "@ffmpeg-installer/linux-arm64@4.1.4": + resolution: + { + integrity: sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==, + } + cpu: [arm64] + os: [linux] + + "@ffmpeg-installer/linux-arm@4.1.3": + resolution: + { + integrity: sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==, + } + cpu: [arm] + os: [linux] + + "@ffmpeg-installer/linux-ia32@4.1.0": + resolution: + { + integrity: sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==, + } + cpu: [ia32] + os: [linux] + + "@ffmpeg-installer/linux-x64@4.1.0": + resolution: + { + integrity: sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==, + } + cpu: [x64] + os: [linux] + + "@ffmpeg-installer/win32-ia32@4.1.0": + resolution: + { + integrity: sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==, + } + cpu: [ia32] + os: [win32] + + "@ffmpeg-installer/win32-x64@4.1.0": + resolution: + { + integrity: sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==, + } + cpu: [x64] + os: [win32] + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.0": + resolution: + { + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, + } + + "@jridgewell/trace-mapping@0.3.9": + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + } + + "@puppeteer/browsers@2.4.0": + resolution: + { + integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==, + } + engines: { node: ">=18" } + hasBin: true + + "@rollup/rollup-android-arm-eabi@4.23.0": + resolution: + { + integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.23.0": + resolution: + { + integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.23.0": + resolution: + { + integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==, + } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.23.0": + resolution: + { + integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==, + } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-linux-arm-gnueabihf@4.23.0": + resolution: + { + integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm-musleabihf@4.23.0": + resolution: + { + integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm64-gnu@4.23.0": + resolution: + { + integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-arm64-musl@4.23.0": + resolution: + { + integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-powerpc64le-gnu@4.23.0": + resolution: + { + integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==, + } + cpu: [ppc64] + os: [linux] + + "@rollup/rollup-linux-riscv64-gnu@4.23.0": + resolution: + { + integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-s390x-gnu@4.23.0": + resolution: + { + integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==, + } + cpu: [s390x] + os: [linux] + + "@rollup/rollup-linux-x64-gnu@4.23.0": + resolution: + { + integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-linux-x64-musl@4.23.0": + resolution: + { + integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-win32-arm64-msvc@4.23.0": + resolution: + { + integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==, + } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.23.0": + resolution: + { + integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==, + } + cpu: [ia32] + os: [win32] + + "@rollup/rollup-win32-x64-msvc@4.23.0": + resolution: + { + integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==, + } + cpu: [x64] + os: [win32] + + "@tootallnate/quickjs-emscripten@0.23.0": + resolution: + { + integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, + } + + "@tsconfig/node10@1.0.11": + resolution: + { + integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==, + } + + "@tsconfig/node12@1.0.11": + resolution: + { + integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, + } + + "@tsconfig/node14@1.0.3": + resolution: + { + integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, + } + + "@tsconfig/node16@1.0.4": + resolution: + { + integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==, + } + + "@types/estree@1.0.6": + resolution: + { + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, + } + + "@types/jsdom@21.1.7": + resolution: + { + integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==, + } + + "@types/node@22.7.1": + resolution: + { + integrity: sha512-adOMRLVmleuWs/5V/w5/l7o0chDK/az+5ncCsIapTKogsu/3MVWvSgP58qVTXi5IwpfGt8pMobNq9rOWtJyu5Q==, + } + + "@types/tough-cookie@4.0.5": + resolution: + { + integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==, + } + + "@types/yauzl@2.10.3": + resolution: + { + integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==, + } + + "@vitest/expect@2.1.1": + resolution: + { + integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==, + } + + "@vitest/mocker@2.1.1": + resolution: + { + integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==, + } + peerDependencies: + "@vitest/spy": 2.1.1 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + "@vitest/pretty-format@2.1.1": + resolution: + { + integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==, + } + + "@vitest/runner@2.1.1": + resolution: + { + integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==, + } + + "@vitest/snapshot@2.1.1": + resolution: + { + integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==, + } + + "@vitest/spy@2.1.1": + resolution: + { + integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==, + } + + "@vitest/utils@2.1.1": + resolution: + { + integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==, + } + + acorn-walk@8.3.4: + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, + } + engines: { node: ">=0.4.0" } + + acorn@8.12.1: + resolution: + { + integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + agent-base@7.1.1: + resolution: + { + integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==, + } + engines: { node: ">= 14" } + + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + + ansi-styles@3.2.1: + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, + } + engines: { node: ">=4" } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + + arg@4.1.3: + resolution: + { + integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, + } + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + assertion-error@2.0.1: + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } + + ast-types@0.13.4: + resolution: + { + integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, + } + engines: { node: ">=4" } + + async@0.2.10: + resolution: + { + integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==, + } + + asynckit@0.4.0: + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + } + + b4a@1.6.7: + resolution: + { + integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==, + } + + bare-events@2.5.0: + resolution: + { + integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==, + } + + bare-fs@2.3.5: + resolution: + { + integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==, + } + + bare-os@2.4.4: + resolution: + { + integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==, + } + + bare-path@2.1.3: + resolution: + { + integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==, + } + + bare-stream@2.3.0: + resolution: + { + integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==, + } + + base64-js@1.5.1: + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } + + basic-ftp@5.0.5: + resolution: + { + integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, + } + engines: { node: ">=10.0.0" } + + buffer-crc32@0.2.13: + resolution: + { + integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, + } + + buffer@5.7.1: + resolution: + { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, + } + + cac@6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + + callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } + + chai@5.1.1: + resolution: + { + integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==, + } + engines: { node: ">=12" } + + chalk@2.4.2: + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, + } + engines: { node: ">=4" } + + check-error@2.1.1: + resolution: + { + integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==, + } + engines: { node: ">= 16" } + + chromium-bidi@0.6.5: + resolution: + { + integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==, + } + peerDependencies: + devtools-protocol: "*" + + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } + + color-convert@1.9.3: + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, + } + + color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } + + color-name@1.1.3: + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, + } + + color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + combined-stream@1.0.8: + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + } + engines: { node: ">= 0.8" } + + cosmiconfig@9.0.0: + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, + } + engines: { node: ">=14" } + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: + { + integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, + } + + cssstyle@4.1.0: + resolution: + { + integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==, + } + engines: { node: ">=18" } + + data-uri-to-buffer@6.0.2: + resolution: + { + integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, + } + engines: { node: ">= 14" } + + data-urls@5.0.0: + resolution: + { + integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==, + } + engines: { node: ">=18" } + + debug@4.3.7: + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: + { + integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, + } + + deep-eql@5.0.2: + resolution: + { + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, + } + engines: { node: ">=6" } + + degenerator@5.0.1: + resolution: + { + integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, + } + engines: { node: ">= 14" } + + delayed-stream@1.0.0: + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + } + engines: { node: ">=0.4.0" } + + devtools-protocol@0.0.1342118: + resolution: + { + integrity: sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==, + } + + diff@4.0.2: + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + } + engines: { node: ">=0.3.1" } + + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + end-of-stream@1.4.4: + resolution: + { + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, + } + + entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } + + env-paths@2.2.1: + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, + } + engines: { node: ">=6" } + + error-ex@1.3.2: + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } + + esbuild@0.21.5: + resolution: + { + integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, + } + engines: { node: ">=12" } + hasBin: true + + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } + + escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: ">=0.8.0" } + + escodegen@2.1.0: + resolution: + { + integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, + } + engines: { node: ">=6.0" } + hasBin: true + + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } + hasBin: true + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } + + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + + extract-zip@2.0.1: + resolution: + { + integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, + } + engines: { node: ">= 10.17.0" } + hasBin: true + + fast-fifo@1.3.2: + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + + fd-slicer@1.1.0: + resolution: + { + integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, + } + + fluent-ffmpeg@2.1.3: + resolution: + { + integrity: sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==, + } + engines: { node: ">=18" } + + form-data@4.0.0: + resolution: + { + integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, + } + engines: { node: ">= 6" } + + fs-extra@11.2.0: + resolution: + { + integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==, + } + engines: { node: ">=14.14" } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + + get-func-name@2.0.2: + resolution: + { + integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, + } + + get-stream@5.2.0: + resolution: + { + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, + } + engines: { node: ">=8" } + + get-uri@6.0.3: + resolution: + { + integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==, + } + engines: { node: ">= 14" } + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + + has-flag@3.0.0: + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, + } + engines: { node: ">=4" } + + html-encoding-sniffer@4.0.0: + resolution: + { + integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==, + } + engines: { node: ">=18" } + + http-proxy-agent@7.0.2: + resolution: + { + integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, + } + engines: { node: ">= 14" } + + https-proxy-agent@7.0.5: + resolution: + { + integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==, + } + engines: { node: ">= 14" } + + iconv-lite@0.6.3: + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: ">=0.10.0" } + + ieee754@1.2.1: + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } + + import-fresh@3.3.0: + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, + } + engines: { node: ">=6" } + + ip-address@9.0.5: + resolution: + { + integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==, + } + engines: { node: ">= 12" } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } + + is-potential-custom-element-name@1.0.1: + resolution: + { + integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, + } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + + jsbn@1.1.0: + resolution: + { + integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==, + } + + jsdom@25.0.1: + resolution: + { + integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==, + } + engines: { node: ">=18" } + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } + + jsonfile@6.1.0: + resolution: + { + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, + } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + loupe@3.1.1: + resolution: + { + integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==, + } + + lru-cache@7.18.3: + resolution: + { + integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, + } + engines: { node: ">=12" } + + magic-string@0.30.11: + resolution: + { + integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==, + } + + make-error@1.3.6: + resolution: + { + integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, + } + + mime-db@1.52.0: + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: ">= 0.6" } + + mime-types@2.1.35: + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + } + engines: { node: ">= 0.6" } + + mitt@3.0.1: + resolution: + { + integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, + } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + nanoid@3.3.7: + resolution: + { + integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + netmask@2.0.2: + resolution: + { + integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, + } + engines: { node: ">= 0.4.0" } + + nwsapi@2.2.13: + resolution: + { + integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==, + } + + once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + + pac-proxy-agent@7.0.2: + resolution: + { + integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==, + } + engines: { node: ">= 14" } + + pac-resolver@7.0.1: + resolution: + { + integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, + } + engines: { node: ">= 14" } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } + + parse-json@5.2.0: + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: ">=8" } + + parse5@7.1.2: + resolution: + { + integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, + } + + pathe@1.1.2: + resolution: + { + integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, + } + + pathval@2.0.0: + resolution: + { + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, + } + engines: { node: ">= 14.16" } + + pend@1.2.0: + resolution: + { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } + + picocolors@1.1.0: + resolution: + { + integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==, + } + + postcss@8.4.47: + resolution: + { + integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==, + } + engines: { node: ^10 || ^12 || >=14 } + + prettier@3.3.3: + resolution: + { + integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, + } + engines: { node: ">=14" } + hasBin: true + + progress@2.0.3: + resolution: + { + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: ">=0.4.0" } + + proxy-agent@6.4.0: + resolution: + { + integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==, + } + engines: { node: ">= 14" } + + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, + } + + pump@3.0.2: + resolution: + { + integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==, + } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + + puppeteer-core@23.4.1: + resolution: + { + integrity: sha512-uCxGtn8VE9PlKhdFJX/zZySi9K3Ufr3qUZe28jxJoZUqiMJOi+SFh2zhiFDSjWqZIDkc0FtnaCC+rewW3MYXmg==, + } + engines: { node: ">=18" } + + puppeteer-screen-recorder@3.0.3: + resolution: + { + integrity: sha512-GelfCKMhKhSxMDR3MVEuGBmhtKqD8vOA7aMuhF7X99z9JoHo08rD4K7ilKn340nY1wG6AJkcxymeHVKtPs6jSw==, + } + engines: { node: ">=16" } + peerDependencies: + puppeteer: ">=19.0.0" + + puppeteer@23.4.1: + resolution: + { + integrity: sha512-+wWfWTkQ8L9IB/3OVGSUp37c0eQ5za/85KdX+LAq2wTZkMdocgYGMCs+/91e2f/RXIYzve4x/uGxN8zG2sj8+w==, + } + engines: { node: ">=18" } + hasBin: true + + queue-tick@1.0.1: + resolution: + { + integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==, + } + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } + + rollup@4.23.0: + resolution: + { + integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + + rrweb-cssom@0.7.1: + resolution: + { + integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==, + } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + saxes@6.0.0: + resolution: + { + integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, + } + engines: { node: ">=v12.22.7" } + + semver@7.6.3: + resolution: + { + integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, + } + engines: { node: ">=10" } + hasBin: true + + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + + smart-buffer@4.2.0: + resolution: + { + integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, + } + engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } + + socks-proxy-agent@8.0.4: + resolution: + { + integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==, + } + engines: { node: ">= 14" } + + socks@2.8.3: + resolution: + { + integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==, + } + engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + sprintf-js@1.1.3: + resolution: + { + integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, + } + + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + + std-env@3.7.0: + resolution: + { + integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==, + } + + streamx@2.20.1: + resolution: + { + integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==, + } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + + supports-color@5.5.0: + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: ">=4" } + + symbol-tree@3.2.4: + resolution: + { + integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, + } + + tar-fs@3.0.6: + resolution: + { + integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==, + } + + tar-stream@3.1.7: + resolution: + { + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, + } + + text-decoder@1.2.0: + resolution: + { + integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==, + } + + through@2.3.8: + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, + } + + tinybench@2.9.0: + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } + + tinyexec@0.3.0: + resolution: + { + integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==, + } + + tinypool@1.0.1: + resolution: + { + integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==, + } + engines: { node: ^18.0.0 || >=20.0.0 } + + tinyrainbow@1.2.0: + resolution: + { + integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, + } + engines: { node: ">=14.0.0" } + + tinyspy@3.0.2: + resolution: + { + integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, + } + engines: { node: ">=14.0.0" } + + tldts-core@6.1.48: + resolution: + { + integrity: sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==, + } + + tldts@6.1.48: + resolution: + { + integrity: sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==, + } + hasBin: true + + tough-cookie@5.0.0: + resolution: + { + integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==, + } + engines: { node: ">=16" } + + tr46@5.0.0: + resolution: + { + integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==, + } + engines: { node: ">=18" } + + ts-node@10.9.2: + resolution: + { + integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, + } + hasBin: true + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + + tslib@2.7.0: + resolution: + { + integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==, + } + + typed-query-selector@2.12.0: + resolution: + { + integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==, + } + + typescript@5.6.2: + resolution: + { + integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==, + } + engines: { node: ">=14.17" } + hasBin: true + + unbzip2-stream@1.4.3: + resolution: + { + integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, + } + + undici-types@6.19.8: + resolution: + { + integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, + } + + universalify@2.0.1: + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, + } + engines: { node: ">= 10.0.0" } + + urlpattern-polyfill@10.0.0: + resolution: + { + integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==, + } + + v8-compile-cache-lib@3.0.1: + resolution: + { + integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, + } + + vite-node@2.1.1: + resolution: + { + integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==, + } + engines: { node: ^18.0.0 || >=20.0.0 } + hasBin: true + + vite@5.4.8: + resolution: + { + integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==, + } + engines: { node: ^18.0.0 || >=20.0.0 } + hasBin: true + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.1: + resolution: + { + integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==, + } + engines: { node: ^18.0.0 || >=20.0.0 } + hasBin: true + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.1 + "@vitest/ui": 2.1.1 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: + { + integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==, + } + engines: { node: ">=18" } + + webidl-conversions@7.0.0: + resolution: + { + integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==, + } + engines: { node: ">=12" } + + whatwg-encoding@3.1.1: + resolution: + { + integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==, + } + engines: { node: ">=18" } + + whatwg-mimetype@4.0.0: + resolution: + { + integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, + } + engines: { node: ">=18" } + + whatwg-url@14.0.0: + resolution: + { + integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==, + } + engines: { node: ">=18" } + + which@1.3.1: + resolution: + { + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, + } + hasBin: true + + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } + hasBin: true + + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } + + wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } + + ws@8.18.0: + resolution: + { + integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, + } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: + { + integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==, + } + engines: { node: ">=18" } + + xmlchars@2.2.0: + resolution: + { + integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, + } + + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } + + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } + + yauzl@2.10.0: + resolution: + { + integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, + } + + yn@3.1.1: + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, + } + engines: { node: ">=6" } + + zod@3.23.8: + resolution: + { + integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==, + } + +snapshots: + "@babel/code-frame@7.24.7": + dependencies: + "@babel/highlight": 7.24.7 + picocolors: 1.1.0 + + "@babel/helper-validator-identifier@7.24.7": {} + + "@babel/highlight@7.24.7": + dependencies: + "@babel/helper-validator-identifier": 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + "@cspotcode/source-map-support@0.8.1": + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + + "@esbuild/aix-ppc64@0.21.5": + optional: true + + "@esbuild/android-arm64@0.21.5": + optional: true + + "@esbuild/android-arm@0.21.5": + optional: true + + "@esbuild/android-x64@0.21.5": + optional: true + + "@esbuild/darwin-arm64@0.21.5": + optional: true + + "@esbuild/darwin-x64@0.21.5": + optional: true + + "@esbuild/freebsd-arm64@0.21.5": + optional: true + + "@esbuild/freebsd-x64@0.21.5": + optional: true + + "@esbuild/linux-arm64@0.21.5": + optional: true + + "@esbuild/linux-arm@0.21.5": + optional: true + + "@esbuild/linux-ia32@0.21.5": + optional: true + + "@esbuild/linux-loong64@0.21.5": + optional: true + + "@esbuild/linux-mips64el@0.21.5": + optional: true + + "@esbuild/linux-ppc64@0.21.5": + optional: true + + "@esbuild/linux-riscv64@0.21.5": + optional: true + + "@esbuild/linux-s390x@0.21.5": + optional: true + + "@esbuild/linux-x64@0.21.5": + optional: true + + "@esbuild/netbsd-x64@0.21.5": + optional: true + + "@esbuild/openbsd-x64@0.21.5": + optional: true + + "@esbuild/sunos-x64@0.21.5": + optional: true + + "@esbuild/win32-arm64@0.21.5": + optional: true + + "@esbuild/win32-ia32@0.21.5": + optional: true + + "@esbuild/win32-x64@0.21.5": + optional: true + + "@ffmpeg-installer/darwin-arm64@4.1.5": + optional: true + + "@ffmpeg-installer/darwin-x64@4.1.0": + optional: true + + "@ffmpeg-installer/ffmpeg@1.1.0": + optionalDependencies: + "@ffmpeg-installer/darwin-arm64": 4.1.5 + "@ffmpeg-installer/darwin-x64": 4.1.0 + "@ffmpeg-installer/linux-arm": 4.1.3 + "@ffmpeg-installer/linux-arm64": 4.1.4 + "@ffmpeg-installer/linux-ia32": 4.1.0 + "@ffmpeg-installer/linux-x64": 4.1.0 + "@ffmpeg-installer/win32-ia32": 4.1.0 + "@ffmpeg-installer/win32-x64": 4.1.0 + optional: true + + "@ffmpeg-installer/linux-arm64@4.1.4": + optional: true + + "@ffmpeg-installer/linux-arm@4.1.3": + optional: true + + "@ffmpeg-installer/linux-ia32@4.1.0": + optional: true + + "@ffmpeg-installer/linux-x64@4.1.0": + optional: true + + "@ffmpeg-installer/win32-ia32@4.1.0": + optional: true + + "@ffmpeg-installer/win32-x64@4.1.0": + optional: true + + "@jridgewell/resolve-uri@3.1.2": {} + + "@jridgewell/sourcemap-codec@1.5.0": {} + + "@jridgewell/trace-mapping@0.3.9": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.0 + + "@puppeteer/browsers@2.4.0": + dependencies: + debug: 4.3.7 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.3 + tar-fs: 3.0.6 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + "@rollup/rollup-android-arm-eabi@4.23.0": + optional: true + + "@rollup/rollup-android-arm64@4.23.0": + optional: true + + "@rollup/rollup-darwin-arm64@4.23.0": + optional: true + + "@rollup/rollup-darwin-x64@4.23.0": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.23.0": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.23.0": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.23.0": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.23.0": + optional: true + + "@rollup/rollup-linux-powerpc64le-gnu@4.23.0": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.23.0": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.23.0": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.23.0": + optional: true + + "@rollup/rollup-linux-x64-musl@4.23.0": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.23.0": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.23.0": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.23.0": + optional: true + + "@tootallnate/quickjs-emscripten@0.23.0": {} + + "@tsconfig/node10@1.0.11": {} + + "@tsconfig/node12@1.0.11": {} + + "@tsconfig/node14@1.0.3": {} + + "@tsconfig/node16@1.0.4": {} + + "@types/estree@1.0.6": {} + + "@types/jsdom@21.1.7": + dependencies: + "@types/node": 22.7.1 + "@types/tough-cookie": 4.0.5 + parse5: 7.1.2 + + "@types/node@22.7.1": + dependencies: + undici-types: 6.19.8 + + "@types/tough-cookie@4.0.5": {} + + "@types/yauzl@2.10.3": + dependencies: + "@types/node": 22.7.1 + optional: true + + "@vitest/expect@2.1.1": + dependencies: + "@vitest/spy": 2.1.1 + "@vitest/utils": 2.1.1 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + "@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1))": + dependencies: + "@vitest/spy": 2.1.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.8(@types/node@22.7.1) + + "@vitest/pretty-format@2.1.1": + dependencies: + tinyrainbow: 1.2.0 + + "@vitest/runner@2.1.1": + dependencies: + "@vitest/utils": 2.1.1 + pathe: 1.1.2 + + "@vitest/snapshot@2.1.1": + dependencies: + "@vitest/pretty-format": 2.1.1 + magic-string: 0.30.11 + pathe: 1.1.2 + + "@vitest/spy@2.1.1": + dependencies: + tinyspy: 3.0.2 + + "@vitest/utils@2.1.1": + dependencies: + "@vitest/pretty-format": 2.1.1 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + agent-base@7.1.1: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + assertion-error@2.0.1: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.7.0 + + async@0.2.10: {} + + asynckit@0.4.0: {} + + b4a@1.6.7: {} + + bare-events@2.5.0: + optional: true + + bare-fs@2.3.5: + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.3.0 + optional: true + + bare-os@2.4.4: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.4.4 + optional: true + + bare-stream@2.3.0: + dependencies: + b4a: 1.6.7 + streamx: 2.20.1 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + check-error@2.1.1: {} + + chromium-bidi@0.6.5(devtools-protocol@0.0.1342118): + dependencies: + devtools-protocol: 0.0.1342118 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + cosmiconfig@9.0.0(typescript@5.6.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.2 + + create-require@1.1.1: {} + + cssstyle@4.1.0: + dependencies: + rrweb-cssom: 0.7.1 + + data-uri-to-buffer@6.0.2: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: {} + + deep-eql@5.0.2: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + devtools-protocol@0.0.1342118: {} + + diff@4.0.2: {} + + emoji-regex@8.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + esbuild@0.21.5: + optionalDependencies: + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.6 + + esutils@2.0.3: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.3.7 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + "@types/yauzl": 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-fifo@1.3.2: {} + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fluent-ffmpeg@2.1.3: + dependencies: + async: 0.2.10 + which: 1.3.1 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-uri@6.0.3: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-arrayish@0.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsdom@25.0.1: + dependencies: + cssstyle: 4.1.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.13 + parse5: 7.1.2 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.18.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + json-parse-even-better-errors@2.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + lines-and-columns@1.2.4: {} + + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + + lru-cache@7.18.3: {} + + magic-string@0.30.11: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.0 + + make-error@1.3.6: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mitt@3.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + netmask@2.0.2: {} + + nwsapi@2.2.13: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + pac-proxy-agent@7.0.2: + dependencies: + "@tootallnate/quickjs-emscripten": 0.23.0 + agent-base: 7.1.1 + debug: 4.3.7 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + "@babel/code-frame": 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + pathe@1.1.2: {} + + pathval@2.0.0: {} + + pend@1.2.0: {} + + picocolors@1.1.0: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + prettier@3.3.3: {} + + progress@2.0.3: {} + + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + puppeteer-core@23.4.1: + dependencies: + "@puppeteer/browsers": 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) + debug: 4.3.7 + devtools-protocol: 0.0.1342118 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + puppeteer-screen-recorder@3.0.3(puppeteer@23.4.1(typescript@5.6.2)): + dependencies: + fluent-ffmpeg: 2.1.3 + puppeteer: 23.4.1(typescript@5.6.2) + optionalDependencies: + "@ffmpeg-installer/ffmpeg": 1.1.0 + + puppeteer@23.4.1(typescript@5.6.2): + dependencies: + "@puppeteer/browsers": 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) + cosmiconfig: 9.0.0(typescript@5.6.2) + devtools-protocol: 0.0.1342118 + puppeteer-core: 23.4.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + + queue-tick@1.0.1: {} + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + rollup@4.23.0: + dependencies: + "@types/estree": 1.0.6 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.23.0 + "@rollup/rollup-android-arm64": 4.23.0 + "@rollup/rollup-darwin-arm64": 4.23.0 + "@rollup/rollup-darwin-x64": 4.23.0 + "@rollup/rollup-linux-arm-gnueabihf": 4.23.0 + "@rollup/rollup-linux-arm-musleabihf": 4.23.0 + "@rollup/rollup-linux-arm64-gnu": 4.23.0 + "@rollup/rollup-linux-arm64-musl": 4.23.0 + "@rollup/rollup-linux-powerpc64le-gnu": 4.23.0 + "@rollup/rollup-linux-riscv64-gnu": 4.23.0 + "@rollup/rollup-linux-s390x-gnu": 4.23.0 + "@rollup/rollup-linux-x64-gnu": 4.23.0 + "@rollup/rollup-linux-x64-musl": 4.23.0 + "@rollup/rollup-win32-arm64-msvc": 4.23.0 + "@rollup/rollup-win32-ia32-msvc": 4.23.0 + "@rollup/rollup-win32-x64-msvc": 4.23.0 + fsevents: 2.3.3 + + rrweb-cssom@0.7.1: {} + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + semver@7.6.3: {} + + siginfo@2.0.0: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + sprintf-js@1.1.3: {} + + stackback@0.0.2: {} + + std-env@3.7.0: {} + + streamx@2.20.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.0 + optionalDependencies: + bare-events: 2.5.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + symbol-tree@3.2.4: {} + + tar-fs@3.0.6: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 + + text-decoder@1.2.0: + dependencies: + b4a: 1.6.7 + + through@2.3.8: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.0: {} + + tinypool@1.0.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tldts-core@6.1.48: {} + + tldts@6.1.48: + dependencies: + tldts-core: 6.1.48 + + tough-cookie@5.0.0: + dependencies: + tldts: 6.1.48 + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + ts-node@10.9.2(@types/node@22.7.1)(typescript@5.6.2): + dependencies: + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.11 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.4 + "@types/node": 22.7.1 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@2.7.0: {} + + typed-query-selector@2.12.0: {} + + typescript@5.6.2: {} + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + undici-types@6.19.8: {} + + universalify@2.0.1: {} + + urlpattern-polyfill@10.0.0: {} + + v8-compile-cache-lib@3.0.1: {} + + vite-node@2.1.1(@types/node@22.7.1): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + vite: 5.4.8(@types/node@22.7.1) + transitivePeerDependencies: + - "@types/node" + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.8(@types/node@22.7.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.23.0 + optionalDependencies: + "@types/node": 22.7.1 + fsevents: 2.3.3 + + vitest@2.1.1(@types/node@22.7.1)(jsdom@25.0.1): + dependencies: + "@vitest/expect": 2.1.1 + "@vitest/mocker": 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1)) + "@vitest/pretty-format": 2.1.1 + "@vitest/runner": 2.1.1 + "@vitest/snapshot": 2.1.1 + "@vitest/spy": 2.1.1 + "@vitest/utils": 2.1.1 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.7.1) + vite-node: 2.1.1(@types/node@22.7.1) + why-is-node-running: 2.3.0 + optionalDependencies: + "@types/node": 22.7.1 + jsdom: 25.0.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: {} + + zod@3.23.8: {} diff --git a/browertest/readme.md b/browertest/readme.md new file mode 100644 index 0000000000..1f14226f93 --- /dev/null +++ b/browertest/readme.md @@ -0,0 +1,36 @@ +# TODO: Write this + +Browser automation for hazel + +![image](output.gif) + +```typescript +(async () => { + const controller = new HazelController(); + await controller.launch("http://localhost:8000", true); + + // Select "Exercises" mode + await controller.selectMode("Exercises"); + + // Get all cells + const cells = await controller.getCells(); + + // edit the first cell with id "YourImpl" + const codeCell = cells.find((cell) => cell.ids.includes("YourImpl"))!; + await codeCell.scroll(); + + console.log("Original content:", await codeCell.getContent()); + await codeCell.clearContent(); + await codeCell.typeString( + 'let my_str = "this is automatically inserted content"\nin my_str ++ my_str', + 100, + ); + console.log("New content:", await codeCell.getContent()); + + // save screenshot + await controller.page?.screenshot({ path: "screenshot.png" }); + + // Close browser + await controller.close(); +})(); +``` diff --git a/browertest/src/index.ts b/browertest/src/index.ts new file mode 100644 index 0000000000..aa233e51fe --- /dev/null +++ b/browertest/src/index.ts @@ -0,0 +1,279 @@ +import puppeteer, { Page, ElementHandle, Browser } from "puppeteer"; +import { PuppeteerScreenRecorder } from "puppeteer-screen-recorder"; +import { + emulateKeyCombination, + findSpanByQuery, + findSpanByRowCol, +} from "./utils"; + +process.chdir('../out'); + +const RecorderConfig = { + followNewTab: true, + fps: 60, + videoFrame: { + width: 1024, + height: 1024, + }, + videoCrf: 18, + videoCodec: "libx264", + videoPreset: "ultrafast", + videoBitrate: 1000, + autopad: { + color: "black", + }, + aspectRatio: "1:1", +}; + +function wait(time: number) { + return new Promise(function (resolve) { + setTimeout(resolve, time); + }); +} + +class Cell { + private page: Page; + private elementHandle: ElementHandle; + readonly classes: string[]; + readonly ids: string[]; + + constructor( + page: Page, + elementHandle: ElementHandle, + classes: string[], + ids: string[] = [], + ) { + this.page = page; + this.elementHandle = elementHandle; + this.classes = classes; + this.ids = ids; + } + + async getContent(): Promise { + return await this.page.evaluate( + (el) => el.textContent, + this.elementHandle, + ); + } + + async scroll() { + await wait(100); + await this.page.evaluate( + (el) => + el.children[0].scrollIntoView({ + block: "center", + behavior: "smooth", + }), + this.elementHandle, + ); + await wait(1000); + } + + async backspaceContent(n = 1, delay = 0) { + const contentHandle = await this.elementHandle.$( + ".code-container .code-text", + ); + if (contentHandle) { + await contentHandle.click(); + for (let i = 0; i < n; i++) { + await contentHandle.press("Backspace"); + await setTimeout(() => {}, delay); + } + } + } + + async clearContent() { + const contentHandle = await this.elementHandle.$( + ".code-container .code-text", + ); + if (contentHandle) { + await emulateKeyCombination( + this.page, + contentHandle, + "a", + "Control", + ); + await contentHandle.press("Backspace"); + } + } + + async typeString(string: string, delay = 0, waitForCompletion = false) { + // select the code container + const codeContainer = await this.elementHandle.$( + ".code-container .code-text", + ); + if (!codeContainer) throw new Error("Code container not found"); + await codeContainer.click(); + + const lines = string.split("\n"); + for (let i = 0; i < lines.length; i++) { + for (let j = 0; j < lines[i].length; j++) { + await codeContainer.type(lines[i][j]); + await wait(delay); + } + if (i !== lines.length - 1) { + await this.page.keyboard.press("Enter"); + } + } + } + + async clickRowCol(row: number, col: number) { + const codeContainer = await this.elementHandle.$( + ".code-container .code-text", + ); + if (!codeContainer) throw new Error("Code container not found"); + + const html = await codeContainer.evaluate((el) => el.innerHTML); + console.log("html:", html); + const span = findSpanByRowCol(html, row, col); + + if (span) { + await span.click(); + } else { + throw new Error(`Span not found at row ${row} and col ${col}`); + } + } + + async clickQuery(query: string) { + const codeContainer = await this.elementHandle.$( + ".code-container .code-text", + ); + if (!codeContainer) throw new Error("Code container not found"); + + const html = await codeContainer.evaluate((el) => el.innerHTML); + console.log("html:", html); + const span = findSpanByQuery(html, query); + //findSpanByQuery(await codeContainer.evaluate(el => el.children[0].innerHTML, query), query); + + if (span) { + await span.click(); + } else { + throw new Error(`Span not found for query "${query}"`); + } + } +} + +class HazelController { + private browser: Browser | null = null; + private recorder: PuppeteerScreenRecorder | null = null; + page: Page | null = null; + + async launch(url: string, record = false) { + this.browser = await puppeteer.launch({ headless: true }); + // set resolution + this.page = + (await this.browser.pages().then((pages) => pages[0])) || + (await this.browser.newPage()); + await this.page.setViewport({ width: 1024, height: 1024 }); + await this.page.goto(url); + + // wait for class "loading" to disappear + await this.page?.waitForFunction(() => { + const loading = document.querySelector(".loading"); + return !loading; + }); + + if (record) { + this.recorder = new PuppeteerScreenRecorder( + this.page, + RecorderConfig, + ); + await this.recorder.start(`demo-${Date.now()}.mp4`); + } + } + + async close() { + if (this.browser) { + await this.browser.close(); + await this.recorder?.stop(); + } + } + + async selectMode(mode: string) { + await this.page?.select("#editor-mode select", mode); + + // wait until id="main" has the class that matches the mode + await this.page?.waitForFunction( + (mode) => { + const main = document.getElementById("main"); + return main && main.classList.contains(mode); + }, + {}, + mode, + ); + } + + async getCells(): Promise { + const cells = await this.page?.$$(".cell"); + if (!cells) return []; + + return Promise.all( + cells.map(async (elementHandle, index) => { + let classes = await elementHandle.evaluate( + (el) => el.children[0].className, + ); + let ids = []; + // if we have class cell-item, also add all of the children classes + if (classes.includes("cell-item")) { + const childrenClasses = await elementHandle.evaluate((el) => + Array.from(el.children[0].children) + .map((child: Element) => child.className) + .join(" "), + ); + classes += " " + childrenClasses; + } + // retrieve all ids from deep descendants + ids = await elementHandle.evaluate((el) => + Array.from(el.querySelectorAll("[id]")).map( + (el: Element) => el.id, + ), + ); + return new Cell( + this.page!, + elementHandle, + classes.split(" "), + ids, + ); + }), + ); + } + + async waitForCompletion() { + throw new Error("Not implemented"); + } +} + +const g_combinator = (x: number) => ` +let comb = + fun x, y -> + if (y < ${x}) then (x, y + 1) |> x + else "done", y +in +comb(comb, 0)`; + +// Usage example +(async () => { + const controller = new HazelController(); + await controller.launch("http://localhost:8000", true); + + // Select "Exercises" mode + await controller.selectMode("Exercises"); + + // Get all cells + const cells = await controller.getCells(); + + // edit the first cell with id "YourImpl" + const codeCell = cells.find((cell) => cell.ids.includes("YourImpl"))!; + await codeCell.scroll(); + + console.log("Original content:", await codeCell.getContent()); + await codeCell.clearContent(); + await codeCell.typeString(g_combinator(5), 50); + await wait(1000); + + // save screenshot + await controller.page?.screenshot({ path: `screenshot-${new Date().getTime()}.png` }); + + // Close browser + await controller.close(); +})(); diff --git a/browertest/src/utils.ts b/browertest/src/utils.ts new file mode 100644 index 0000000000..c3c9e16f7c --- /dev/null +++ b/browertest/src/utils.ts @@ -0,0 +1,204 @@ +import { Page, ElementHandle } from "puppeteer"; + +/** + * Emulates a key combination (e.g., Ctrl+A, Ctrl+C) by dispatching custom keyboard + * events on the given element. Events are dispatched to ensure that any `Event#preventDefault` + * which would have normally occurred in the application as a result of the key combination + * is respected. + * + * @param {Page} page - Puppeteer page object. + * @param {ElementHandle} elm - The element to send the key combination to. + * @param {string} key - The key to press (e.g., 'a' for Ctrl+A). + * @param {string} modifierKey - The modifier key (e.g., 'Control' or 'Meta'). + * @return {Promise} Promise resolving once the key emulation completes. + */ +export async function emulateKeyCombination( + page: Page, + elm: ElementHandle, + key: string, + modifierKey: "Control" | "Meta", +): Promise { + await page.evaluate( + (elm, key, modifierKey) => { + const isMac = /Mac|iPod|iPhone|iPad/.test( + window.navigator.platform, + ); + const modifier = isMac ? "Meta" : "Control"; + const activeElement = elm as HTMLElement; + + activeElement.dispatchEvent( + new KeyboardEvent("keydown", { + bubbles: true, + cancelable: true, + key: modifier, + code: modifier === "Meta" ? "MetaLeft" : "ControlLeft", + location: window.KeyboardEvent.DOM_KEY_LOCATION_LEFT, + ctrlKey: modifier === "Control", + metaKey: modifier === "Meta", + charCode: 0, + keyCode: modifier === "Meta" ? 93 : 17, + which: modifier === "Meta" ? 93 : 17, + }), + ); + + const preventableEvent = new KeyboardEvent("keydown", { + bubbles: true, + cancelable: true, + key, + code: `Key${key.toUpperCase()}`, + location: window.KeyboardEvent.DOM_KEY_LOCATION_STANDARD, + ctrlKey: modifier === "Control", + metaKey: modifier === "Meta", + charCode: 0, + keyCode: key.toUpperCase().charCodeAt(0), + which: key.toUpperCase().charCodeAt(0), + }); + + const wasPrevented = + !activeElement.dispatchEvent(preventableEvent) || + preventableEvent.defaultPrevented; + + if (!wasPrevented && key === "a") { + // If 'a' was pressed and not prevented, we trigger select all + document.execCommand("selectall", false); + } + + activeElement.dispatchEvent( + new KeyboardEvent("keyup", { + bubbles: true, + cancelable: true, + key: modifier, + code: modifier === "Meta" ? "MetaLeft" : "ControlLeft", + location: window.KeyboardEvent.DOM_KEY_LOCATION_LEFT, + charCode: 0, + keyCode: modifier === "Meta" ? 93 : 17, + which: modifier === "Meta" ? 93 : 17, + }), + ); + }, + elm, + key, + modifierKey, + ); +} + +import { JSDOM } from "jsdom"; + +interface SpanInfo { + element: HTMLElement; + startOffset: number; + endOffset: number; +} + +export function parseCodeString(codeString: string): { + text: string; + spans: SpanInfo[]; +} { + const dom = new JSDOM(codeString, { url: "http://localhost" }); + const body = dom.window.document.body; + + const spans: SpanInfo[] = []; + let text = ""; + let offset = 0; + + function processNode(node: Node) { + if (node.nodeType === dom.window.Node.TEXT_NODE) { + const nodeText = node.textContent || ""; + if (!/^\s*$/.test(nodeText)) { + // Only add text nodes that are not pure whitespace + text += nodeText; + offset += nodeText.length; + } + } else if (node.nodeType === dom.window.Node.ELEMENT_NODE) { + const element = node as HTMLElement; + if (element.classList.contains("linebreak")) { + text += "\n"; + offset += 1; + } else if (element.classList.contains("whitespace")) { + // Add the whitespace character(s) + const whitespaceText = element.textContent || " "; + text += whitespaceText; + offset += whitespaceText.length; + // Optionally, do not add whitespace elements to the spans + // If you prefer to track them, you can include the following lines: + // const startOffset = offset - whitespaceText.length; + // const endOffset = offset; + // spans.push({ element: element, startOffset, endOffset }); + } else { + const startOffset = offset; + for (let i = 0; i < element.childNodes.length; i++) { + processNode(element.childNodes[i]); + } + const endOffset = offset; + spans.push({ element: element, startOffset, endOffset }); + } + } + } + + for (let i = 0; i < body.childNodes.length; i++) { + processNode(body.childNodes[i]); + } + + return { text, spans }; +} + +export function findSpanByRowCol( + codeString: string, + row: number, + col: number, +): HTMLElement | null { + const { text, spans } = parseCodeString(codeString); + + // Convert row and col to character offset + const lines = text.split("\n"); + if (row < 1 || row > lines.length) { + return null; // Row out of range + } + const line = lines[row - 1]; + if (col < 1 || col > line.length + 1) { + return null; // Column out of range + } + + let charOffset = 0; + for (let i = 0; i < row - 1; i++) { + charOffset += lines[i].length + 1; // +1 for the newline character + } + charOffset += col - 1; + + // Find the span that covers this offset + for (const spanInfo of spans) { + if ( + charOffset >= spanInfo.startOffset && + charOffset < spanInfo.endOffset + ) { + return spanInfo.element; + } + } + + return null; +} + +export function findSpanByQuery( + codeString: string, + query: string, +): HTMLElement | null { + const { text, spans } = parseCodeString(codeString); + + const index = text.indexOf(query); + if (index === -1) { + return null; // Query not found + } + + // Find the first span that covers any character in the query + for (const spanInfo of spans) { + if ( + (index >= spanInfo.startOffset && index < spanInfo.endOffset) || + (spanInfo.startOffset > index && + spanInfo.startOffset < index + query.length) + ) { + return spanInfo.element; + } + } + + return null; +} diff --git a/browertest/tests/detailed.test.ts b/browertest/tests/detailed.test.ts new file mode 100644 index 0000000000..6c271d172a --- /dev/null +++ b/browertest/tests/detailed.test.ts @@ -0,0 +1,153 @@ +import { describe, it, expect } from "vitest"; +import { parseCodeString, findSpanByRowCol, findSpanByQuery } from "../src/utils"; + +describe("parseCodeString", () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it("should parse the text content correctly", () => { + const result = parseCodeString(codeString); + expect(result.text).toBe( + `let comb = \n fun x, y ->\n if (y < 5) then (x, y + 1) |> x \n else "done" \nin\ncomb(comb, 0)`, + ); + }); + + it("should extract spans with correct offsets", () => { + const result = parseCodeString(codeString); + expect(result.spans.length).toBeGreaterThan(10); // Expect multiple spans due to the complex code + + // First span "let" + expect(result.spans[0].startOffset).toBe(0); + expect(result.spans[0].endOffset).toBe(3); + + // Second span "comb" + expect(result.spans[1].startOffset).toBe(4); + expect(result.spans[1].endOffset).toBe(8); + + // Ensure that the "fun" function and subsequent content are correctly parsed + const funSpan = result.spans.find( + (span) => span.element.textContent === "fun", + ); + expect(funSpan).not.toBeUndefined(); + }); +}); + +describe("findSpanByRowCol", () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it("should find the correct span at row 2, col 5", () => { + const result = findSpanByRowCol(codeString, 2, 5); + expect(result?.outerHTML).toBe( + 'fun', + ); + }); + + it("should return null for an out-of-bounds row", () => { + const result = findSpanByRowCol(codeString, 10, 1); + expect(result).toBeNull(); + }); + + it("should return null for an out-of-bounds column", () => { + const result = findSpanByRowCol(codeString, 1, 50); + expect(result).toBeNull(); + }); +}); + +describe("findSpanByQuery", () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it('should find the correct span for the query "fun x, y ->"', () => { + const result = findSpanByQuery(codeString, "fun x, y ->"); + expect(result?.outerHTML).toBe( + 'fun', + ); + }); + + it("should return null for a query that does not exist", () => { + const result = findSpanByQuery(codeString, "nonexistent"); + expect(result).toBeNull(); + }); +}); diff --git a/browertest/tests/utils.test.ts b/browertest/tests/utils.test.ts new file mode 100644 index 0000000000..e2d0e1500a --- /dev/null +++ b/browertest/tests/utils.test.ts @@ -0,0 +1,145 @@ +import { describe, it, expect } from 'vitest'; +import { parseCodeString, findSpanByRowCol, findSpanByQuery } from '../src/utils'; + +describe('parseCodeString', () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it('should parse the text content correctly', () => { + const result = parseCodeString(codeString); + expect(result.text).toBe(`let comb = \n fun x, y ->\n if (y < 5) then (x, y + 1) |> x \n else "done" \nin\ncomb(comb, 0)`); + }); + + it('should extract spans with correct offsets', () => { + const result = parseCodeString(codeString); + expect(result.spans.length).toBeGreaterThan(10); // Expect multiple spans due to the complex code + + // First span "let" + expect(result.spans[0].startOffset).toBe(0); + expect(result.spans[0].endOffset).toBe(3); + + // Second span "comb" + expect(result.spans[1].startOffset).toBe(4); + expect(result.spans[1].endOffset).toBe(8); + + // Ensure that the "fun" function and subsequent content are correctly parsed + const funSpan = result.spans.find(span => span.element.textContent === 'fun'); + expect(funSpan).not.toBeUndefined(); + }); +}); + +describe('findSpanByRowCol', () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it('should find the correct span at row 2, col 5', () => { + const result = findSpanByRowCol(codeString, 2, 5); + expect(result?.outerHTML).toBe('fun'); + }); + + it('should return null for an out-of-bounds row', () => { + const result = findSpanByRowCol(codeString, 10, 1); + expect(result).toBeNull(); + }); + + it('should return null for an out-of-bounds column', () => { + const result = findSpanByRowCol(codeString, 1, 50); + expect(result).toBeNull(); + }); +}); + +describe('findSpanByQuery', () => { + const codeString = ` + let + comb + = + + + fun + x, + y + -> + + if + (y + < 5 + ) + then + (x, + y + + 1 + ) |> + x + + else + "done" + + in + comb( + comb, + 0)`; + + it('should find the correct span for the query "fun x, y ->"', () => { + const result = findSpanByQuery(codeString, 'fun x, y ->'); + expect(result?.outerHTML).toBe('fun'); + }); + + it('should return null for a query that does not exist', () => { + const result = findSpanByQuery(codeString, 'nonexistent'); + expect(result).toBeNull(); + }); +}); diff --git a/browertest/tsconfig.json b/browertest/tsconfig.json new file mode 100644 index 0000000000..7ff5b869fd --- /dev/null +++ b/browertest/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "commonjs", + "noImplicitAny": true, + "removeComments": false, + "preserveConstEnums": true, + "sourceMap": true, + "outDir": "./dist", + "rootDir": "./", + "strict": true, + "target": "es2022", + "strictPropertyInitialization": false, + "experimentalDecorators": true + }, + "include": ["src/**/*"] +} From 5677daae89c60dc206f03897da9b5a369e9bcecb Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 9 Oct 2024 09:19:24 -0400 Subject: [PATCH 10/23] dummy livelit with browertest example --- {browertest => browsertest}/.gitignore | 0 {browertest => browsertest}/.prettierignore | 0 {browertest => browsertest}/.prettierrc.cjs | 0 {browertest => browsertest}/mp4_to_gif.sh | 0 {browertest => browsertest}/out/.keep | 0 {browertest => browsertest}/output.gif | Bin {browertest => browsertest}/package.json | 3 ++- {browertest => browsertest}/pnpm-lock.yaml | 0 {browertest => browsertest}/readme.md | 25 ++++++++++++++++++ {browertest => browsertest}/src/index.ts | 18 ++++--------- {browertest => browsertest}/src/utils.ts | 0 .../tests/detailed.test.ts | 0 .../tests/utils.test.ts | 0 {browertest => browsertest}/tsconfig.json | 0 14 files changed, 32 insertions(+), 14 deletions(-) rename {browertest => browsertest}/.gitignore (100%) rename {browertest => browsertest}/.prettierignore (100%) rename {browertest => browsertest}/.prettierrc.cjs (100%) rename {browertest => browsertest}/mp4_to_gif.sh (100%) rename {browertest => browsertest}/out/.keep (100%) rename {browertest => browsertest}/output.gif (100%) rename {browertest => browsertest}/package.json (73%) rename {browertest => browsertest}/pnpm-lock.yaml (100%) rename {browertest => browsertest}/readme.md (69%) rename {browertest => browsertest}/src/index.ts (93%) rename {browertest => browsertest}/src/utils.ts (100%) rename {browertest => browsertest}/tests/detailed.test.ts (100%) rename {browertest => browsertest}/tests/utils.test.ts (100%) rename {browertest => browsertest}/tsconfig.json (100%) diff --git a/browertest/.gitignore b/browsertest/.gitignore similarity index 100% rename from browertest/.gitignore rename to browsertest/.gitignore diff --git a/browertest/.prettierignore b/browsertest/.prettierignore similarity index 100% rename from browertest/.prettierignore rename to browsertest/.prettierignore diff --git a/browertest/.prettierrc.cjs b/browsertest/.prettierrc.cjs similarity index 100% rename from browertest/.prettierrc.cjs rename to browsertest/.prettierrc.cjs diff --git a/browertest/mp4_to_gif.sh b/browsertest/mp4_to_gif.sh similarity index 100% rename from browertest/mp4_to_gif.sh rename to browsertest/mp4_to_gif.sh diff --git a/browertest/out/.keep b/browsertest/out/.keep similarity index 100% rename from browertest/out/.keep rename to browsertest/out/.keep diff --git a/browertest/output.gif b/browsertest/output.gif similarity index 100% rename from browertest/output.gif rename to browsertest/output.gif diff --git a/browertest/package.json b/browsertest/package.json similarity index 73% rename from browertest/package.json rename to browsertest/package.json index a349932838..d2f0f5e9be 100644 --- a/browertest/package.json +++ b/browsertest/package.json @@ -6,7 +6,8 @@ "scripts": { "build:hazel": "cd .. && make deps && make release", "dev:hazel": "cd .. && make serve", - "execute": "npm run dev:hazel > /dev/null 2>&1 & tsc --outDir dist && cd dist && node src/index.js; kill -9 $(lsof -t -i:8000)", + "execute:host": "npm run dev:hazel > /dev/null 2>&1 & tsc --outDir dist && cd dist && node src/index.js; kill -9 $(lsof -t -i:8000)", + "execute": "tsc --outDir dist && cd dist && node src/index.js", "test": "vitest", "style": "prettier '**/*.ts' --write ." }, diff --git a/browertest/pnpm-lock.yaml b/browsertest/pnpm-lock.yaml similarity index 100% rename from browertest/pnpm-lock.yaml rename to browsertest/pnpm-lock.yaml diff --git a/browertest/readme.md b/browsertest/readme.md similarity index 69% rename from browertest/readme.md rename to browsertest/readme.md index 1f14226f93..74a3e0a45f 100644 --- a/browertest/readme.md +++ b/browsertest/readme.md @@ -34,3 +34,28 @@ Browser automation for hazel await controller.close(); })(); ``` + +## Installation + +```bash +npm i +``` + +## Usage + +To host and run the tests: +```bash +npm run execute:host +``` + +To run the tests, assuming hazel is already running at `http://localhost:8000`: +```bash +npm run execute +``` + +## Output +Output is stored in ./outout/demo-[timestamp].mp4. There is a helper script for converting a video to a gif: + +```bash +bash mp4_to_gif.sh output/demo-[timestamp].mp4 +``` \ No newline at end of file diff --git a/browertest/src/index.ts b/browsertest/src/index.ts similarity index 93% rename from browertest/src/index.ts rename to browsertest/src/index.ts index aa233e51fe..628407a523 100644 --- a/browertest/src/index.ts +++ b/browsertest/src/index.ts @@ -243,13 +243,7 @@ class HazelController { } } -const g_combinator = (x: number) => ` -let comb = - fun x, y -> - if (y < ${x}) then (x, y + 1) |> x - else "done", y -in -comb(comb, 0)`; +const livelit = `llslider`; // Usage example (async () => { @@ -257,18 +251,16 @@ comb(comb, 0)`; await controller.launch("http://localhost:8000", true); // Select "Exercises" mode - await controller.selectMode("Exercises"); + await controller.selectMode("Scratch"); // Get all cells const cells = await controller.getCells(); // edit the first cell with id "YourImpl" - const codeCell = cells.find((cell) => cell.ids.includes("YourImpl"))!; - await codeCell.scroll(); + const scratchCell = cells[0]; - console.log("Original content:", await codeCell.getContent()); - await codeCell.clearContent(); - await codeCell.typeString(g_combinator(5), 50); + await scratchCell.clearContent(); + await scratchCell.typeString(livelit); await wait(1000); // save screenshot diff --git a/browertest/src/utils.ts b/browsertest/src/utils.ts similarity index 100% rename from browertest/src/utils.ts rename to browsertest/src/utils.ts diff --git a/browertest/tests/detailed.test.ts b/browsertest/tests/detailed.test.ts similarity index 100% rename from browertest/tests/detailed.test.ts rename to browsertest/tests/detailed.test.ts diff --git a/browertest/tests/utils.test.ts b/browsertest/tests/utils.test.ts similarity index 100% rename from browertest/tests/utils.test.ts rename to browsertest/tests/utils.test.ts diff --git a/browertest/tsconfig.json b/browsertest/tsconfig.json similarity index 100% rename from browertest/tsconfig.json rename to browsertest/tsconfig.json From b9d437b6993fb1461cef979c6200d84009a5ba0e Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Thu, 10 Oct 2024 10:52:16 -0400 Subject: [PATCH 11/23] debugging tokenizer --- src/haz3lcore/lang/Form.re | 31 ++++++++++++++++++++++------- src/haz3lcore/lang/Molds.re | 6 +++++- src/haz3lcore/lang/term/IdTagged.re | 8 ++++---- src/haz3lcore/statics/MakeTerm.re | 4 +++- src/haz3lcore/statics/TermBase.re | 1 + test/Test_MakeTerm.re | 3 +++ 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index 729a8fb431..915a6fa1f2 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -151,13 +151,16 @@ let undefined = "undefined"; let is_undefined = match(regexp("^" ++ undefined ++ "$")); let is_livelit = str => { - let re = regexp("^(ll)([a-z][A-Za-z0-9_]*)$"); - // print_endline("is_livelit"); - // print_endline(str); + let re = regexp("^(\\^)([A-Za-z0-9_]*)$"); let result = match(re, str); - // print_endline(string_of_bool(result)); result; }; +let parse_livelit = str => + if (String.length(str) > 1 && String.sub(str, 0, 1) == "^") { + String.sub(str, 1, String.length(str) - 1); + } else { + "invalid form"; + }; let var_regexp = regexp( @@ -354,20 +357,34 @@ let delims: list(Token.t) = |> List.sort_uniq(compare); let atomic_molds: Token.t => list(Mold.t) = - s => + s => { + print_endline("atomic_molds"); + print_endline(s); List.fold_left( (acc, (_, (test, molds))) => test(s) ? molds @ acc : acc, [], atomic_forms, ); + }; -let is_atomic = t => atomic_molds(t) != []; +let is_atomic = t => { + print_endline("is_atomic"); + print_endline(t); + atomic_molds(t) != []; +}; let is_delim = t => List.mem(t, delims); -let is_valid_token = t => is_atomic(t) || is_secondary(t) || is_delim(t); +let is_valid_token = t => { + print_endline("is_valid_token"); + print_endline(t); + is_atomic(t) || is_secondary(t) || is_delim(t); +}; let mk_atomic = (sort: Sort.t, t: Token.t) => { + print_endline("mk_atomic"); + print_endline(t); + assert(is_atomic(t)); mk(ss, [t], Mold.(mk_op(sort, []))); }; diff --git a/src/haz3lcore/lang/Molds.re b/src/haz3lcore/lang/Molds.re index c754dac288..3a44d5259c 100644 --- a/src/haz3lcore/lang/Molds.re +++ b/src/haz3lcore/lang/Molds.re @@ -17,7 +17,10 @@ let forms_assoc: list((Label.t, list(Mold.t))) = Form.forms, ); -let get = (label: Label.t): list(Mold.t) => +let get = (label: Label.t): list(Mold.t) => { + print_endline("Molds.get"); + print_endline(String.concat(" ", label)); + switch (label, List.assoc_opt(label, forms_assoc)) { | ([t], Some(molds)) when Form.atomic_molds(t) != [] => Form.atomic_molds(t) @ molds @@ -54,6 +57,7 @@ let get = (label: Label.t): list(Mold.t) => ); [Mold.mk_op(Any, [])]; }; +}; let delayed_expansions: expansions = List.filter_map( diff --git a/src/haz3lcore/lang/term/IdTagged.re b/src/haz3lcore/lang/term/IdTagged.re index 3812b0e83f..dc73a1a363 100644 --- a/src/haz3lcore/lang/term/IdTagged.re +++ b/src/haz3lcore/lang/term/IdTagged.re @@ -15,10 +15,10 @@ type t('a) = { }; // To be used if you want to remove the id from the debug output -// let pp: ((Format.formatter, 'a) => unit, Format.formatter, t('a)) => unit = -// (fmt_a, formatter, ta) => { -// fmt_a(formatter, ta.term); -// }; +let pp: ((Format.formatter, 'a) => unit, Format.formatter, t('a)) => unit = + (fmt_a, formatter, ta) => { + fmt_a(formatter, ta.term); + }; let fresh = term => { {ids: [Id.mk()], copied: false, term}; }; diff --git a/src/haz3lcore/statics/MakeTerm.re b/src/haz3lcore/statics/MakeTerm.re index f95577d092..b003b7566f 100644 --- a/src/haz3lcore/statics/MakeTerm.re +++ b/src/haz3lcore/statics/MakeTerm.re @@ -189,7 +189,7 @@ and exp_term: unsorted => (UExp.term, list(Id.t)) = { ret(String(Form.strip_quotes(t))) | ([t], []) when Form.is_float(t) => ret(Float(float_of_string(t))) | ([t], []) when Form.is_livelit(t) => - ret(LivelitInvocation("livelit name")) + ret(LivelitInvocation(Form.parse_livelit(t))) | ([t], []) when Form.is_var(t) => ret(Var(t)) | ([t], []) when Form.is_ctr(t) => ret(Constructor(t, Unknown(Internal) |> Typ.temp)) @@ -258,6 +258,8 @@ and exp_term: unsorted => (UExp.term, list(Id.t)) = { term: Deferral(InAp), }; switch (arg.term) { + | Var(l) when Form.is_livelit(l) => + ret(LivelitInvocation(Form.parse_livelit(l))) | _ when UExp.is_deferral(arg) => ret(DeferredAp(l, [use_deferral(arg)])) | Tuple(es) when List.exists(UExp.is_deferral, es) => ( diff --git a/src/haz3lcore/statics/TermBase.re b/src/haz3lcore/statics/TermBase.re index 281ce71fd3..ee3eeca052 100644 --- a/src/haz3lcore/statics/TermBase.re +++ b/src/haz3lcore/statics/TermBase.re @@ -396,6 +396,7 @@ and Exp: { ClosureEnvironment.id_equal(c1, c2) && fast_equal(e1, e2) | (Cons(e1, e2), Cons(e3, e4)) => fast_equal(e1, e3) && fast_equal(e2, e4) + | (LivelitInvocation(s1), LivelitInvocation(s2)) => s1 == s2 | (ListConcat(e1, e2), ListConcat(e3, e4)) => fast_equal(e1, e3) && fast_equal(e2, e4) | (UnOp(o1, e1), UnOp(o2, e2)) => o1 == o2 && fast_equal(e1, e2) diff --git a/test/Test_MakeTerm.re b/test/Test_MakeTerm.re index 82eee683b6..dff49df747 100644 --- a/test/Test_MakeTerm.re +++ b/test/Test_MakeTerm.re @@ -67,4 +67,7 @@ let tests = [ "let = fun x -> in ", ) }), + test_case("Livelit Invocation", `Quick, () => { + exp_check(LivelitInvocation("slider") |> Exp.fresh, "^slider") + }), ]; From 269c54058725d431dcc5b101e4fdb10f69626516 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Thu, 10 Oct 2024 11:06:12 -0400 Subject: [PATCH 12/23] Fix potential_operator_regexp to allow for livelit invocation Co-authored-by: Gregory Croisdale --- src/haz3lcore/lang/Form.re | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index 915a6fa1f2..aa7c9ab7bf 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -113,7 +113,7 @@ let is_keyword = match(keyword_regexp); /* Potential tokens: These are fallthrough classes which determine * the behavior when inserting a character in contact with a token */ -let is_potential_operand = match(regexp("^[a-zA-Z0-9_'\\.?]+$")); +let is_potential_operand = match(regexp("^[\\^a-zA-Z0-9_'\\.?]+$")); /* Anything else is considered a potential operator, as long * as it does not contain any whitespace, linebreaks, comment * delimiters, string delimiters, or the instant expanding paired @@ -151,8 +151,10 @@ let undefined = "undefined"; let is_undefined = match(regexp("^" ++ undefined ++ "$")); let is_livelit = str => { - let re = regexp("^(\\^)([A-Za-z0-9_]*)$"); + let re = regexp("^(\\^)([a-z][A-Za-z0-9_]*)$"); let result = match(re, str); + print_endline("is_livelit: " ++ str ++ " " ++ string_of_bool(result)); + result; }; let parse_livelit = str => From 20b6aef2b550df901338b6e7a409606ee3147e3f Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 30 Oct 2024 09:59:41 -0400 Subject: [PATCH 13/23] fixed carot parsing, added livelit projector, elaboration --- src/haz3lcore/dynamics/Elaborator.re | 9 +- src/haz3lcore/lang/Form.re | 13 +- src/haz3lcore/lang/Molds.re | 3 - src/haz3lcore/tiles/Base.re | 3 +- src/haz3lcore/tiles/Livelit.re | 31 ++--- src/haz3lcore/zipper/Projector.re | 1 + .../zipper/projectors/LivelitProj.re | 121 ++++++++++++++++++ .../zipper/projectors/TextAreaProj.re | 3 +- src/haz3lweb/view/ProjectorView.re | 4 + src/util/Web.re | 2 + 10 files changed, 151 insertions(+), 39 deletions(-) create mode 100644 src/haz3lcore/zipper/projectors/LivelitProj.re diff --git a/src/haz3lcore/dynamics/Elaborator.re b/src/haz3lcore/dynamics/Elaborator.re index e3634e42e6..8471c8806e 100644 --- a/src/haz3lcore/dynamics/Elaborator.re +++ b/src/haz3lcore/dynamics/Elaborator.re @@ -115,8 +115,7 @@ let rec elaborate_pattern = | Bool(_) => upat |> cast_from(Bool |> Typ.temp) | Float(_) => upat |> cast_from(Float |> Typ.temp) | String(_) => upat |> cast_from(String |> Typ.temp) - | LivelitInvocation(_) => - upat |> cast_from(Unknown(Internal) |> Typ.temp) + | LivelitInvocation(_) => upat |> cast_from(String |> Typ.temp) | ListLit(ps) => let (ps, tys) = List.map(elaborate_pattern(m), ps) |> ListUtil.unzip; let inner_type = @@ -251,7 +250,11 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { |> Option.value(~default=Typ.temp(Typ.Unknown(Internal))); let ds' = List.map2((d, t) => fresh_cast(d, t, inner_type), ds, tys); Exp.ListLit(ds') |> rewrap |> cast_from(List(inner_type) |> Typ.temp); - | LivelitInvocation(_) => uexp |> cast_from(String |> Typ.temp) + | LivelitInvocation(livelit_name) => + switch (Livelit.elaborate_livelit(livelit_name)) { + | Some(t) => uexp |> cast_from(t) + | None => uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))) + } | Constructor(c, _) => let mode = switch (Id.Map.find_opt(Exp.rep_id(uexp), m)) { diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index aa7c9ab7bf..486d6f35e6 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -119,7 +119,7 @@ let is_potential_operand = match(regexp("^[\\^a-zA-Z0-9_'\\.?]+$")); * delimiters, string delimiters, or the instant expanding paired * delimiters: ()[]| */ let potential_operator_regexp = - regexp("^[^a-zA-Z0-9_'?\"#\n\\s\\[\\]\\(\\)]+$"); /* Multiline operators not supported */ + regexp("^[\\^a-zA-Z0-9_'?\"#\n\\s\\[\\]\\(\\)]+$"); /* Multiline operators not supported */ let is_potential_operator = match(potential_operator_regexp); let is_potential_token = t => is_potential_operand(t) @@ -153,8 +153,6 @@ let is_undefined = match(regexp("^" ++ undefined ++ "$")); let is_livelit = str => { let re = regexp("^(\\^)([a-z][A-Za-z0-9_]*)$"); let result = match(re, str); - print_endline("is_livelit: " ++ str ++ " " ++ string_of_bool(result)); - result; }; let parse_livelit = str => @@ -360,8 +358,6 @@ let delims: list(Token.t) = let atomic_molds: Token.t => list(Mold.t) = s => { - print_endline("atomic_molds"); - print_endline(s); List.fold_left( (acc, (_, (test, molds))) => test(s) ? molds @ acc : acc, [], @@ -370,23 +366,16 @@ let atomic_molds: Token.t => list(Mold.t) = }; let is_atomic = t => { - print_endline("is_atomic"); - print_endline(t); atomic_molds(t) != []; }; let is_delim = t => List.mem(t, delims); let is_valid_token = t => { - print_endline("is_valid_token"); - print_endline(t); is_atomic(t) || is_secondary(t) || is_delim(t); }; let mk_atomic = (sort: Sort.t, t: Token.t) => { - print_endline("mk_atomic"); - print_endline(t); - assert(is_atomic(t)); mk(ss, [t], Mold.(mk_op(sort, []))); }; diff --git a/src/haz3lcore/lang/Molds.re b/src/haz3lcore/lang/Molds.re index 3a44d5259c..f91d5dd634 100644 --- a/src/haz3lcore/lang/Molds.re +++ b/src/haz3lcore/lang/Molds.re @@ -18,9 +18,6 @@ let forms_assoc: list((Label.t, list(Mold.t))) = ); let get = (label: Label.t): list(Mold.t) => { - print_endline("Molds.get"); - print_endline(String.concat(" ", label)); - switch (label, List.assoc_opt(label, forms_assoc)) { | ([t], Some(molds)) when Form.atomic_molds(t) != [] => Form.atomic_molds(t) @ molds diff --git a/src/haz3lcore/tiles/Base.re b/src/haz3lcore/tiles/Base.re index 0482defc2c..377055b245 100644 --- a/src/haz3lcore/tiles/Base.re +++ b/src/haz3lcore/tiles/Base.re @@ -10,7 +10,8 @@ type kind = | Checkbox | Slider | SliderF - | TextArea; + | TextArea + | Livelit; [@deriving (show({with_path: false}), sexp, yojson, eq)] type segment = list(piece) diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 53261739f5..64874799d5 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -5,30 +5,29 @@ type t = { name: string, width: int, default: Pat.term, - expansion_type: Typ.cls, + expansion_type: Typ.t, }; -type state = Id.Map.t(DHExp.t); -let empty_state: state = Id.Map.empty; +type state = Id.Map.t(t); let slider: t = { - name: "llslider\t", + name: "slider\t", width: 10, default: Int(30), - expansion_type: Int, + expansion_type: Typ.temp(Typ.Int), }; let checkbox: t = { - name: "llcheckbox\t", + name: "checkbox\t", width: 1, default: Bool(false), - expansion_type: Bool, + expansion_type: Typ.temp(Typ.Bool), }; let fslider: t = { - name: "llfslider\t", + name: "fslider\t", width: 10, default: Float(0.5), - expansion_type: Float, + expansion_type: Typ.temp(Typ.Float), }; let livelits: list(t) = [checkbox, fslider, slider]; @@ -36,15 +35,9 @@ let livelits: list(t) = [checkbox, fslider, slider]; let find_livelit = (livelit_name: string): option(t) => List.find_opt(l => l.name == livelit_name, livelits); -let elaborate_livelit = - (livelit_name: string, uexp_id: Uuidm.t, livelits: state) - : option(Pat.term) => { - switch (Id.Map.find_opt(uexp_id, livelits)) { - // | Some(t) => Some(t) - | _ => - switch (find_livelit(livelit_name)) { - | Some(l) => Some(l.default) - | None => None - } +let elaborate_livelit = (livelit_name: string): option(Typ.t) => { + switch (find_livelit(livelit_name)) { + | Some(l) => Some(l.expansion_type) + | None => None }; }; diff --git a/src/haz3lcore/zipper/Projector.re b/src/haz3lcore/zipper/Projector.re index 82b036b821..f4b93e534e 100644 --- a/src/haz3lcore/zipper/Projector.re +++ b/src/haz3lcore/zipper/Projector.re @@ -12,6 +12,7 @@ let to_module = (kind: Base.kind): (module Cooked) => | SliderF => (module Cook(SliderFProj.M)) | Checkbox => (module Cook(CheckboxProj.M)) | TextArea => (module Cook(TextAreaProj.M)) + | Livelit => (module Cook(LivelitProj.M)) }; let shape = (p: Base.projector, info: info): shape => { diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re new file mode 100644 index 0000000000..2402e789b7 --- /dev/null +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -0,0 +1,121 @@ +open Util; +open Virtual_dom.Vdom; +open ProjectorBase; + +let of_id = (id: Id.t) => + "id" ++ (id |> Id.to_string |> String.sub(_, 0, 8)); + +let of_mono = (syntax: Piece.t): option(string) => + switch (syntax) { + | Tile({label: [l], _}) => Some(StringUtil.unescape_linebreaks(l)) + | _ => None + }; + +let mk_mono = (sort: Sort.t, string: string): Piece.t => + string + |> StringUtil.escape_linebreaks + |> Form.mk_atomic(sort) + |> Piece.mk_tile(_, []); + +let get = (piece: Piece.t): string => + switch (piece |> of_mono) { + | None => failwith("TextArea: not string literal") + | Some(s) => s + }; + +let put = (s: string): Piece.t => s |> mk_mono(Exp); + +let put = (str: string): external_action => + SetSyntax(str |> Form.string_quote |> put); + +let is_last_pos = id => + Web.TextArea.caret_at_end(Web.TextArea.get(of_id(id))); +let is_first_pos = id => + Web.TextArea.caret_at_start(Web.TextArea.get(of_id(id))); + +let key_handler = (id, ~parent, evt) => { + open Effect; + let key = Key.mk(KeyDown, evt); + + switch (key.key) { + | D("ArrowRight" | "ArrowDown") when is_last_pos(id) => + JsUtil.get_elem_by_id(of_id(id))##blur; + Many([parent(Escape(Right)), Stop_propagation]); + | D("ArrowLeft" | "ArrowUp") when is_first_pos(id) => + JsUtil.get_elem_by_id(of_id(id))##blur; + Many([parent(Escape(Left)), Stop_propagation]); + /* Defer to parent editor undo for now */ + | D("z" | "Z" | "y" | "Y") when Key.ctrl_held(evt) || Key.meta_held(evt) => + Many([Prevent_default]) + | D("z" | "Z") + when Key.shift_held(evt) && (Key.ctrl_held(evt) || Key.meta_held(evt)) => + Many([Prevent_default]) + | D("\"") => + /* Hide quotes from both the textarea and parent editor */ + Many([Prevent_default, Stop_propagation]) + | _ => Stop_propagation + }; +}; + +let textarea = + (id, ~parent: external_action => Ui_effect.t(unit), text: string) => + Node.textarea( + ~attrs=[ + Attr.id(of_id(id)), + Attr.on_keydown(key_handler(id, ~parent)), + Attr.on_input((_, new_text) => + Effect.(Many([parent(put(new_text))])) + ), + /* Note: adding these handlers below because + * currently these are handled on page level. + * unnecesary maybe if we move handling down */ + Attr.on_copy(_ => Effect.Stop_propagation), + Attr.on_cut(_ => Effect.Stop_propagation), + Attr.on_paste(_ => Effect.Stop_propagation), + Attr.string_property("value", text), + ], + [], + ); + +let view = (_, ~info, ~local as _, ~parent) => { + let text = info.syntax |> get |> Form.strip_quotes; + Node.div( + ~attrs=[Attr.classes(["wrapper"])], + [ + Node.div( + ~attrs=[Attr.classes(["cols", "code"])], + [Node.text("I am a livelit projector")], + ), + ], + ); +}; + +module M: Projector = { + [@deriving (show({with_path: false}), sexp, yojson)] + type model = unit; + [@deriving (show({with_path: false}), sexp, yojson)] + type action = unit; + let init = (); + let can_project = _ => true; //TODO(andrew): restrict somehow + let can_focus = true; + let placeholder = (_, info) => { + let str = Form.strip_quotes(get(info.syntax)); + Block({ + row: StringUtil.num_lines(str), + /* +2 for left and right padding */ + col: 2 + StringUtil.max_line_width(str), + }); + }; + let update = (model, _) => model; + let view = view; + let focus = ((id: Id.t, d: option(Direction.t))) => { + JsUtil.get_elem_by_id(of_id(id))##focus; + switch (d) { + | None => () + | Some(Left) => + Web.TextArea.set_caret_to_start(Web.TextArea.get(of_id(id))) + | Some(Right) => + Web.TextArea.set_caret_to_end(Web.TextArea.get(of_id(id))) + }; + }; +}; diff --git a/src/haz3lcore/zipper/projectors/TextAreaProj.re b/src/haz3lcore/zipper/projectors/TextAreaProj.re index d6488afd86..2099841556 100644 --- a/src/haz3lcore/zipper/projectors/TextAreaProj.re +++ b/src/haz3lcore/zipper/projectors/TextAreaProj.re @@ -84,7 +84,8 @@ let view = (_, ~info, ~local as _, ~parent) => { [ Node.div( ~attrs=[Attr.classes(["cols", "code"])], - [Node.text("·")] @ [textarea(info.id, ~parent, text)], + [Node.text("I am a livelit projector")] + @ [textarea(info.id, ~parent, text)], ), ], ); diff --git a/src/haz3lweb/view/ProjectorView.re b/src/haz3lweb/view/ProjectorView.re index 1669ff136d..5bfb9e4295 100644 --- a/src/haz3lweb/view/ProjectorView.re +++ b/src/haz3lweb/view/ProjectorView.re @@ -19,6 +19,7 @@ let name = (p: kind): string => | Checkbox => "check" | Slider => "slider" | SliderF => "sliderf" + | Livelit => "livelit" | TextArea => "text" }; @@ -32,6 +33,7 @@ let of_name = (p: string): kind => | "check" => Checkbox | "slider" => Slider | "sliderf" => SliderF + | "livelit" => Livelit | "text" => TextArea | _ => failwith("Unknown projector kind") }; @@ -215,6 +217,8 @@ module Panel = { | Pat(Float) => [SliderF] | Exp(String) | Pat(String) => [TextArea] + | Exp(LivelitInvocation) + | Pat(LivelitInvocation) => [Livelit] | _ => [] } ) diff --git a/src/util/Web.re b/src/util/Web.re index 358b1327d3..96b4b466d8 100644 --- a/src/util/Web.re +++ b/src/util/Web.re @@ -134,3 +134,5 @@ module TextArea = { textarea##.selectionEnd := content_length; }; }; + +let span_text = (text: string) => span(~attrs=[], [Node.text(text)]); From e1954090138b6adf39f73f48f8ce90f1b15ce14e Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Mon, 4 Nov 2024 21:39:06 -0500 Subject: [PATCH 14/23] added more test livelits, patched statics, elaborator update --- src/haz3lcore/Measured.re | 2 +- src/haz3lcore/dynamics/Elaborator.re | 2 +- src/haz3lcore/lang/Form.re | 4 +- src/haz3lcore/statics/Ctx.re | 6 ++ src/haz3lcore/statics/Statics.re | 4 +- src/haz3lcore/tiles/Livelit.re | 87 ++++++++++++++++++++-------- 6 files changed, 76 insertions(+), 29 deletions(-) diff --git a/src/haz3lcore/Measured.re b/src/haz3lcore/Measured.re index a8e9c013ec..88ee90e184 100644 --- a/src/haz3lcore/Measured.re +++ b/src/haz3lcore/Measured.re @@ -286,7 +286,7 @@ let livelit_padding = (t: Base.tile): abs_indent => switch (t.label) { | [possible_livelit_name] => switch (Livelit.find_livelit(possible_livelit_name)) { - | Some(ll) => ll.width + 1 // Add one for margin + | Some(_ll) => 10 + 1 // Add one for margin | None => 0 } | _ => 0 diff --git a/src/haz3lcore/dynamics/Elaborator.re b/src/haz3lcore/dynamics/Elaborator.re index 8471c8806e..ad54fea4da 100644 --- a/src/haz3lcore/dynamics/Elaborator.re +++ b/src/haz3lcore/dynamics/Elaborator.re @@ -252,7 +252,7 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { Exp.ListLit(ds') |> rewrap |> cast_from(List(inner_type) |> Typ.temp); | LivelitInvocation(livelit_name) => switch (Livelit.elaborate_livelit(livelit_name)) { - | Some(t) => uexp |> cast_from(t) + | Some((_t, uexp_f)) => uexp_f(uexp) | None => uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))) } | Constructor(c, _) => diff --git a/src/haz3lcore/lang/Form.re b/src/haz3lcore/lang/Form.re index 486d6f35e6..c2a18d3bbc 100644 --- a/src/haz3lcore/lang/Form.re +++ b/src/haz3lcore/lang/Form.re @@ -119,7 +119,7 @@ let is_potential_operand = match(regexp("^[\\^a-zA-Z0-9_'\\.?]+$")); * delimiters, string delimiters, or the instant expanding paired * delimiters: ()[]| */ let potential_operator_regexp = - regexp("^[\\^a-zA-Z0-9_'?\"#\n\\s\\[\\]\\(\\)]+$"); /* Multiline operators not supported */ + regexp("^[^a-zA-Z0-9_'?\"#\n\\s\\[\\]\\(\\)]+$"); /* Multiline operators not supported */ let is_potential_operator = match(potential_operator_regexp); let is_potential_token = t => is_potential_operand(t) @@ -155,7 +155,7 @@ let is_livelit = str => { let result = match(re, str); result; }; -let parse_livelit = str => +let parse_livelit = (str): string => if (String.length(str) > 1 && String.sub(str, 0, 1) == "^") { String.sub(str, 1, String.length(str) - 1); } else { diff --git a/src/haz3lcore/statics/Ctx.re b/src/haz3lcore/statics/Ctx.re index 9791b6cd0f..573fc95784 100644 --- a/src/haz3lcore/statics/Ctx.re +++ b/src/haz3lcore/statics/Ctx.re @@ -19,6 +19,12 @@ type tvar_entry = { kind, }; +type livelit_entry = { + name: string, + id: Id.t, + typ: TermBase.Typ.t, +}; + [@deriving (show({with_path: false}), sexp, yojson)] type entry = | VarEntry(var_entry) diff --git a/src/haz3lcore/statics/Statics.re b/src/haz3lcore/statics/Statics.re index 0ca1711613..d8388331ca 100644 --- a/src/haz3lcore/statics/Statics.re +++ b/src/haz3lcore/statics/Statics.re @@ -733,8 +733,8 @@ and upat_to_info_map = ) | String(string) => atomic(Just(String |> Typ.temp), Constraint.String(string)) - | LivelitInvocation(_) => - atomic(Just(String |> Typ.temp), Constraint.Truth) + | LivelitInvocation(name) => + atomic(Just(Livelit.get_livelit_type(name)), Constraint.Truth) | ListLit(ps) => let ids = List.map(UPat.rep_id, ps); let modes = Mode.of_list_lit(ctx, List.length(ps), mode); diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 64874799d5..15a9a51d4e 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -3,41 +3,82 @@ open Util; [@deriving (show({with_path: false}), sexp, yojson)] type t = { name: string, - width: int, - default: Pat.term, - expansion_type: Typ.t, + model_t: Typ.t, + // init: UExp.term, + expansion_t: Typ.t, + expansion_f: UExp.t => UExp.t, }; - -type state = Id.Map.t(t); let slider: t = { - name: "slider\t", - width: 10, - default: Int(30), - expansion_type: Typ.temp(Typ.Int), + name: "slider", + expansion_t: Typ.temp(Typ.Int), + expansion_f: (_model: UExp.t) => DHExp.fresh(Int(3)), + model_t: Typ.temp(Typ.Int), }; -let checkbox: t = { - name: "checkbox\t", - width: 1, - default: Bool(false), - expansion_type: Typ.temp(Typ.Bool), +let timestamp: t = { + name: "timestamp", + expansion_t: Typ.temp(Typ.Int), + expansion_f: (_model: UExp.t) => + DHExp.fresh(Int(Float.to_int(JsUtil.timestamp()))), + model_t: Typ.temp(Typ.Int), }; -let fslider: t = { - name: "fslider\t", - width: 10, - default: Float(0.5), - expansion_type: Typ.temp(Typ.Float), +let func_test: t = { + name: "func_test", + expansion_t: Typ.temp(Typ.Arrow(Typ.temp(Typ.Int), Typ.temp(Typ.Int))), + expansion_f: (_model: UExp.t) => DHExp.fresh(Int(3)), + model_t: Typ.temp(Typ.Int), }; -let livelits: list(t) = [checkbox, fslider, slider]; +// let checkbox: t = { +// name: "checkbox", +// width: 1, +// default: Bool(false), +// expansion_type: Typ.temp(Typ.Bool), +// }; + +// let fslider: t = { +// name: "fslider", +// width: 10, +// default: Float(0.5), +// expansion_type: Typ.temp(Typ.Float), +// }; + +let livelits: list(t) = [slider, timestamp, func_test]; let find_livelit = (livelit_name: string): option(t) => List.find_opt(l => l.name == livelit_name, livelits); -let elaborate_livelit = (livelit_name: string): option(Typ.t) => { +let elaborate_livelit = + (livelit_name: string): option((Typ.t, UExp.t => UExp.t)) => { + let r = + switch (find_livelit(livelit_name)) { + | Some(l) => Some((l.expansion_t, l.expansion_f)) + | None => None + }; + r; +}; + +let get_livelit_type = (livelit_name: string): Typ.t => switch (find_livelit(livelit_name)) { - | Some(l) => Some(l.expansion_type) - | None => None + | Some(l) => l.expansion_t + | None => Typ.temp(Typ.Unknown(Internal)) + }; + +let project_livelit = (livelit_name: string): string => { + switch (find_livelit(livelit_name)) { + | Some(l) => l.name + | None => "Not found" }; }; + +// [@deriving (show({with_path: false}), sexp, yojson)] +// type t = +// name: string, +// model_t: Typ.t, +// init: UExp.t, +// default: UExp.term, +// expansion_t: Typ.t, +// // view +// // action_t +// // update From 2dd93b06393c095e299ee1420fa6a38d13c32e87 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Tue, 5 Nov 2024 16:13:07 -0500 Subject: [PATCH 15/23] fixed static typing, dynamic projector --- src/haz3lcore/dynamics/Elaborator.re | 6 +- src/haz3lcore/statics/Statics.re | 2 +- .../zipper/projectors/LivelitProj.re | 119 +++--------------- 3 files changed, 22 insertions(+), 105 deletions(-) diff --git a/src/haz3lcore/dynamics/Elaborator.re b/src/haz3lcore/dynamics/Elaborator.re index ad54fea4da..d41f7fd9d2 100644 --- a/src/haz3lcore/dynamics/Elaborator.re +++ b/src/haz3lcore/dynamics/Elaborator.re @@ -252,8 +252,10 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { Exp.ListLit(ds') |> rewrap |> cast_from(List(inner_type) |> Typ.temp); | LivelitInvocation(livelit_name) => switch (Livelit.elaborate_livelit(livelit_name)) { - | Some((_t, uexp_f)) => uexp_f(uexp) - | None => uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))) + | Some((t, uexp_f)) => uexp_f(uexp) |> cast_from(t) + | None => + print_endline("Livelit not found"); + uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))); } | Constructor(c, _) => let mode = diff --git a/src/haz3lcore/statics/Statics.re b/src/haz3lcore/statics/Statics.re index d8388331ca..a8cc4dfede 100644 --- a/src/haz3lcore/statics/Statics.re +++ b/src/haz3lcore/statics/Statics.re @@ -231,7 +231,7 @@ and uexp_to_info_map = | Int(_) => atomic(Just(Int |> Typ.temp)) | Float(_) => atomic(Just(Float |> Typ.temp)) | String(_) => atomic(Just(String |> Typ.temp)) - | LivelitInvocation(_) => atomic(Just(String |> Typ.temp)) + | LivelitInvocation(name) => atomic(Just(Livelit.get_livelit_type(name))) | ListLit(es) => let ids = List.map(UExp.rep_id, es); let modes = Mode.of_list_lit(ctx, List.length(es), mode); diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 2402e789b7..5f21de8195 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -2,120 +2,35 @@ open Util; open Virtual_dom.Vdom; open ProjectorBase; -let of_id = (id: Id.t) => - "id" ++ (id |> Id.to_string |> String.sub(_, 0, 8)); +let put: string => Piece.t = Piece.mk_mono(Exp); -let of_mono = (syntax: Piece.t): option(string) => - switch (syntax) { - | Tile({label: [l], _}) => Some(StringUtil.unescape_linebreaks(l)) - | _ => None - }; - -let mk_mono = (sort: Sort.t, string: string): Piece.t => - string - |> StringUtil.escape_linebreaks - |> Form.mk_atomic(sort) - |> Piece.mk_tile(_, []); +let get_opt = (piece: Piece.t): option(string) => + piece |> Piece.of_mono |> Option.map(Form.parse_livelit); let get = (piece: Piece.t): string => - switch (piece |> of_mono) { - | None => failwith("TextArea: not string literal") + switch (get_opt(piece)) { + | None => failwith("ERROR: Slider: not integer literal") | Some(s) => s }; -let put = (s: string): Piece.t => s |> mk_mono(Exp); - -let put = (str: string): external_action => - SetSyntax(str |> Form.string_quote |> put); - -let is_last_pos = id => - Web.TextArea.caret_at_end(Web.TextArea.get(of_id(id))); -let is_first_pos = id => - Web.TextArea.caret_at_start(Web.TextArea.get(of_id(id))); - -let key_handler = (id, ~parent, evt) => { - open Effect; - let key = Key.mk(KeyDown, evt); - - switch (key.key) { - | D("ArrowRight" | "ArrowDown") when is_last_pos(id) => - JsUtil.get_elem_by_id(of_id(id))##blur; - Many([parent(Escape(Right)), Stop_propagation]); - | D("ArrowLeft" | "ArrowUp") when is_first_pos(id) => - JsUtil.get_elem_by_id(of_id(id))##blur; - Many([parent(Escape(Left)), Stop_propagation]); - /* Defer to parent editor undo for now */ - | D("z" | "Z" | "y" | "Y") when Key.ctrl_held(evt) || Key.meta_held(evt) => - Many([Prevent_default]) - | D("z" | "Z") - when Key.shift_held(evt) && (Key.ctrl_held(evt) || Key.meta_held(evt)) => - Many([Prevent_default]) - | D("\"") => - /* Hide quotes from both the textarea and parent editor */ - Many([Prevent_default, Stop_propagation]) - | _ => Stop_propagation - }; -}; - -let textarea = - (id, ~parent: external_action => Ui_effect.t(unit), text: string) => - Node.textarea( - ~attrs=[ - Attr.id(of_id(id)), - Attr.on_keydown(key_handler(id, ~parent)), - Attr.on_input((_, new_text) => - Effect.(Many([parent(put(new_text))])) - ), - /* Note: adding these handlers below because - * currently these are handled on page level. - * unnecesary maybe if we move handling down */ - Attr.on_copy(_ => Effect.Stop_propagation), - Attr.on_cut(_ => Effect.Stop_propagation), - Attr.on_paste(_ => Effect.Stop_propagation), - Attr.string_property("value", text), - ], - [], - ); - -let view = (_, ~info, ~local as _, ~parent) => { - let text = info.syntax |> get |> Form.strip_quotes; - Node.div( - ~attrs=[Attr.classes(["wrapper"])], - [ - Node.div( - ~attrs=[Attr.classes(["cols", "code"])], - [Node.text("I am a livelit projector")], - ), - ], - ); -}; - module M: Projector = { [@deriving (show({with_path: false}), sexp, yojson)] type model = unit; [@deriving (show({with_path: false}), sexp, yojson)] type action = unit; let init = (); - let can_project = _ => true; //TODO(andrew): restrict somehow - let can_focus = true; - let placeholder = (_, info) => { - let str = Form.strip_quotes(get(info.syntax)); - Block({ - row: StringUtil.num_lines(str), - /* +2 for left and right padding */ - col: 2 + StringUtil.max_line_width(str), - }); - }; + let can_project = p => get_opt(p) != None; + let can_focus = false; + let placeholder = (_, _) => Inline(10); let update = (model, _) => model; - let view = view; - let focus = ((id: Id.t, d: option(Direction.t))) => { - JsUtil.get_elem_by_id(of_id(id))##focus; - switch (d) { - | None => () - | Some(Left) => - Web.TextArea.set_caret_to_start(Web.TextArea.get(of_id(id))) - | Some(Right) => - Web.TextArea.set_caret_to_end(Web.TextArea.get(of_id(id))) - }; + let view = + (_, ~info, ~local as _, ~parent: external_action => Ui_effect.t(unit)) => { + let llname = get(info.syntax); + print_endline("Livelit: " ++ llname); + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("Livelit: " ++ llname)], + ); }; + let focus = _ => (); }; From a9f5774ee63409b287b1cd1f1f691707594e2181 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Thu, 7 Nov 2024 14:47:12 -0500 Subject: [PATCH 16/23] statics progress, livelit proj can access args --- src/haz3lcore/Measured.re | 12 +-- src/haz3lcore/dynamics/Elaborator.re | 28 +++--- src/haz3lcore/statics/Statics.re | 39 +++++--- src/haz3lcore/tiles/Livelit.re | 96 +++++++------------ .../zipper/projectors/LivelitProj.re | 50 ++++++++-- src/haz3lweb/view/ProjectorView.re | 4 +- 6 files changed, 126 insertions(+), 103 deletions(-) diff --git a/src/haz3lcore/Measured.re b/src/haz3lcore/Measured.re index 88ee90e184..0eced3f8ca 100644 --- a/src/haz3lcore/Measured.re +++ b/src/haz3lcore/Measured.re @@ -282,16 +282,6 @@ let last_of_token = (token: string, origin: Point.t): Point.t => row: origin.row + StringUtil.num_linebreaks(token), }; -let livelit_padding = (t: Base.tile): abs_indent => - switch (t.label) { - | [possible_livelit_name] => - switch (Livelit.find_livelit(possible_livelit_name)) { - | Some(_ll) => 10 + 1 // Add one for margin - | None => 0 - } - | _ => 0 - }; - let of_segment = (seg: Segment.t, info_map: Statics.Map.t): t => { let is_indented = is_indented_map(seg); @@ -372,7 +362,7 @@ let of_segment = (seg: Segment.t, info_map: Statics.Map.t): t => { | Tile(t) => let token = List.nth(t.label); let add_shard = (origin, shard, map) => { - let lp = livelit_padding(t); + let lp = 0; let last = Point.{ ...origin, diff --git a/src/haz3lcore/dynamics/Elaborator.re b/src/haz3lcore/dynamics/Elaborator.re index d41f7fd9d2..fa85c0d8b4 100644 --- a/src/haz3lcore/dynamics/Elaborator.re +++ b/src/haz3lcore/dynamics/Elaborator.re @@ -250,13 +250,9 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { |> Option.value(~default=Typ.temp(Typ.Unknown(Internal))); let ds' = List.map2((d, t) => fresh_cast(d, t, inner_type), ds, tys); Exp.ListLit(ds') |> rewrap |> cast_from(List(inner_type) |> Typ.temp); - | LivelitInvocation(livelit_name) => - switch (Livelit.elaborate_livelit(livelit_name)) { - | Some((t, uexp_f)) => uexp_f(uexp) |> cast_from(t) - | None => - print_endline("Livelit not found"); - uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))); - } + | LivelitInvocation(_) => + // This should never happen if the Livelit is invoked! + uexp |> cast_from(Typ.temp(Typ.Unknown(Internal))) | Constructor(c, _) => let mode = switch (Id.Map.find_opt(Exp.rep_id(uexp), m)) { @@ -335,12 +331,18 @@ let rec elaborate = (m: Statics.Map.t, uexp: UExp.t): (DHExp.t, Typ.t) => { let (e', tye) = elaborate(m, e); e' |> cast_from(tye); | Ap(dir, f, a) => - let (f', tyf) = elaborate(m, f); - let (a', tya) = elaborate(m, a); - let (tyf1, tyf2) = Typ.matched_arrow(ctx, tyf); - let f'' = fresh_cast(f', tyf, Arrow(tyf1, tyf2) |> Typ.temp); - let a'' = fresh_cast(a', tya, tyf1); - Exp.Ap(dir, f'', a'') |> rewrap |> cast_from(tyf2); + switch (f.term) { + | LivelitInvocation(s) => + let ll = Livelit.find_livelit(s); + ll.expansion_f(a) |> cast_from(ll.expansion_t); + | _ => + let (f', tyf) = elaborate(m, f); + let (a', tya) = elaborate(m, a); + let (tyf1, tyf2) = Typ.matched_arrow(ctx, tyf); + let f'' = fresh_cast(f', tyf, Arrow(tyf1, tyf2) |> Typ.temp); + let a'' = fresh_cast(a', tya, tyf1); + Exp.Ap(dir, f'', a'') |> rewrap |> cast_from(tyf2); + } | DeferredAp(f, args) => let (f', tyf) = elaborate(m, f); let (args', tys) = List.map(elaborate(m), args) |> ListUtil.unzip; diff --git a/src/haz3lcore/statics/Statics.re b/src/haz3lcore/statics/Statics.re index a8cc4dfede..02c6a34133 100644 --- a/src/haz3lcore/statics/Statics.re +++ b/src/haz3lcore/statics/Statics.re @@ -231,7 +231,8 @@ and uexp_to_info_map = | Int(_) => atomic(Just(Int |> Typ.temp)) | Float(_) => atomic(Just(Float |> Typ.temp)) | String(_) => atomic(Just(String |> Typ.temp)) - | LivelitInvocation(name) => atomic(Just(Livelit.get_livelit_type(name))) + | LivelitInvocation(name) => + atomic(Just(Livelit.find_livelit(name).expansion_t)) | ListLit(es) => let ids = List.map(UExp.rep_id, es); let modes = Mode.of_list_lit(ctx, List.length(es), mode); @@ -328,16 +329,30 @@ and uexp_to_info_map = let (e2, m) = go(~mode, e2, m); add(~self=Just(e2.ty), ~co_ctx=CoCtx.union([e1.co_ctx, e2.co_ctx]), m); | Constructor(ctr, _) => atomic(Self.of_ctr(ctx, ctr)) - | Ap(_, fn, arg) => - let fn_mode = Mode.of_ap(ctx, mode, UExp.ctr_name(fn)); - let (fn, m) = go(~mode=fn_mode, fn, m); - let (ty_in, ty_out) = Typ.matched_arrow(ctx, fn.ty); - let (arg, m) = go(~mode=Ana(ty_in), arg, m); - let self: Self.t = - Id.is_nullary_ap_flag(arg.term.ids) - && !Typ.is_consistent(ctx, ty_in, Prod([]) |> Typ.temp) - ? BadTrivAp(ty_in) : Just(ty_out); - add(~self, ~co_ctx=CoCtx.union([fn.co_ctx, arg.co_ctx]), m); + | Ap(_, fn_uexp, arg_uexp) => + let fn_mode = Mode.of_ap(ctx, mode, UExp.ctr_name(fn_uexp)); + let (fn, m) = go(~mode=fn_mode, fn_uexp, m); + + switch (fn_uexp.term) { + | LivelitInvocation(s) => + // refer to livelit context to find types + print_endline("Livelit invocation " ++ s); + let ll = Livelit.find_livelit(s); + let expansion_t = ll.expansion_t; + let model_t = ll.model_t; + let (arg, m) = go(~mode=Ana(model_t), arg_uexp, m); + let self: Self.t = Just(expansion_t); + add(~self, ~co_ctx=CoCtx.union([arg.co_ctx]), m); + | _ => + // default for non-livelit applications + let (ty_in, ty_out) = Typ.matched_arrow(ctx, fn.ty); + let (arg, m) = go(~mode=Ana(ty_in), arg_uexp, m); + let self: Self.t = + Id.is_nullary_ap_flag(arg.term.ids) + && !Typ.is_consistent(ctx, ty_in, Prod([]) |> Typ.temp) + ? BadTrivAp(ty_in) : Just(ty_out); + add(~self, ~co_ctx=CoCtx.union([fn.co_ctx, arg.co_ctx]), m); + }; | TypAp(fn, utyp) => let typfn_mode = Mode.typap_mode; let (fn, m) = go(~mode=typfn_mode, fn, m); @@ -734,7 +749,7 @@ and upat_to_info_map = | String(string) => atomic(Just(String |> Typ.temp), Constraint.String(string)) | LivelitInvocation(name) => - atomic(Just(Livelit.get_livelit_type(name)), Constraint.Truth) + atomic(Just(Livelit.find_livelit(name).expansion_t), Constraint.Truth) | ListLit(ps) => let ids = List.map(UPat.rep_id, ps); let modes = Mode.of_list_lit(ctx, List.length(ps), mode); diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 15a9a51d4e..63eee46dc8 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -1,84 +1,62 @@ open Util; +open Virtual_dom.Vdom; [@deriving (show({with_path: false}), sexp, yojson)] type t = { name: string, model_t: Typ.t, - // init: UExp.term, expansion_t: Typ.t, expansion_f: UExp.t => UExp.t, + projector: UExp.t => Node.t, }; let slider: t = { name: "slider", expansion_t: Typ.temp(Typ.Int), - expansion_f: (_model: UExp.t) => DHExp.fresh(Int(3)), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Int(n) => DHExp.fresh(Int(n)) + | _ => DHExp.fresh(Int(-1)) + }, model_t: Typ.temp(Typ.Int), + projector: (model: UExp.t) => + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("I am a slider and my model is " ++ UExp.show(model))], + ), }; - let timestamp: t = { name: "timestamp", expansion_t: Typ.temp(Typ.Int), expansion_f: (_model: UExp.t) => DHExp.fresh(Int(Float.to_int(JsUtil.timestamp()))), - model_t: Typ.temp(Typ.Int), -}; - -let func_test: t = { - name: "func_test", - expansion_t: Typ.temp(Typ.Arrow(Typ.temp(Typ.Int), Typ.temp(Typ.Int))), - expansion_f: (_model: UExp.t) => DHExp.fresh(Int(3)), - model_t: Typ.temp(Typ.Int), + model_t: Typ.temp(Typ.Prod([])), + projector: (_model: UExp.t) => + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("Guess what guys -- I am a timestamp livelit!")], + ), }; -// let checkbox: t = { -// name: "checkbox", -// width: 1, -// default: Bool(false), -// expansion_type: Typ.temp(Typ.Bool), -// }; - -// let fslider: t = { -// name: "fslider", -// width: 10, -// default: Float(0.5), -// expansion_type: Typ.temp(Typ.Float), -// }; - -let livelits: list(t) = [slider, timestamp, func_test]; - -let find_livelit = (livelit_name: string): option(t) => - List.find_opt(l => l.name == livelit_name, livelits); - -let elaborate_livelit = - (livelit_name: string): option((Typ.t, UExp.t => UExp.t)) => { - let r = - switch (find_livelit(livelit_name)) { - | Some(l) => Some((l.expansion_t, l.expansion_f)) - | None => None - }; - r; +let not_found: t = { + name: "not_found", + expansion_t: Typ.temp(Typ.Unknown(Internal)), + expansion_f: (_model: UExp.t) => DHExp.fresh(String("No livelit found")), + model_t: Typ.temp(Typ.Unknown(Internal)), + projector: (_model: UExp.t) => + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("No livelit found")], + ), }; -let get_livelit_type = (livelit_name: string): Typ.t => - switch (find_livelit(livelit_name)) { - | Some(l) => l.expansion_t - | None => Typ.temp(Typ.Unknown(Internal)) - }; +let livelits: list(t) = [slider, timestamp]; -let project_livelit = (livelit_name: string): string => { - switch (find_livelit(livelit_name)) { - | Some(l) => l.name - | None => "Not found" +let find_livelit = (livelit_name: string): t => + // List.find_opt(l => l.name == livelit_name, livelits) + // |> Option.value(~default=not_found); + switch (List.find_opt(l => l.name == livelit_name, livelits)) { + | Some(l) => l + | None => + print_endline("Livelit " ++ livelit_name ++ " not found"); + not_found; }; -}; - -// [@deriving (show({with_path: false}), sexp, yojson)] -// type t = -// name: string, -// model_t: Typ.t, -// init: UExp.t, -// default: UExp.term, -// expansion_t: Typ.t, -// // view -// // action_t -// // update diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 5f21de8195..55924f2dfa 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -13,24 +13,62 @@ let get = (piece: Piece.t): string => | Some(s) => s }; +let getApArgs = (term: UExp.term): list(UExp.t) => + switch (term) { + | UExp.Parens(args) => + switch (args.term) { + | Tuple(lst) => lst + | _ => [args] + } + | _ => failwith("Not an Ap term") + }; + module M: Projector = { [@deriving (show({with_path: false}), sexp, yojson)] type model = unit; [@deriving (show({with_path: false}), sexp, yojson)] type action = unit; let init = (); - let can_project = p => get_opt(p) != None; + let can_project = p => true; let can_focus = false; let placeholder = (_, _) => Inline(10); let update = (model, _) => model; let view = (_, ~info, ~local as _, ~parent: external_action => Ui_effect.t(unit)) => { - let llname = get(info.syntax); - print_endline("Livelit: " ++ llname); - Node.div( - ~attrs=[Attr.class_("livelit")], - [Node.text("Livelit: " ++ llname)], + let args: list(UExp.t) = + switch (info.ci) { + | Some(InfoExp(exp)) => + print_endline("Livelit term: " ++ UExp.show(exp.term)); + let (term, _) = UExp.unwrap(exp.term); + switch (term) { + | Parens(args) => + switch (args.term) { + | Ap(_dir, _f, args) => + let (term, _) = UExp.unwrap(args); + switch (term) { + | Tuple(lst) => lst + | _ => [args] + }; + | _ => failwith("Not an Ap term") + } + | _ => failwith("Not an Ap term") + }; + | _ => failwith("Not an Ap term") + }; + + print_endline( + "Livelit args: " + ++ (args |> List.map(UExp.show) |> String.concat(", ")), ); + + // print_endline("Livelit syntax: " ++ debug); + switch (info.ci) { + | _ => + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("I am a livelit")], + ) + }; }; let focus = _ => (); }; diff --git a/src/haz3lweb/view/ProjectorView.re b/src/haz3lweb/view/ProjectorView.re index 5bfb9e4295..7d9071bfda 100644 --- a/src/haz3lweb/view/ProjectorView.re +++ b/src/haz3lweb/view/ProjectorView.re @@ -217,8 +217,8 @@ module Panel = { | Pat(Float) => [SliderF] | Exp(String) | Pat(String) => [TextArea] - | Exp(LivelitInvocation) - | Pat(LivelitInvocation) => [Livelit] + | Exp(Parens) + | Pat(Parens) => [Livelit] | _ => [] } ) From 6aca330ab02b772648d57c63275f2bcb98da70e8 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Fri, 8 Nov 2024 15:54:13 -0500 Subject: [PATCH 17/23] added mission-critical maze livelit --- browsertest/package.json | 3 +- browsertest/pnpm-lock.yaml | 4951 +++++++---------- browsertest/src/index.ts | 74 +- browsertest/src/utils.ts | 2 +- src/haz3lcore/statics/Statics.re | 1 - src/haz3lcore/tiles/Livelit.re | 899 ++- .../zipper/projectors/LivelitProj.re | 134 +- src/haz3lweb/www/style/projectors.css | 18 + 8 files changed, 3158 insertions(+), 2924 deletions(-) diff --git a/browsertest/package.json b/browsertest/package.json index d2f0f5e9be..6ac7e7b2a1 100644 --- a/browsertest/package.json +++ b/browsertest/package.json @@ -8,7 +8,7 @@ "dev:hazel": "cd .. && make serve", "execute:host": "npm run dev:hazel > /dev/null 2>&1 & tsc --outDir dist && cd dist && node src/index.js; kill -9 $(lsof -t -i:8000)", "execute": "tsc --outDir dist && cd dist && node src/index.js", - "test": "vitest", + "test": "vitest", "style": "prettier '**/*.ts' --write ." }, "keywords": [], @@ -19,6 +19,7 @@ "jsdom": "^25.0.1", "puppeteer": "^23.4.1", "puppeteer-screen-recorder": "^3.0.3", + "typescript": "^5.6.3", "vitest": "^2.1.1" }, "devDependencies": { diff --git a/browsertest/pnpm-lock.yaml b/browsertest/pnpm-lock.yaml index 74c10177e0..099c778dab 100644 --- a/browsertest/pnpm-lock.yaml +++ b/browsertest/pnpm-lock.yaml @@ -1,2996 +1,2225 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false importers: - .: - dependencies: - "@types/jsdom": - specifier: ^21.1.7 - version: 21.1.7 - jsdom: - specifier: ^25.0.1 - version: 25.0.1 - puppeteer: - specifier: ^23.4.1 - version: 23.4.1(typescript@5.6.2) - puppeteer-screen-recorder: - specifier: ^3.0.3 - version: 3.0.3(puppeteer@23.4.1(typescript@5.6.2)) - vitest: - specifier: ^2.1.1 - version: 2.1.1(@types/node@22.7.1)(jsdom@25.0.1) - devDependencies: - prettier: - specifier: ^3.3.3 - version: 3.3.3 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.1)(typescript@5.6.2) + + .: + dependencies: + '@types/jsdom': + specifier: ^21.1.7 + version: 21.1.7 + jsdom: + specifier: ^25.0.1 + version: 25.0.1 + puppeteer: + specifier: ^23.4.1 + version: 23.4.1(typescript@5.6.3) + puppeteer-screen-recorder: + specifier: ^3.0.3 + version: 3.0.3(puppeteer@23.4.1(typescript@5.6.3)) + typescript: + specifier: ^5.6.3 + version: 5.6.3 + vitest: + specifier: ^2.1.1 + version: 2.1.1(@types/node@22.7.1)(jsdom@25.0.1) + devDependencies: + prettier: + specifier: ^3.3.3 + version: 3.3.3 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.7.1)(typescript@5.6.3) packages: - "@babel/code-frame@7.24.7": - resolution: - { - integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-validator-identifier@7.24.7": - resolution: - { - integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==, - } - engines: { node: ">=6.9.0" } - - "@babel/highlight@7.24.7": - resolution: - { - integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==, - } - engines: { node: ">=6.9.0" } - - "@cspotcode/source-map-support@0.8.1": - resolution: - { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, - } - engines: { node: ">=12" } - - "@esbuild/aix-ppc64@0.21.5": - resolution: - { - integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, - } - engines: { node: ">=12" } - cpu: [ppc64] - os: [aix] - - "@esbuild/android-arm64@0.21.5": - resolution: - { - integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, - } - engines: { node: ">=12" } - cpu: [arm64] - os: [android] - - "@esbuild/android-arm@0.21.5": - resolution: - { - integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, - } - engines: { node: ">=12" } - cpu: [arm] - os: [android] - - "@esbuild/android-x64@0.21.5": - resolution: - { - integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [android] - - "@esbuild/darwin-arm64@0.21.5": - resolution: - { - integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, - } - engines: { node: ">=12" } - cpu: [arm64] - os: [darwin] - - "@esbuild/darwin-x64@0.21.5": - resolution: - { - integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [darwin] - - "@esbuild/freebsd-arm64@0.21.5": - resolution: - { - integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, - } - engines: { node: ">=12" } - cpu: [arm64] - os: [freebsd] - - "@esbuild/freebsd-x64@0.21.5": - resolution: - { - integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [freebsd] - - "@esbuild/linux-arm64@0.21.5": - resolution: - { - integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, - } - engines: { node: ">=12" } - cpu: [arm64] - os: [linux] - - "@esbuild/linux-arm@0.21.5": - resolution: - { - integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, - } - engines: { node: ">=12" } - cpu: [arm] - os: [linux] - - "@esbuild/linux-ia32@0.21.5": - resolution: - { - integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, - } - engines: { node: ">=12" } - cpu: [ia32] - os: [linux] - - "@esbuild/linux-loong64@0.21.5": - resolution: - { - integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, - } - engines: { node: ">=12" } - cpu: [loong64] - os: [linux] - - "@esbuild/linux-mips64el@0.21.5": - resolution: - { - integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, - } - engines: { node: ">=12" } - cpu: [mips64el] - os: [linux] - - "@esbuild/linux-ppc64@0.21.5": - resolution: - { - integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, - } - engines: { node: ">=12" } - cpu: [ppc64] - os: [linux] - - "@esbuild/linux-riscv64@0.21.5": - resolution: - { - integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, - } - engines: { node: ">=12" } - cpu: [riscv64] - os: [linux] - - "@esbuild/linux-s390x@0.21.5": - resolution: - { - integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, - } - engines: { node: ">=12" } - cpu: [s390x] - os: [linux] - - "@esbuild/linux-x64@0.21.5": - resolution: - { - integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [linux] - - "@esbuild/netbsd-x64@0.21.5": - resolution: - { - integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [netbsd] - - "@esbuild/openbsd-x64@0.21.5": - resolution: - { - integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [openbsd] - - "@esbuild/sunos-x64@0.21.5": - resolution: - { - integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [sunos] - - "@esbuild/win32-arm64@0.21.5": - resolution: - { - integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, - } - engines: { node: ">=12" } - cpu: [arm64] - os: [win32] - - "@esbuild/win32-ia32@0.21.5": - resolution: - { - integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, - } - engines: { node: ">=12" } - cpu: [ia32] - os: [win32] - - "@esbuild/win32-x64@0.21.5": - resolution: - { - integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, - } - engines: { node: ">=12" } - cpu: [x64] - os: [win32] - - "@ffmpeg-installer/darwin-arm64@4.1.5": - resolution: - { - integrity: sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==, - } - cpu: [arm64] - os: [darwin] - - "@ffmpeg-installer/darwin-x64@4.1.0": - resolution: - { - integrity: sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==, - } - cpu: [x64] - os: [darwin] - - "@ffmpeg-installer/ffmpeg@1.1.0": - resolution: - { - integrity: sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==, - } - - "@ffmpeg-installer/linux-arm64@4.1.4": - resolution: - { - integrity: sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==, - } - cpu: [arm64] - os: [linux] - - "@ffmpeg-installer/linux-arm@4.1.3": - resolution: - { - integrity: sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==, - } - cpu: [arm] - os: [linux] - - "@ffmpeg-installer/linux-ia32@4.1.0": - resolution: - { - integrity: sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==, - } - cpu: [ia32] - os: [linux] - - "@ffmpeg-installer/linux-x64@4.1.0": - resolution: - { - integrity: sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==, - } - cpu: [x64] - os: [linux] - - "@ffmpeg-installer/win32-ia32@4.1.0": - resolution: - { - integrity: sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==, - } - cpu: [ia32] - os: [win32] - - "@ffmpeg-installer/win32-x64@4.1.0": - resolution: - { - integrity: sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==, - } - cpu: [x64] - os: [win32] - - "@jridgewell/resolve-uri@3.1.2": - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: ">=6.0.0" } - - "@jridgewell/sourcemap-codec@1.5.0": - resolution: - { - integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, - } - - "@jridgewell/trace-mapping@0.3.9": - resolution: - { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, - } - - "@puppeteer/browsers@2.4.0": - resolution: - { - integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==, - } - engines: { node: ">=18" } - hasBin: true - - "@rollup/rollup-android-arm-eabi@4.23.0": - resolution: - { - integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==, - } - cpu: [arm] - os: [android] - - "@rollup/rollup-android-arm64@4.23.0": - resolution: - { - integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==, - } - cpu: [arm64] - os: [android] - - "@rollup/rollup-darwin-arm64@4.23.0": - resolution: - { - integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==, - } - cpu: [arm64] - os: [darwin] - - "@rollup/rollup-darwin-x64@4.23.0": - resolution: - { - integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==, - } - cpu: [x64] - os: [darwin] - - "@rollup/rollup-linux-arm-gnueabihf@4.23.0": - resolution: - { - integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==, - } - cpu: [arm] - os: [linux] - - "@rollup/rollup-linux-arm-musleabihf@4.23.0": - resolution: - { - integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==, - } - cpu: [arm] - os: [linux] - - "@rollup/rollup-linux-arm64-gnu@4.23.0": - resolution: - { - integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==, - } - cpu: [arm64] - os: [linux] - - "@rollup/rollup-linux-arm64-musl@4.23.0": - resolution: - { - integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==, - } - cpu: [arm64] - os: [linux] - - "@rollup/rollup-linux-powerpc64le-gnu@4.23.0": - resolution: - { - integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==, - } - cpu: [ppc64] - os: [linux] - - "@rollup/rollup-linux-riscv64-gnu@4.23.0": - resolution: - { - integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==, - } - cpu: [riscv64] - os: [linux] - - "@rollup/rollup-linux-s390x-gnu@4.23.0": - resolution: - { - integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==, - } - cpu: [s390x] - os: [linux] - - "@rollup/rollup-linux-x64-gnu@4.23.0": - resolution: - { - integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==, - } - cpu: [x64] - os: [linux] - - "@rollup/rollup-linux-x64-musl@4.23.0": - resolution: - { - integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==, - } - cpu: [x64] - os: [linux] - - "@rollup/rollup-win32-arm64-msvc@4.23.0": - resolution: - { - integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==, - } - cpu: [arm64] - os: [win32] - - "@rollup/rollup-win32-ia32-msvc@4.23.0": - resolution: - { - integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==, - } - cpu: [ia32] - os: [win32] - - "@rollup/rollup-win32-x64-msvc@4.23.0": - resolution: - { - integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==, - } - cpu: [x64] - os: [win32] - - "@tootallnate/quickjs-emscripten@0.23.0": - resolution: - { - integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, - } - - "@tsconfig/node10@1.0.11": - resolution: - { - integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==, - } - - "@tsconfig/node12@1.0.11": - resolution: - { - integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, - } - - "@tsconfig/node14@1.0.3": - resolution: - { - integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, - } - - "@tsconfig/node16@1.0.4": - resolution: - { - integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==, - } - - "@types/estree@1.0.6": - resolution: - { - integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, - } - - "@types/jsdom@21.1.7": - resolution: - { - integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==, - } - - "@types/node@22.7.1": - resolution: - { - integrity: sha512-adOMRLVmleuWs/5V/w5/l7o0chDK/az+5ncCsIapTKogsu/3MVWvSgP58qVTXi5IwpfGt8pMobNq9rOWtJyu5Q==, - } - - "@types/tough-cookie@4.0.5": - resolution: - { - integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==, - } - - "@types/yauzl@2.10.3": - resolution: - { - integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==, - } - - "@vitest/expect@2.1.1": - resolution: - { - integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==, - } - - "@vitest/mocker@2.1.1": - resolution: - { - integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==, - } - peerDependencies: - "@vitest/spy": 2.1.1 - msw: ^2.3.5 - vite: ^5.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - "@vitest/pretty-format@2.1.1": - resolution: - { - integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==, - } - - "@vitest/runner@2.1.1": - resolution: - { - integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==, - } - - "@vitest/snapshot@2.1.1": - resolution: - { - integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==, - } - - "@vitest/spy@2.1.1": - resolution: - { - integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==, - } - - "@vitest/utils@2.1.1": - resolution: - { - integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==, - } - - acorn-walk@8.3.4: - resolution: - { - integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, - } - engines: { node: ">=0.4.0" } - - acorn@8.12.1: - resolution: - { - integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==, - } - engines: { node: ">=0.4.0" } - hasBin: true - - agent-base@7.1.1: - resolution: - { - integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==, - } - engines: { node: ">= 14" } - - ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } - - ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: ">=4" } - - ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } - - arg@4.1.3: - resolution: - { - integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, - } - - argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } - - assertion-error@2.0.1: - resolution: - { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, - } - engines: { node: ">=12" } - - ast-types@0.13.4: - resolution: - { - integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, - } - engines: { node: ">=4" } - - async@0.2.10: - resolution: - { - integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==, - } - - asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } - - b4a@1.6.7: - resolution: - { - integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==, - } - - bare-events@2.5.0: - resolution: - { - integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==, - } - - bare-fs@2.3.5: - resolution: - { - integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==, - } - - bare-os@2.4.4: - resolution: - { - integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==, - } - - bare-path@2.1.3: - resolution: - { - integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==, - } - - bare-stream@2.3.0: - resolution: - { - integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==, - } - - base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, - } - - basic-ftp@5.0.5: - resolution: - { - integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, - } - engines: { node: ">=10.0.0" } - - buffer-crc32@0.2.13: - resolution: - { - integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, - } - - buffer@5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, - } - - cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: ">=8" } - - callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } - - chai@5.1.1: - resolution: - { - integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==, - } - engines: { node: ">=12" } - - chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: ">=4" } - - check-error@2.1.1: - resolution: - { - integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==, - } - engines: { node: ">= 16" } - - chromium-bidi@0.6.5: - resolution: - { - integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==, - } - peerDependencies: - devtools-protocol: "*" - - cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: ">=12" } - - color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } - - color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } - - color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } - - color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } - - combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: ">= 0.8" } - - cosmiconfig@9.0.0: - resolution: - { - integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, - } - engines: { node: ">=14" } - peerDependencies: - typescript: ">=4.9.5" - peerDependenciesMeta: - typescript: - optional: true - - create-require@1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, - } - - cssstyle@4.1.0: - resolution: - { - integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==, - } - engines: { node: ">=18" } - - data-uri-to-buffer@6.0.2: - resolution: - { - integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, - } - engines: { node: ">= 14" } - - data-urls@5.0.0: - resolution: - { - integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==, - } - engines: { node: ">=18" } - - debug@4.3.7: - resolution: - { - integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, - } - engines: { node: ">=6.0" } - peerDependencies: - supports-color: "*" - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.4.3: - resolution: - { - integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, - } - - deep-eql@5.0.2: - resolution: - { - integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, - } - engines: { node: ">=6" } - - degenerator@5.0.1: - resolution: - { - integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, - } - engines: { node: ">= 14" } - - delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: ">=0.4.0" } - - devtools-protocol@0.0.1342118: - resolution: - { - integrity: sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==, - } - - diff@4.0.2: - resolution: - { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, - } - engines: { node: ">=0.3.1" } - - emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } - - end-of-stream@1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, - } - - entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, - } - engines: { node: ">=0.12" } - - env-paths@2.2.1: - resolution: - { - integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, - } - engines: { node: ">=6" } - - error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } - - esbuild@0.21.5: - resolution: - { - integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, - } - engines: { node: ">=12" } - hasBin: true - - escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: ">=6" } - - escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: ">=0.8.0" } - - escodegen@2.1.0: - resolution: - { - integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, - } - engines: { node: ">=6.0" } - hasBin: true - - esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: ">=4" } - hasBin: true - - estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } - - estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } - - esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } - - extract-zip@2.0.1: - resolution: - { - integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, - } - engines: { node: ">= 10.17.0" } - hasBin: true - - fast-fifo@1.3.2: - resolution: - { - integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, - } - - fd-slicer@1.1.0: - resolution: - { - integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, - } - - fluent-ffmpeg@2.1.3: - resolution: - { - integrity: sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==, - } - engines: { node: ">=18" } - - form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, - } - engines: { node: ">= 6" } - - fs-extra@11.2.0: - resolution: - { - integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==, - } - engines: { node: ">=14.14" } - - fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - - get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } - - get-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, - } - - get-stream@5.2.0: - resolution: - { - integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, - } - engines: { node: ">=8" } - - get-uri@6.0.3: - resolution: - { - integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==, - } - engines: { node: ">= 14" } - - graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } - - has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: ">=4" } - - html-encoding-sniffer@4.0.0: - resolution: - { - integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==, - } - engines: { node: ">=18" } - - http-proxy-agent@7.0.2: - resolution: - { - integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, - } - engines: { node: ">= 14" } - - https-proxy-agent@7.0.5: - resolution: - { - integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==, - } - engines: { node: ">= 14" } - - iconv-lite@0.6.3: - resolution: - { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, - } - engines: { node: ">=0.10.0" } - - ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } - - import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: ">=6" } - - ip-address@9.0.5: - resolution: - { - integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==, - } - engines: { node: ">= 12" } - - is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } - - is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } - - is-potential-custom-element-name@1.0.1: - resolution: - { - integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, - } - - isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } - - js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } - - js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } - hasBin: true - - jsbn@1.1.0: - resolution: - { - integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==, - } - - jsdom@25.0.1: - resolution: - { - integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==, - } - engines: { node: ">=18" } - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - - json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } - - jsonfile@6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, - } - - lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } - - loupe@3.1.1: - resolution: - { - integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==, - } - - lru-cache@7.18.3: - resolution: - { - integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, - } - engines: { node: ">=12" } - - magic-string@0.30.11: - resolution: - { - integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==, - } - - make-error@1.3.6: - resolution: - { - integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, - } - - mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: ">= 0.6" } - - mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, - } - engines: { node: ">= 0.6" } - - mitt@3.0.1: - resolution: - { - integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, - } - - ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } - - nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true - - netmask@2.0.2: - resolution: - { - integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, - } - engines: { node: ">= 0.4.0" } - - nwsapi@2.2.13: - resolution: - { - integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==, - } - - once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } - - pac-proxy-agent@7.0.2: - resolution: - { - integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==, - } - engines: { node: ">= 14" } - - pac-resolver@7.0.1: - resolution: - { - integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, - } - engines: { node: ">= 14" } - - parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } - - parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: ">=8" } - - parse5@7.1.2: - resolution: - { - integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, - } - - pathe@1.1.2: - resolution: - { - integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, - } - - pathval@2.0.0: - resolution: - { - integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, - } - engines: { node: ">= 14.16" } - - pend@1.2.0: - resolution: - { - integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, - } - - picocolors@1.1.0: - resolution: - { - integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==, - } - - postcss@8.4.47: - resolution: - { - integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==, - } - engines: { node: ^10 || ^12 || >=14 } - - prettier@3.3.3: - resolution: - { - integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, - } - engines: { node: ">=14" } - hasBin: true - - progress@2.0.3: - resolution: - { - integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, - } - engines: { node: ">=0.4.0" } - - proxy-agent@6.4.0: - resolution: - { - integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==, - } - engines: { node: ">= 14" } - - proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } - - pump@3.0.2: - resolution: - { - integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==, - } - - punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } - - puppeteer-core@23.4.1: - resolution: - { - integrity: sha512-uCxGtn8VE9PlKhdFJX/zZySi9K3Ufr3qUZe28jxJoZUqiMJOi+SFh2zhiFDSjWqZIDkc0FtnaCC+rewW3MYXmg==, - } - engines: { node: ">=18" } - - puppeteer-screen-recorder@3.0.3: - resolution: - { - integrity: sha512-GelfCKMhKhSxMDR3MVEuGBmhtKqD8vOA7aMuhF7X99z9JoHo08rD4K7ilKn340nY1wG6AJkcxymeHVKtPs6jSw==, - } - engines: { node: ">=16" } - peerDependencies: - puppeteer: ">=19.0.0" - - puppeteer@23.4.1: - resolution: - { - integrity: sha512-+wWfWTkQ8L9IB/3OVGSUp37c0eQ5za/85KdX+LAq2wTZkMdocgYGMCs+/91e2f/RXIYzve4x/uGxN8zG2sj8+w==, - } - engines: { node: ">=18" } - hasBin: true - - queue-tick@1.0.1: - resolution: - { - integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==, - } - - require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } - - resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } - - rollup@4.23.0: - resolution: - { - integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } - hasBin: true - - rrweb-cssom@0.7.1: - resolution: - { - integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==, - } - - safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } - - saxes@6.0.0: - resolution: - { - integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, - } - engines: { node: ">=v12.22.7" } - - semver@7.6.3: - resolution: - { - integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, - } - engines: { node: ">=10" } - hasBin: true - - siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, - } - - smart-buffer@4.2.0: - resolution: - { - integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, - } - engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } - - socks-proxy-agent@8.0.4: - resolution: - { - integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==, - } - engines: { node: ">= 14" } - - socks@2.8.3: - resolution: - { - integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==, - } - engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } - - source-map-js@1.2.1: - resolution: - { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, - } - engines: { node: ">=0.10.0" } - - source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: ">=0.10.0" } - - sprintf-js@1.1.3: - resolution: - { - integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, - } - - stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, - } - - std-env@3.7.0: - resolution: - { - integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==, - } - - streamx@2.20.1: - resolution: - { - integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==, - } - - string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } - - strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } - - supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: ">=4" } - - symbol-tree@3.2.4: - resolution: - { - integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, - } - - tar-fs@3.0.6: - resolution: - { - integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==, - } - - tar-stream@3.1.7: - resolution: - { - integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, - } - - text-decoder@1.2.0: - resolution: - { - integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==, - } - - through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, - } - - tinybench@2.9.0: - resolution: - { - integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, - } - - tinyexec@0.3.0: - resolution: - { - integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==, - } - - tinypool@1.0.1: - resolution: - { - integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==, - } - engines: { node: ^18.0.0 || >=20.0.0 } - - tinyrainbow@1.2.0: - resolution: - { - integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, - } - engines: { node: ">=14.0.0" } - - tinyspy@3.0.2: - resolution: - { - integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, - } - engines: { node: ">=14.0.0" } - - tldts-core@6.1.48: - resolution: - { - integrity: sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==, - } - - tldts@6.1.48: - resolution: - { - integrity: sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==, - } - hasBin: true - - tough-cookie@5.0.0: - resolution: - { - integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==, - } - engines: { node: ">=16" } - - tr46@5.0.0: - resolution: - { - integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==, - } - engines: { node: ">=18" } - - ts-node@10.9.2: - resolution: - { - integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, - } - hasBin: true - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - - tslib@2.7.0: - resolution: - { - integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==, - } - - typed-query-selector@2.12.0: - resolution: - { - integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==, - } - - typescript@5.6.2: - resolution: - { - integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==, - } - engines: { node: ">=14.17" } - hasBin: true - - unbzip2-stream@1.4.3: - resolution: - { - integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, - } - - undici-types@6.19.8: - resolution: - { - integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, - } - - universalify@2.0.1: - resolution: - { - integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, - } - engines: { node: ">= 10.0.0" } - - urlpattern-polyfill@10.0.0: - resolution: - { - integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==, - } - - v8-compile-cache-lib@3.0.1: - resolution: - { - integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, - } - - vite-node@2.1.1: - resolution: - { - integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==, - } - engines: { node: ^18.0.0 || >=20.0.0 } - hasBin: true - - vite@5.4.8: - resolution: - { - integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==, - } - engines: { node: ^18.0.0 || >=20.0.0 } - hasBin: true - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitest@2.1.1: - resolution: - { - integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==, - } - engines: { node: ^18.0.0 || >=20.0.0 } - hasBin: true - peerDependencies: - "@edge-runtime/vm": "*" - "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 2.1.1 - "@vitest/ui": 2.1.1 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - w3c-xmlserializer@5.0.0: - resolution: - { - integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==, - } - engines: { node: ">=18" } - - webidl-conversions@7.0.0: - resolution: - { - integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==, - } - engines: { node: ">=12" } - - whatwg-encoding@3.1.1: - resolution: - { - integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==, - } - engines: { node: ">=18" } - - whatwg-mimetype@4.0.0: - resolution: - { - integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, - } - engines: { node: ">=18" } - - whatwg-url@14.0.0: - resolution: - { - integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==, - } - engines: { node: ">=18" } - - which@1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, - } - hasBin: true - - why-is-node-running@2.3.0: - resolution: - { - integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, - } - engines: { node: ">=8" } - hasBin: true - - wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } - - wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } - - ws@8.18.0: - resolution: - { - integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, - } - engines: { node: ">=10.0.0" } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@5.0.0: - resolution: - { - integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==, - } - engines: { node: ">=18" } - - xmlchars@2.2.0: - resolution: - { - integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, - } - - y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } - - yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } - - yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: ">=12" } - - yauzl@2.10.0: - resolution: - { - integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, - } - - yn@3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: ">=6" } - - zod@3.23.8: - resolution: - { - integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==, - } -snapshots: - "@babel/code-frame@7.24.7": - dependencies: - "@babel/highlight": 7.24.7 - picocolors: 1.1.0 + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@ffmpeg-installer/darwin-arm64@4.1.5': + resolution: {integrity: sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==} + cpu: [arm64] + os: [darwin] + + '@ffmpeg-installer/darwin-x64@4.1.0': + resolution: {integrity: sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==} + cpu: [x64] + os: [darwin] + + '@ffmpeg-installer/ffmpeg@1.1.0': + resolution: {integrity: sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==} + + '@ffmpeg-installer/linux-arm64@4.1.4': + resolution: {integrity: sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==} + cpu: [arm64] + os: [linux] + + '@ffmpeg-installer/linux-arm@4.1.3': + resolution: {integrity: sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==} + cpu: [arm] + os: [linux] + + '@ffmpeg-installer/linux-ia32@4.1.0': + resolution: {integrity: sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==} + cpu: [ia32] + os: [linux] + + '@ffmpeg-installer/linux-x64@4.1.0': + resolution: {integrity: sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==} + cpu: [x64] + os: [linux] + + '@ffmpeg-installer/win32-ia32@4.1.0': + resolution: {integrity: sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==} + cpu: [ia32] + os: [win32] + + '@ffmpeg-installer/win32-x64@4.1.0': + resolution: {integrity: sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==} + cpu: [x64] + os: [win32] + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@puppeteer/browsers@2.4.0': + resolution: {integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==} + engines: {node: '>=18'} + hasBin: true + + '@rollup/rollup-android-arm-eabi@4.23.0': + resolution: {integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.23.0': + resolution: {integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.23.0': + resolution: {integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.23.0': + resolution: {integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.23.0': + resolution: {integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.23.0': + resolution: {integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.23.0': + resolution: {integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.23.0': + resolution: {integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': + resolution: {integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.23.0': + resolution: {integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.23.0': + resolution: {integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.23.0': + resolution: {integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.23.0': + resolution: {integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.23.0': + resolution: {integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.23.0': + resolution: {integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.23.0': + resolution: {integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==} + cpu: [x64] + os: [win32] + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/jsdom@21.1.7': + resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + + '@types/node@22.7.1': + resolution: {integrity: sha512-adOMRLVmleuWs/5V/w5/l7o0chDK/az+5ncCsIapTKogsu/3MVWvSgP58qVTXi5IwpfGt8pMobNq9rOWtJyu5Q==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@vitest/expect@2.1.1': + resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + + '@vitest/mocker@2.1.1': + resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + peerDependencies: + '@vitest/spy': 2.1.1 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - "@babel/helper-validator-identifier@7.24.7": {} + '@vitest/pretty-format@2.1.1': + resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} - "@babel/highlight@7.24.7": - dependencies: - "@babel/helper-validator-identifier": 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 + '@vitest/runner@2.1.1': + resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} - "@cspotcode/source-map-support@0.8.1": - dependencies: - "@jridgewell/trace-mapping": 0.3.9 + '@vitest/snapshot@2.1.1': + resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} - "@esbuild/aix-ppc64@0.21.5": - optional: true + '@vitest/spy@2.1.1': + resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} - "@esbuild/android-arm64@0.21.5": - optional: true + '@vitest/utils@2.1.1': + resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} - "@esbuild/android-arm@0.21.5": - optional: true + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} - "@esbuild/android-x64@0.21.5": - optional: true + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true - "@esbuild/darwin-arm64@0.21.5": - optional: true + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} - "@esbuild/darwin-x64@0.21.5": - optional: true + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - "@esbuild/freebsd-arm64@0.21.5": - optional: true + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} - "@esbuild/freebsd-x64@0.21.5": - optional: true + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - "@esbuild/linux-arm64@0.21.5": - optional: true + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - "@esbuild/linux-arm@0.21.5": - optional: true + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - "@esbuild/linux-ia32@0.21.5": - optional: true + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} - "@esbuild/linux-loong64@0.21.5": - optional: true + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} - "@esbuild/linux-mips64el@0.21.5": - optional: true + async@0.2.10: + resolution: {integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==} - "@esbuild/linux-ppc64@0.21.5": - optional: true + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - "@esbuild/linux-riscv64@0.21.5": - optional: true + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - "@esbuild/linux-s390x@0.21.5": - optional: true + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} - "@esbuild/linux-x64@0.21.5": - optional: true + bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} - "@esbuild/netbsd-x64@0.21.5": - optional: true + bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} - "@esbuild/openbsd-x64@0.21.5": - optional: true + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - "@esbuild/sunos-x64@0.21.5": - optional: true + bare-stream@2.3.0: + resolution: {integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==} - "@esbuild/win32-arm64@0.21.5": - optional: true + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - "@esbuild/win32-ia32@0.21.5": - optional: true + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} - "@esbuild/win32-x64@0.21.5": - optional: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - "@ffmpeg-installer/darwin-arm64@4.1.5": - optional: true + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - "@ffmpeg-installer/darwin-x64@4.1.0": - optional: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} - "@ffmpeg-installer/ffmpeg@1.1.0": - optionalDependencies: - "@ffmpeg-installer/darwin-arm64": 4.1.5 - "@ffmpeg-installer/darwin-x64": 4.1.0 - "@ffmpeg-installer/linux-arm": 4.1.3 - "@ffmpeg-installer/linux-arm64": 4.1.4 - "@ffmpeg-installer/linux-ia32": 4.1.0 - "@ffmpeg-installer/linux-x64": 4.1.0 - "@ffmpeg-installer/win32-ia32": 4.1.0 - "@ffmpeg-installer/win32-x64": 4.1.0 - optional: true + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} - "@ffmpeg-installer/linux-arm64@4.1.4": - optional: true + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} - "@ffmpeg-installer/linux-arm@4.1.3": - optional: true + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} - "@ffmpeg-installer/linux-ia32@4.1.0": - optional: true + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} - "@ffmpeg-installer/linux-x64@4.1.0": - optional: true + chromium-bidi@0.6.5: + resolution: {integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==} + peerDependencies: + devtools-protocol: '*' - "@ffmpeg-installer/win32-ia32@4.1.0": - optional: true + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} - "@ffmpeg-installer/win32-x64@4.1.0": - optional: true + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - "@jridgewell/resolve-uri@3.1.2": {} - - "@jridgewell/sourcemap-codec@1.5.0": {} - - "@jridgewell/trace-mapping@0.3.9": - dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.5.0 - - "@puppeteer/browsers@2.4.0": - dependencies: - debug: 4.3.7 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.4.0 - semver: 7.6.3 - tar-fs: 3.0.6 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - "@rollup/rollup-android-arm-eabi@4.23.0": - optional: true + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} - "@rollup/rollup-android-arm64@4.23.0": - optional: true + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - "@rollup/rollup-darwin-arm64@4.23.0": - optional: true + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - "@rollup/rollup-darwin-x64@4.23.0": - optional: true + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} - "@rollup/rollup-linux-arm-gnueabihf@4.23.0": + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: optional: true - "@rollup/rollup-linux-arm-musleabihf@4.23.0": - optional: true + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - "@rollup/rollup-linux-arm64-gnu@4.23.0": - optional: true + cssstyle@4.1.0: + resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} + engines: {node: '>=18'} - "@rollup/rollup-linux-arm64-musl@4.23.0": - optional: true + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} - "@rollup/rollup-linux-powerpc64le-gnu@4.23.0": - optional: true + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} - "@rollup/rollup-linux-riscv64-gnu@4.23.0": + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: optional: true - "@rollup/rollup-linux-s390x-gnu@4.23.0": - optional: true + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - "@rollup/rollup-linux-x64-gnu@4.23.0": - optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} - "@rollup/rollup-linux-x64-musl@4.23.0": - optional: true + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} - "@rollup/rollup-win32-arm64-msvc@4.23.0": - optional: true + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} - "@rollup/rollup-win32-ia32-msvc@4.23.0": - optional: true + devtools-protocol@0.0.1342118: + resolution: {integrity: sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==} - "@rollup/rollup-win32-x64-msvc@4.23.0": - optional: true + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} - "@tootallnate/quickjs-emscripten@0.23.0": {} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - "@tsconfig/node10@1.0.11": {} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - "@tsconfig/node12@1.0.11": {} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} - "@tsconfig/node14@1.0.3": {} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} - "@tsconfig/node16@1.0.4": {} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - "@types/estree@1.0.6": {} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true - "@types/jsdom@21.1.7": - dependencies: - "@types/node": 22.7.1 - "@types/tough-cookie": 4.0.5 - parse5: 7.1.2 + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - "@types/node@22.7.1": - dependencies: - undici-types: 6.19.8 + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} - "@types/tough-cookie@4.0.5": {} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true - "@types/yauzl@2.10.3": - dependencies: - "@types/node": 22.7.1 - optional: true + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fluent-ffmpeg@2.1.3: + resolution: {integrity: sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==} + engines: {node: '>=18'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} - "@vitest/expect@2.1.1": - dependencies: - "@vitest/spy": 2.1.1 - "@vitest/utils": 2.1.1 - chai: 5.1.1 - tinyrainbow: 1.2.0 + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} - "@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1))": - dependencies: - "@vitest/spy": 2.1.1 - estree-walker: 3.0.3 - magic-string: 0.30.11 - optionalDependencies: - vite: 5.4.8(@types/node@22.7.1) + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - "@vitest/pretty-format@2.1.1": - dependencies: - tinyrainbow: 1.2.0 + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} - "@vitest/runner@2.1.1": - dependencies: - "@vitest/utils": 2.1.1 - pathe: 1.1.2 + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - "@vitest/snapshot@2.1.1": - dependencies: - "@vitest/pretty-format": 2.1.1 - magic-string: 0.30.11 - pathe: 1.1.2 + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} - "@vitest/spy@2.1.1": - dependencies: - tinyspy: 3.0.2 + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} - "@vitest/utils@2.1.1": - dependencies: - "@vitest/pretty-format": 2.1.1 - loupe: 3.1.1 - tinyrainbow: 1.2.0 + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - acorn-walk@8.3.4: - dependencies: - acorn: 8.12.1 + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} - acorn@8.12.1: {} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} - agent-base@7.1.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} - ansi-regex@5.0.1: {} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - arg@4.1.3: {} + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} - argparse@2.0.1: {} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} - assertion-error@2.0.1: {} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - ast-types@0.13.4: - dependencies: - tslib: 2.7.0 + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} - async@0.2.10: {} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - asynckit@0.4.0: {} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - b4a@1.6.7: {} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - bare-events@2.5.0: + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: optional: true - bare-fs@2.3.5: - dependencies: - bare-events: 2.5.0 - bare-path: 2.1.3 - bare-stream: 2.3.0 + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + puppeteer-core@23.4.1: + resolution: {integrity: sha512-uCxGtn8VE9PlKhdFJX/zZySi9K3Ufr3qUZe28jxJoZUqiMJOi+SFh2zhiFDSjWqZIDkc0FtnaCC+rewW3MYXmg==} + engines: {node: '>=18'} + + puppeteer-screen-recorder@3.0.3: + resolution: {integrity: sha512-GelfCKMhKhSxMDR3MVEuGBmhtKqD8vOA7aMuhF7X99z9JoHo08rD4K7ilKn340nY1wG6AJkcxymeHVKtPs6jSw==} + engines: {node: '>=16'} + peerDependencies: + puppeteer: '>=19.0.0' + + puppeteer@23.4.1: + resolution: {integrity: sha512-+wWfWTkQ8L9IB/3OVGSUp37c0eQ5za/85KdX+LAq2wTZkMdocgYGMCs+/91e2f/RXIYzve4x/uGxN8zG2sj8+w==} + engines: {node: '>=18'} + hasBin: true + + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + rollup@4.23.0: + resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.0: + resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.48: + resolution: {integrity: sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==} + + tldts@6.1.48: + resolution: {integrity: sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==} + hasBin: true + + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': optional: true - bare-os@2.4.4: + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vite-node@2.1.1: + resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: optional: true - bare-path@2.1.3: - dependencies: - bare-os: 2.4.4 + vitest@2.1.1: + resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.1 + '@vitest/ui': 2.1.1 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: optional: true - bare-stream@2.3.0: - dependencies: - b4a: 1.6.7 - streamx: 2.20.1 + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: optional: true - base64-js@1.5.1: {} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} - basic-ftp@5.0.5: {} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - buffer-crc32@0.2.13: {} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} - cac@6.7.14: {} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} - callsites@3.1.0: {} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - chai@5.1.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.1 - pathval: 2.0.0 + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - check-error@2.1.1: {} +snapshots: - chromium-bidi@0.6.5(devtools-protocol@0.0.1342118): - dependencies: - devtools-protocol: 0.0.1342118 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - zod: 3.23.8 + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + '@babel/helper-validator-identifier@7.24.7': {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 - color-name@1.1.4: {} + '@esbuild/aix-ppc64@0.21.5': + optional: true - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 + '@esbuild/android-arm64@0.21.5': + optional: true - cosmiconfig@9.0.0(typescript@5.6.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.6.2 + '@esbuild/android-arm@0.21.5': + optional: true - create-require@1.1.1: {} - - cssstyle@4.1.0: - dependencies: - rrweb-cssom: 0.7.1 - - data-uri-to-buffer@6.0.2: {} + '@esbuild/android-x64@0.21.5': + optional: true - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 + '@esbuild/darwin-arm64@0.21.5': + optional: true - debug@4.3.7: - dependencies: - ms: 2.1.3 + '@esbuild/darwin-x64@0.21.5': + optional: true - decimal.js@10.4.3: {} - - deep-eql@5.0.2: {} - - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - delayed-stream@1.0.0: {} - - devtools-protocol@0.0.1342118: {} - - diff@4.0.2: {} - - emoji-regex@8.0.0: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - entities@4.5.0: {} - - env-paths@2.2.1: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - esbuild@0.21.5: - optionalDependencies: - "@esbuild/aix-ppc64": 0.21.5 - "@esbuild/android-arm": 0.21.5 - "@esbuild/android-arm64": 0.21.5 - "@esbuild/android-x64": 0.21.5 - "@esbuild/darwin-arm64": 0.21.5 - "@esbuild/darwin-x64": 0.21.5 - "@esbuild/freebsd-arm64": 0.21.5 - "@esbuild/freebsd-x64": 0.21.5 - "@esbuild/linux-arm": 0.21.5 - "@esbuild/linux-arm64": 0.21.5 - "@esbuild/linux-ia32": 0.21.5 - "@esbuild/linux-loong64": 0.21.5 - "@esbuild/linux-mips64el": 0.21.5 - "@esbuild/linux-ppc64": 0.21.5 - "@esbuild/linux-riscv64": 0.21.5 - "@esbuild/linux-s390x": 0.21.5 - "@esbuild/linux-x64": 0.21.5 - "@esbuild/netbsd-x64": 0.21.5 - "@esbuild/openbsd-x64": 0.21.5 - "@esbuild/sunos-x64": 0.21.5 - "@esbuild/win32-arm64": 0.21.5 - "@esbuild/win32-ia32": 0.21.5 - "@esbuild/win32-x64": 0.21.5 - - escalade@3.2.0: {} - - escape-string-regexp@1.0.5: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-walker@3.0.3: - dependencies: - "@types/estree": 1.0.6 - - esutils@2.0.3: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.3.7 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - "@types/yauzl": 2.10.3 - transitivePeerDependencies: - - supports-color - - fast-fifo@1.3.2: {} - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fluent-ffmpeg@2.1.3: - dependencies: - async: 0.2.10 - which: 1.3.1 - - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - fs-extra@11.2.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fsevents@2.3.3: - optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true - get-caller-file@2.0.5: {} - - get-func-name@2.0.2: {} - - get-stream@5.2.0: - dependencies: - pump: 3.0.2 - - get-uri@6.0.3: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.3.7 - fs-extra: 11.2.0 - transitivePeerDependencies: - - supports-color - - graceful-fs@4.2.11: {} - - has-flag@3.0.0: {} - - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + '@esbuild/freebsd-x64@0.21.5': + optional: true - https-proxy-agent@7.0.5: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + '@esbuild/linux-arm64@0.21.5': + optional: true - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 + '@esbuild/linux-arm@0.21.5': + optional: true - ieee754@1.2.1: {} + '@esbuild/linux-ia32@0.21.5': + optional: true - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + '@esbuild/linux-loong64@0.21.5': + optional: true - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - - is-arrayish@0.2.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsbn@1.1.0: {} - - jsdom@25.0.1: - dependencies: - cssstyle: 4.1.0 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 - parse5: 7.1.2 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.0.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.18.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - json-parse-even-better-errors@2.3.1: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - lines-and-columns@1.2.4: {} - - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 - - lru-cache@7.18.3: {} - - magic-string@0.30.11: - dependencies: - "@jridgewell/sourcemap-codec": 1.5.0 - - make-error@1.3.6: {} - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mitt@3.0.1: {} - - ms@2.1.3: {} - - nanoid@3.3.7: {} - - netmask@2.0.2: {} - - nwsapi@2.2.13: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - pac-proxy-agent@7.0.2: - dependencies: - "@tootallnate/quickjs-emscripten": 0.23.0 - agent-base: 7.1.1 - debug: 4.3.7 - get-uri: 6.0.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.4 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - "@babel/code-frame": 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse5@7.1.2: - dependencies: - entities: 4.5.0 - - pathe@1.1.2: {} - - pathval@2.0.0: {} - - pend@1.2.0: {} - - picocolors@1.1.0: {} - - postcss@8.4.47: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.0 - source-map-js: 1.2.1 - - prettier@3.3.3: {} - - progress@2.0.3: {} - - proxy-agent@6.4.0: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - lru-cache: 7.18.3 - pac-proxy-agent: 7.0.2 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.4 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - - punycode@2.3.1: {} - - puppeteer-core@23.4.1: - dependencies: - "@puppeteer/browsers": 2.4.0 - chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) - debug: 4.3.7 - devtools-protocol: 0.0.1342118 - typed-query-selector: 2.12.0 - ws: 8.18.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - puppeteer-screen-recorder@3.0.3(puppeteer@23.4.1(typescript@5.6.2)): - dependencies: - fluent-ffmpeg: 2.1.3 - puppeteer: 23.4.1(typescript@5.6.2) - optionalDependencies: - "@ffmpeg-installer/ffmpeg": 1.1.0 - - puppeteer@23.4.1(typescript@5.6.2): - dependencies: - "@puppeteer/browsers": 2.4.0 - chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) - cosmiconfig: 9.0.0(typescript@5.6.2) - devtools-protocol: 0.0.1342118 - puppeteer-core: 23.4.1 - typed-query-selector: 2.12.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - queue-tick@1.0.1: {} - - require-directory@2.1.1: {} - - resolve-from@4.0.0: {} - - rollup@4.23.0: - dependencies: - "@types/estree": 1.0.6 - optionalDependencies: - "@rollup/rollup-android-arm-eabi": 4.23.0 - "@rollup/rollup-android-arm64": 4.23.0 - "@rollup/rollup-darwin-arm64": 4.23.0 - "@rollup/rollup-darwin-x64": 4.23.0 - "@rollup/rollup-linux-arm-gnueabihf": 4.23.0 - "@rollup/rollup-linux-arm-musleabihf": 4.23.0 - "@rollup/rollup-linux-arm64-gnu": 4.23.0 - "@rollup/rollup-linux-arm64-musl": 4.23.0 - "@rollup/rollup-linux-powerpc64le-gnu": 4.23.0 - "@rollup/rollup-linux-riscv64-gnu": 4.23.0 - "@rollup/rollup-linux-s390x-gnu": 4.23.0 - "@rollup/rollup-linux-x64-gnu": 4.23.0 - "@rollup/rollup-linux-x64-musl": 4.23.0 - "@rollup/rollup-win32-arm64-msvc": 4.23.0 - "@rollup/rollup-win32-ia32-msvc": 4.23.0 - "@rollup/rollup-win32-x64-msvc": 4.23.0 - fsevents: 2.3.3 - - rrweb-cssom@0.7.1: {} - - safer-buffer@2.1.2: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - semver@7.6.3: {} - - siginfo@2.0.0: {} - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.4: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - socks: 2.8.3 - transitivePeerDependencies: - - supports-color - - socks@2.8.3: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map@0.6.1: - optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@ffmpeg-installer/darwin-arm64@4.1.5': + optional: true + + '@ffmpeg-installer/darwin-x64@4.1.0': + optional: true + + '@ffmpeg-installer/ffmpeg@1.1.0': + optionalDependencies: + '@ffmpeg-installer/darwin-arm64': 4.1.5 + '@ffmpeg-installer/darwin-x64': 4.1.0 + '@ffmpeg-installer/linux-arm': 4.1.3 + '@ffmpeg-installer/linux-arm64': 4.1.4 + '@ffmpeg-installer/linux-ia32': 4.1.0 + '@ffmpeg-installer/linux-x64': 4.1.0 + '@ffmpeg-installer/win32-ia32': 4.1.0 + '@ffmpeg-installer/win32-x64': 4.1.0 + optional: true + + '@ffmpeg-installer/linux-arm64@4.1.4': + optional: true + + '@ffmpeg-installer/linux-arm@4.1.3': + optional: true + + '@ffmpeg-installer/linux-ia32@4.1.0': + optional: true + + '@ffmpeg-installer/linux-x64@4.1.0': + optional: true + + '@ffmpeg-installer/win32-ia32@4.1.0': + optional: true + + '@ffmpeg-installer/win32-x64@4.1.0': + optional: true + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@puppeteer/browsers@2.4.0': + dependencies: + debug: 4.3.7 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.3 + tar-fs: 3.0.6 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@rollup/rollup-android-arm-eabi@4.23.0': + optional: true + + '@rollup/rollup-android-arm64@4.23.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.23.0': + optional: true + + '@rollup/rollup-darwin-x64@4.23.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.23.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.23.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.23.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.23.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.23.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.23.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.23.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.23.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.23.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.23.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.23.0': + optional: true + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/estree@1.0.6': {} + + '@types/jsdom@21.1.7': + dependencies: + '@types/node': 22.7.1 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + + '@types/node@22.7.1': + dependencies: + undici-types: 6.19.8 + + '@types/tough-cookie@4.0.5': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.7.1 + optional: true + + '@vitest/expect@2.1.1': + dependencies: + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1))': + dependencies: + '@vitest/spy': 2.1.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.8(@types/node@22.7.1) + + '@vitest/pretty-format@2.1.1': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.1': + dependencies: + '@vitest/utils': 2.1.1 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + magic-string: 0.30.11 + pathe: 1.1.2 + + '@vitest/spy@2.1.1': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + agent-base@7.1.1: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + assertion-error@2.0.1: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.7.0 + + async@0.2.10: {} + + asynckit@0.4.0: {} + + b4a@1.6.7: {} + + bare-events@2.5.0: + optional: true + + bare-fs@2.3.5: + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.3.0 + optional: true + + bare-os@2.4.4: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.4.4 + optional: true + + bare-stream@2.3.0: + dependencies: + b4a: 1.6.7 + streamx: 2.20.1 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + check-error@2.1.1: {} + + chromium-bidi@0.6.5(devtools-protocol@0.0.1342118): + dependencies: + devtools-protocol: 0.0.1342118 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 - sprintf-js@1.1.3: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - stackback@0.0.2: {} + color-name@1.1.3: {} - std-env@3.7.0: {} + color-name@1.1.4: {} - streamx@2.20.1: - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - text-decoder: 1.2.0 - optionalDependencies: - bare-events: 2.5.0 + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + cosmiconfig@9.0.0(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 + create-require@1.1.1: {} + + cssstyle@4.1.0: + dependencies: + rrweb-cssom: 0.7.1 + + data-uri-to-buffer@6.0.2: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: {} + + deep-eql@5.0.2: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + devtools-protocol@0.0.1342118: {} + + diff@4.0.2: {} + + emoji-regex@8.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + esutils@2.0.3: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.3.7 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 + fast-fifo@1.3.2: {} + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fluent-ffmpeg@2.1.3: + dependencies: + async: 0.2.10 + which: 1.3.1 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-uri@6.0.3: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color - symbol-tree@3.2.4: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 - tar-fs@3.0.6: - dependencies: - pump: 3.0.2 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 2.3.5 - bare-path: 2.1.3 - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.20.1 - - text-decoder@1.2.0: - dependencies: - b4a: 1.6.7 - - through@2.3.8: {} - - tinybench@2.9.0: {} - - tinyexec@0.3.0: {} - - tinypool@1.0.1: {} - - tinyrainbow@1.2.0: {} - - tinyspy@3.0.2: {} - - tldts-core@6.1.48: {} - - tldts@6.1.48: - dependencies: - tldts-core: 6.1.48 - - tough-cookie@5.0.0: - dependencies: - tldts: 6.1.48 - - tr46@5.0.0: - dependencies: - punycode: 2.3.1 - - ts-node@10.9.2(@types/node@22.7.1)(typescript@5.6.2): - dependencies: - "@cspotcode/source-map-support": 0.8.1 - "@tsconfig/node10": 1.0.11 - "@tsconfig/node12": 1.0.11 - "@tsconfig/node14": 1.0.3 - "@tsconfig/node16": 1.0.4 - "@types/node": 22.7.1 - acorn: 8.12.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.6.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - tslib@2.7.0: {} - - typed-query-selector@2.12.0: {} - - typescript@5.6.2: {} - - unbzip2-stream@1.4.3: - dependencies: - buffer: 5.7.1 - through: 2.3.8 - - undici-types@6.19.8: {} - - universalify@2.0.1: {} - - urlpattern-polyfill@10.0.0: {} - - v8-compile-cache-lib@3.0.1: {} - - vite-node@2.1.1(@types/node@22.7.1): - dependencies: - cac: 6.7.14 - debug: 4.3.7 - pathe: 1.1.2 - vite: 5.4.8(@types/node@22.7.1) - transitivePeerDependencies: - - "@types/node" - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.8(@types/node@22.7.1): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.23.0 - optionalDependencies: - "@types/node": 22.7.1 - fsevents: 2.3.3 - - vitest@2.1.1(@types/node@22.7.1)(jsdom@25.0.1): - dependencies: - "@vitest/expect": 2.1.1 - "@vitest/mocker": 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1)) - "@vitest/pretty-format": 2.1.1 - "@vitest/runner": 2.1.1 - "@vitest/snapshot": 2.1.1 - "@vitest/spy": 2.1.1 - "@vitest/utils": 2.1.1 - chai: 5.1.1 - debug: 4.3.7 - magic-string: 0.30.11 - pathe: 1.1.2 - std-env: 3.7.0 - tinybench: 2.9.0 - tinyexec: 0.3.0 - tinypool: 1.0.1 - tinyrainbow: 1.2.0 - vite: 5.4.8(@types/node@22.7.1) - vite-node: 2.1.1(@types/node@22.7.1) - why-is-node-running: 2.3.0 - optionalDependencies: - "@types/node": 22.7.1 - jsdom: 25.0.1 - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - - webidl-conversions@7.0.0: {} - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - whatwg-url@14.0.0: - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 - - which@1.3.1: - dependencies: - isexe: 2.0.0 - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - ws@8.18.0: {} - - xml-name-validator@5.0.0: {} - - xmlchars@2.2.0: {} - - y18n@5.0.8: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yn@3.1.1: {} - - zod@3.23.8: {} + ieee754@1.2.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-arrayish@0.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsdom@25.0.1: + dependencies: + cssstyle: 4.1.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.13 + parse5: 7.1.2 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.18.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + json-parse-even-better-errors@2.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + lines-and-columns@1.2.4: {} + + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + + lru-cache@7.18.3: {} + + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-error@1.3.6: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mitt@3.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + netmask@2.0.2: {} + + nwsapi@2.2.13: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + pac-proxy-agent@7.0.2: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.7 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + pathe@1.1.2: {} + + pathval@2.0.0: {} + + pend@1.2.0: {} + + picocolors@1.1.0: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + prettier@3.3.3: {} + + progress@2.0.3: {} + + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + puppeteer-core@23.4.1: + dependencies: + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) + debug: 4.3.7 + devtools-protocol: 0.0.1342118 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + puppeteer-screen-recorder@3.0.3(puppeteer@23.4.1(typescript@5.6.3)): + dependencies: + fluent-ffmpeg: 2.1.3 + puppeteer: 23.4.1(typescript@5.6.3) + optionalDependencies: + '@ffmpeg-installer/ffmpeg': 1.1.0 + + puppeteer@23.4.1(typescript@5.6.3): + dependencies: + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1342118) + cosmiconfig: 9.0.0(typescript@5.6.3) + devtools-protocol: 0.0.1342118 + puppeteer-core: 23.4.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + + queue-tick@1.0.1: {} + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + rollup@4.23.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.23.0 + '@rollup/rollup-android-arm64': 4.23.0 + '@rollup/rollup-darwin-arm64': 4.23.0 + '@rollup/rollup-darwin-x64': 4.23.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.23.0 + '@rollup/rollup-linux-arm-musleabihf': 4.23.0 + '@rollup/rollup-linux-arm64-gnu': 4.23.0 + '@rollup/rollup-linux-arm64-musl': 4.23.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.23.0 + '@rollup/rollup-linux-riscv64-gnu': 4.23.0 + '@rollup/rollup-linux-s390x-gnu': 4.23.0 + '@rollup/rollup-linux-x64-gnu': 4.23.0 + '@rollup/rollup-linux-x64-musl': 4.23.0 + '@rollup/rollup-win32-arm64-msvc': 4.23.0 + '@rollup/rollup-win32-ia32-msvc': 4.23.0 + '@rollup/rollup-win32-x64-msvc': 4.23.0 + fsevents: 2.3.3 + + rrweb-cssom@0.7.1: {} + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + semver@7.6.3: {} + + siginfo@2.0.0: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + sprintf-js@1.1.3: {} + + stackback@0.0.2: {} + + std-env@3.7.0: {} + + streamx@2.20.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.0 + optionalDependencies: + bare-events: 2.5.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + symbol-tree@3.2.4: {} + + tar-fs@3.0.6: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 + + text-decoder@1.2.0: + dependencies: + b4a: 1.6.7 + + through@2.3.8: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.0: {} + + tinypool@1.0.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tldts-core@6.1.48: {} + + tldts@6.1.48: + dependencies: + tldts-core: 6.1.48 + + tough-cookie@5.0.0: + dependencies: + tldts: 6.1.48 + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + ts-node@10.9.2(@types/node@22.7.1)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.7.1 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@2.7.0: {} + + typed-query-selector@2.12.0: {} + + typescript@5.6.3: {} + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + undici-types@6.19.8: {} + + universalify@2.0.1: {} + + urlpattern-polyfill@10.0.0: {} + + v8-compile-cache-lib@3.0.1: {} + + vite-node@2.1.1(@types/node@22.7.1): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + vite: 5.4.8(@types/node@22.7.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.8(@types/node@22.7.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.23.0 + optionalDependencies: + '@types/node': 22.7.1 + fsevents: 2.3.3 + + vitest@2.1.1(@types/node@22.7.1)(jsdom@25.0.1): + dependencies: + '@vitest/expect': 2.1.1 + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.1)) + '@vitest/pretty-format': 2.1.1 + '@vitest/runner': 2.1.1 + '@vitest/snapshot': 2.1.1 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.7.1) + vite-node: 2.1.1(@types/node@22.7.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.7.1 + jsdom: 25.0.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: {} + + zod@3.23.8: {} diff --git a/browsertest/src/index.ts b/browsertest/src/index.ts index 628407a523..9306a98cd4 100644 --- a/browsertest/src/index.ts +++ b/browsertest/src/index.ts @@ -13,7 +13,7 @@ const RecorderConfig = { fps: 60, videoFrame: { width: 1024, - height: 1024, + height: 512, }, videoCrf: 18, videoCodec: "libx264", @@ -134,6 +134,18 @@ class Cell { } } + async cursorToEnd() { + // press right arrow key until cursor reaches end + const codeContainer = await this.elementHandle.$( + ".code-container .code-text", + ); + if (!codeContainer) throw new Error("Code container not found"); + + for (let i = 0; i < 50; i++) { + await codeContainer.press("ArrowRight"); + } + } + async clickQuery(query: string) { const codeContainer = await this.elementHandle.$( ".code-container .code-text", @@ -143,7 +155,6 @@ class Cell { const html = await codeContainer.evaluate((el) => el.innerHTML); console.log("html:", html); const span = findSpanByQuery(html, query); - //findSpanByQuery(await codeContainer.evaluate(el => el.children[0].innerHTML, query), query); if (span) { await span.click(); @@ -154,20 +165,18 @@ class Cell { } class HazelController { - private browser: Browser | null = null; + browser: Browser | null = null; private recorder: PuppeteerScreenRecorder | null = null; page: Page | null = null; async launch(url: string, record = false) { - this.browser = await puppeteer.launch({ headless: true }); - // set resolution + this.browser = await puppeteer.launch({ headless: false }); this.page = (await this.browser.pages().then((pages) => pages[0])) || (await this.browser.newPage()); - await this.page.setViewport({ width: 1024, height: 1024 }); + await this.page.setViewport({ width: 1024, height: 512 }); await this.page.goto(url); - // wait for class "loading" to disappear await this.page?.waitForFunction(() => { const loading = document.querySelector(".loading"); return !loading; @@ -192,7 +201,6 @@ class HazelController { async selectMode(mode: string) { await this.page?.select("#editor-mode select", mode); - // wait until id="main" has the class that matches the mode await this.page?.waitForFunction( (mode) => { const main = document.getElementById("main"); @@ -203,6 +211,21 @@ class HazelController { ); } + async setProjectorMode(mode: string) { + console.log("Setting projector mode to", mode); + await this.page?.select("#projectors select", mode); + } + + async enableProjector() { + console.log("Enabling projector"); + const toggleSwitch = await this.page?.$(".toggle-knob"); + if (toggleSwitch) { + await toggleSwitch.click(); + } else { + throw new Error("Toggle switch not found"); + } + } + async getCells(): Promise { const cells = await this.page?.$$(".cell"); if (!cells) return []; @@ -213,7 +236,6 @@ class HazelController { (el) => el.children[0].className, ); let ids = []; - // if we have class cell-item, also add all of the children classes if (classes.includes("cell-item")) { const childrenClasses = await elementHandle.evaluate((el) => Array.from(el.children[0].children) @@ -222,7 +244,6 @@ class HazelController { ); classes += " " + childrenClasses; } - // retrieve all ids from deep descendants ids = await elementHandle.evaluate((el) => Array.from(el.querySelectorAll("[id]")).map( (el: Element) => el.id, @@ -243,8 +264,16 @@ class HazelController { } } -const livelit = `llslider`; - +//const livelit = `(^popup("the haters are ill-prepared"))`; +const livelit = ` + let emotion = (^emotion(50)) in + case (emotion) + | "happy" => "Hooray! What a pleasant day!" + | "neutral" => "Things are medium, I suppose." + | "sad" => "Sorrow sorrow, today and tomorrow." + | _ => "You have broken my trust, and frankly, our friendship" + end +`; // Usage example (async () => { const controller = new HazelController(); @@ -260,12 +289,29 @@ const livelit = `llslider`; const scratchCell = cells[0]; await scratchCell.clearContent(); - await scratchCell.typeString(livelit); - await wait(1000); + await scratchCell.typeString(livelit, 25); + await wait(250); + // go to the end line + await scratchCell.cursorToEnd(); + await wait(250); + + // projector "livelit" + await controller.setProjectorMode("livelit"); + await wait(500); + // await controller.enableProjector(); + // await wait(1000); // save screenshot await controller.page?.screenshot({ path: `screenshot-${new Date().getTime()}.png` }); + // go to popup + const pages = await controller.browser!.pages(); // get all open pages by the browser + const popup = pages[pages.length - 1]; + await popup.bringToFront(); + + const zoomCommand = `document.body.style.fontSize = "72px";`; + await popup.evaluate(zoomCommand); + await wait(5000); // Close browser await controller.close(); })(); diff --git a/browsertest/src/utils.ts b/browsertest/src/utils.ts index c3c9e16f7c..1c7e5c3023 100644 --- a/browsertest/src/utils.ts +++ b/browsertest/src/utils.ts @@ -16,7 +16,7 @@ export async function emulateKeyCombination( page: Page, elm: ElementHandle, key: string, - modifierKey: "Control" | "Meta", + modifierKey?: "Control" | "Meta", ): Promise { await page.evaluate( (elm, key, modifierKey) => { diff --git a/src/haz3lcore/statics/Statics.re b/src/haz3lcore/statics/Statics.re index 02c6a34133..fd794692ab 100644 --- a/src/haz3lcore/statics/Statics.re +++ b/src/haz3lcore/statics/Statics.re @@ -336,7 +336,6 @@ and uexp_to_info_map = switch (fn_uexp.term) { | LivelitInvocation(s) => // refer to livelit context to find types - print_endline("Livelit invocation " ++ s); let ll = Livelit.find_livelit(s); let expansion_t = ll.expansion_t; let model_t = ll.model_t; diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 63eee46dc8..1f2a02997b 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -1,5 +1,21 @@ open Util; open Virtual_dom.Vdom; +open ProjectorBase; +// open Js_of_ocaml; + +type model_piece = { + model: UExp.t, + piece: Piece.tile, +}; + +let put: (string, Uuidm.t) => Piece.tile = + (s, id) => { + let piece = Piece.replace_id(id, Piece.mk_mono(Exp, s)); + switch (piece) { + | Tile(t) => t + | _ => failwith("put: not a tile") + }; + }; [@deriving (show({with_path: false}), sexp, yojson)] type t = { @@ -7,56 +23,917 @@ type t = { model_t: Typ.t, expansion_t: Typ.t, expansion_f: UExp.t => UExp.t, - projector: UExp.t => Node.t, + projector: + (list(model_piece), Piece.tile => Ui_effect.t(unit)) => + Virtual_dom.Vdom.Node.t, }; + let slider: t = { name: "slider", expansion_t: Typ.temp(Typ.Int), expansion_f: (model: UExp.t) => switch (model.term) { | Int(n) => DHExp.fresh(Int(n)) - | _ => DHExp.fresh(Int(-1)) + | _ => DHExp.fresh(Undefined) }, model_t: Typ.temp(Typ.Int), - projector: (model: UExp.t) => + projector: (model: list(model_piece), update) => { + let {model, piece} = List.nth(model, 0); + let n = + switch (model.term) { + | Int(n) => n + | _ => failwith("Slider livelit: not given int") + }; + Node.div( ~attrs=[Attr.class_("livelit")], - [Node.text("I am a slider and my model is " ++ UExp.show(model))], - ), + [ + Util.Web.range( + ~attrs=[Attr.on_input((_, v) => {update(put(v, piece.id))})], + string_of_int(n), + ), + ], + ); + }, }; + +let double_slider: t = { + name: "double_slider", + expansion_t: Typ.temp(Typ.Prod([Typ.temp(Typ.Int), Typ.temp(Typ.Int)])), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Tuple([t1, t2]) => DHExp.fresh(Tuple([t1, t2])) + | _ => DHExp.fresh(Undefined) + }, + model_t: Typ.temp(Typ.Prod([Typ.temp(Typ.Int), Typ.temp(Typ.Int)])), + projector: (models: list(model_piece), update) => { + // Pattern match directly on models to extract the two elements + let ((model_1, piece_1), (model_2, piece_2)) = + switch (models) { + | [{model: m1, piece: p1}, {model: m2, piece: p2}] => ( + (m1, p1), + (m2, p2), + ) + | _ => failwith("Expected exactly two model pieces") + }; + + // Pattern match on model terms to extract integers directly + let (n1, n2) = + switch (model_1.term, model_2.term) { + | (Int(n1), Int(n2)) => (n1, n2) + | _ => failwith("Double slider livelit: not given pair of ints") + }; + + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + Util.Web.range( + ~attrs=[Attr.on_input((_, v) => update(put(v, piece_1.id)))], + string_of_int(n1), + ), + Util.Web.range( + ~attrs=[Attr.on_input((_, v) => update(put(v, piece_2.id)))], + string_of_int(n2), + ), + ], + ); + }, +}; + +let script = (s: string) => { + Node.create("script", [Node.text(s)]); +}; + +let js: t = { + name: "js", + expansion_t: Typ.temp(Typ.String), + expansion_f: (model: UExp.t) => + switch (model.term) { + | String(s) => DHExp.fresh(String(s)) + | _ => DHExp.fresh(Undefined) + }, + model_t: Typ.temp(Typ.String), + projector: (model: list(model_piece), _parent) => { + let {model, piece} = List.nth(model, 0); + let s = + switch (model.term) { + | String(s) => s + | _ => failwith("JS livelit: not given string") + }; + + Node.div( + ~attrs=[Attr.class_("livelit")], + [script(s), Node.text("JS livelit")], + ); + }, +}; + +/* General function to create a popup with communication */ +let create_popup_with_communication = (~popup_content: string): string => + {| +(function() { + const options = "width=800,height=600,scrollbars=yes,resizable=yes"; + const popup = window.open("", "_blank", options); + var handlePopupMessage = null; + + if (popup) { + popup.document.open(); + popup.document.write(`|} + ++ popup_content + ++ {|`); + popup.document.close(); + + // Function to update the popup + function updatePopup(variable, newValue) { + if (popup) { + popup.postMessage({ variable: variable, value: newValue }, '*'); + } + } + + // Set up listener for messages from the popup + window.addEventListener('message', function(event) { + if (event.source === popup && event.data) { + // Handle message from popup + if (handlePopupMessage) { + handlePopupMessage(event.data); + } + } + }, false); + + // Return an object with methods + return { + updatePopup: updatePopup, + setHandlePopupMessage: function(handler) { + handlePopupMessage = handler; + } + }; + } else { + return null; + } +})(); +|}; + let timestamp: t = { name: "timestamp", expansion_t: Typ.temp(Typ.Int), expansion_f: (_model: UExp.t) => DHExp.fresh(Int(Float.to_int(JsUtil.timestamp()))), model_t: Typ.temp(Typ.Prod([])), - projector: (_model: UExp.t) => + projector: (_model: list(model_piece), _parent) => Node.div( ~attrs=[Attr.class_("livelit")], - [Node.text("Guess what guys -- I am a timestamp livelit!")], + [Node.text("Timestamp livelit")], ), }; +/* Emotion livelit definition */ + let not_found: t = { name: "not_found", expansion_t: Typ.temp(Typ.Unknown(Internal)), expansion_f: (_model: UExp.t) => DHExp.fresh(String("No livelit found")), model_t: Typ.temp(Typ.Unknown(Internal)), - projector: (_model: UExp.t) => + projector: (_model: list(model_piece), _) => Node.div( ~attrs=[Attr.class_("livelit")], [Node.text("No livelit found")], ), }; -let livelits: list(t) = [slider, timestamp]; +/* Game livelit definition */ +let game: t = { + name: "game", + expansion_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.Int), // Player X position + Typ.temp(Typ.Int), // Player Y position + Typ.temp(Typ.Int), // Energy + Typ.temp(Typ.Int) // Random Seed + ]), + ), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Tuple([x, y, energy, seed]) => + DHExp.fresh(Tuple([x, y, energy, seed])) + | _ => DHExp.fresh(Undefined) + }, + model_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.Int), // Player X position + Typ.temp(Typ.Int), // Player Y position + Typ.temp(Typ.Int), // Energy + Typ.temp(Typ.Int) // Random Seed + ]), + ), + projector: (models: list(model_piece), update) => { + // Extract the model pieces + let ( + (model_x, piece_x), + (model_y, piece_y), + (model_energy, piece_energy), + (model_seed, piece_seed), + ) = + switch (models) { + | [ + {model: m_x, piece: p_x}, + {model: m_y, piece: p_y}, + {model: m_e, piece: p_e}, + {model: m_s, piece: p_s}, + ] => ( + (m_x, p_x), + (m_y, p_y), + (m_e, p_e), + (m_s, p_s), + ) + | _ => failwith("Expected exactly four model pieces") + }; + + // Extract the values + let x = + switch (model_x.term) { + | Int(n) => n + | _ => failwith("Game livelit: player X position is not an int") + }; + let y = + switch (model_y.term) { + | Int(n) => n + | _ => failwith("Game livelit: player Y position is not an int") + }; + let energy = + switch (model_energy.term) { + | Int(n) => n + | _ => failwith("Game livelit: energy is not an int") + }; + let seed = + switch (model_seed.term) { + | Int(n) => n + | _ => failwith("Game livelit: random seed is not an int") + }; + + /* Popup content with the game */ + let popup_content = + {| + + + + + Maze Game + + + +

    Maze Game

    + +

    Energy:

    + + + + +|}; + + /* JavaScript code to open the popup and set up communication */ + let popupScript = + "var popupComm = " + ++ create_popup_with_communication(~popup_content) + ++ ";"; + + /* JavaScript code to handle messages from the popup */ + let handlePopupMessageJs = + {| +popupComm.setHandlePopupMessage(function(data) { + if (data.variable && data.value !== undefined) { + // Mapping from variable names to input IDs + var inputIds = { + x: '|} + ++ "hidden-input-x-" + ++ Uuidm.to_string(piece_x.id) + ++ {|', + y: '|} + ++ "hidden-input-y-" + ++ Uuidm.to_string(piece_y.id) + ++ {|', + energy: '|} + ++ "hidden-input-energy-" + ++ Uuidm.to_string(piece_energy.id) + ++ {|', + seed: '|} + ++ "hidden-input-seed-" + ++ Uuidm.to_string(piece_seed.id) + ++ {|' + }; + var inputId = inputIds[data.variable]; + if (inputId) { + var input = document.getElementById(inputId); + if (input) { + input.value = data.value; + var event = new Event('input', { bubbles: true }); + input.dispatchEvent(event); + } + } + } else if (data.request === 'getEnergy') { + // Simulate click on the "Get More Energy" button + var getEnergyButton = document.getElementById('|} + ++ "get-energy-button-" + ++ Uuidm.to_string(piece_energy.id) + ++ {|'); + if (getEnergyButton) { + getEnergyButton.click(); + } + } +}); +|}; + + /* Helper function to send a message to the popup */ + let send_message_to_popup = (variable: string, value: string): unit => { + let js_code = + "if (popupComm) { popupComm.updatePopup('" + ++ variable + ++ "', '" + ++ value + ++ "'); }"; + Js_of_ocaml.Js.Unsafe.eval_string(js_code); + }; + + /* Return the node */ + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + /* Include the scripts */ + script(popupScript), + script(handlePopupMessageJs), + /* Hidden input elements */ + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id("hidden-input-x-" ++ Uuidm.to_string(piece_x.id)), + Attr.value(string_of_int(x)), + Attr.on_input((_, v) => { + // Update the model for player x position + update( + put(v, piece_x.id), + ) + }), + ], + (), + ), + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id("hidden-input-y-" ++ Uuidm.to_string(piece_y.id)), + Attr.value(string_of_int(y)), + Attr.on_input((_, v) => { + // Update the model for player y position + update( + put(v, piece_y.id), + ) + }), + ], + (), + ), + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id( + "hidden-input-energy-" ++ Uuidm.to_string(piece_energy.id), + ), + Attr.value(string_of_int(energy)), + Attr.on_input((_, v) => { + // Update the model for energy + update(put(v, piece_energy.id)) + }), + ], + (), + ), + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id("hidden-input-seed-" ++ Uuidm.to_string(piece_seed.id)), + Attr.value(string_of_int(seed)), + Attr.on_input((_, v) => { + // Send new seed to popup to regenerate maze + send_message_to_popup("seed", v); + // Update the model for seed + update(put(v, piece_seed.id)); + }), + ], + (), + ), + /* Button to get more energy */ + Node.button( + ~attrs=[ + Attr.id( + "get-energy-button-" ++ Uuidm.to_string(piece_energy.id), + ), + Attr.on_click(_event => { + // Increase energy + let new_energy = energy + 10; + // Send updated energy to popup + send_message_to_popup("energy", string_of_int(new_energy)); + // Update the model + update(put(string_of_int(new_energy), piece_energy.id)); + }), + ], + [Node.text("Get More Energy")], + ), + ], + ); + }, +}; + +let emotion: t = { + name: "emotion", + expansion_t: Typ.temp(Typ.String), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Int(n) => + DHExp.fresh( + String( + if (n < 40) { + "sad"; + } else if (n > 70) { + "happy"; + } else { + "neutral"; + }, + ), + ) + | _ => DHExp.fresh(Undefined) + }, + model_t: Typ.temp(Typ.Int), + projector: (model: list(model_piece), update) => { + let {model, piece} = List.nth(model, 0); + let n = + switch (model.term) { + | Int(n) => n + | _ => failwith("Emotion livelit: not given int") + }; + + /* Popup content with its own slider */ + let popup_content = + {| + + + + + Emotion Popup + + + +
    + + + + +|}; + + /* JavaScript code to open the popup and set up communication */ + let popupScript = + "var popupComm = " + ++ create_popup_with_communication(~popup_content) + ++ ";"; + + /* JavaScript code to handle messages from the popup */ + let hidden_input_id = "hidden-input-" ++ Uuidm.to_string(piece.id); + let handlePopupMessageJs = + {| +popupComm.setHandlePopupMessage(function(data) { + if (data.variable === 'emotionValue' && data.value !== undefined) { + // Update the hidden input value and dispatch input event + var input = document.getElementById('|} + ++ hidden_input_id + ++ {|'); + if (input) { + input.value = data.value; + var event = new Event('input', { bubbles: true }); + input.dispatchEvent(event); + } + } +}); +|}; + + /* Helper function to send a message to the popup */ + let send_message_to_popup = (variable: string, value: string): unit => { + let js_code = + "if (popupComm) { popupComm.updatePopup('" + ++ variable + ++ "', '" + ++ value + ++ "'); }"; + Js_of_ocaml.Js.Unsafe.eval_string(js_code); + }; + + /* Return the node */ + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + /* Include the scripts */ + script(popupScript), + script(handlePopupMessageJs), + /* Hidden input element */ + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id(hidden_input_id), + Attr.value(string_of_int(n)), + Attr.on_input((_, v) => { + /* Update the model */ + update(put(v, piece.id)) + }), + ], + (), + ), + /* Visible slider in the main window */ + Util.Web.range( + ~attrs=[ + Attr.class_("livelit slider"), + Attr.id(Uuidm.to_string(piece.id)), + Attr.on_input((_, v) => { + /* Send message to the popup */ + send_message_to_popup("emotionValue", v); + /* Update the model */ + update(put(v, piece.id)); + }), + ], + string_of_int(n), + ), + ], + ); + }, +}; + +/* Add 'game' to the list of livelits */ +let livelits: list(t) = [ + slider, + js, + timestamp, + emotion, + double_slider, + game, +]; let find_livelit = (livelit_name: string): t => - // List.find_opt(l => l.name == livelit_name, livelits) - // |> Option.value(~default=not_found); switch (List.find_opt(l => l.name == livelit_name, livelits)) { | Some(l) => l | None => print_endline("Livelit " ++ livelit_name ++ " not found"); not_found; }; + +/* + let emotion = (^emotion(5)) in + case (emotion) + | "happy" => "Hooray! What a pleasant day!" + | "neutral" => "Things are medium, I suppose." + | "sad" => "Sorrow sorrow, today and tomorrow." + | _ => "You have broken my trust, and frankly, our friendship" + end + */ + +/* + let game = (^game(10, 10, 100, 1234)) in + case (game) + | (x, y, energy, seed) => + "Player at (" ++ string_of_int(x) ++ ", " ++ string_of_int(y) ++ ") with " + ++ string_of_int(energy) ++ " energy and seed " ++ string_of_int(seed) + end + */ + +/* + let game = (^game(10, 10, 10, 1234)) in + case (game) + | (x, y, energy, seed) => + "Player at (" ++ string_of_int(x) ++ ", " ++ string_of_int(y) ++ ") with " + ++ string_of_int(energy) ++ " energy and seed " ++ string_of_int(seed) + end + */ diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 55924f2dfa..3ef28c205e 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -2,25 +2,61 @@ open Util; open Virtual_dom.Vdom; open ProjectorBase; -let put: string => Piece.t = Piece.mk_mono(Exp); - -let get_opt = (piece: Piece.t): option(string) => - piece |> Piece.of_mono |> Option.map(Form.parse_livelit); - -let get = (piece: Piece.t): string => - switch (get_opt(piece)) { - | None => failwith("ERROR: Slider: not integer literal") - | Some(s) => s +/* Define a function to collect all leaf pieces from a tile */ +let rec getLeafPieces = + ( + syntaxNode: ProjectorBase.syntax, + ~ignored_labels: list(list(string)), + ) + : list(Piece.tile) => + switch (syntaxNode) { + | Tile(tile) => + /* Check if this tile's label is in the ignored labels */ + let should_ignore = + List.exists(label => label == tile.label, ignored_labels); + if (should_ignore) { + []; + /* Ignore this tile */ + } else if (tile.children == []) { + [ + /* It's a leaf piece */ + tile, + ]; + } else { + /* Recurse into the children */ + tile.children + |> List.concat_map(segment => + segment |> List.concat_map(getLeafPieces(~ignored_labels)) + ); + }; + | _ => [] }; -let getApArgs = (term: UExp.term): list(UExp.t) => - switch (term) { - | UExp.Parens(args) => - switch (args.term) { - | Tuple(lst) => lst - | _ => [args] +let rec replacePieceInSyntax = + (syntaxNode: ProjectorBase.syntax, pieceToReplace: Piece.tile) + : ProjectorBase.syntax => + switch (syntaxNode) { + | Tile(tile) => + if (tile.id == pieceToReplace.id) { + /* Replace this tile with the input piece */ + Tile(pieceToReplace); + } else if (tile.children == []) { + /* Leaf tile, return as is */ + Tile(tile); + } else { + /* Recurse into the children */ + let newChildren = + tile.children + |> List.map(segment => + segment + |> List.map(childNode => + replacePieceInSyntax(childNode, pieceToReplace) + ) + ); + /* Return a new Tile with updated children */ + Tile({...tile, children: newChildren}); } - | _ => failwith("Not an Ap term") + | _ => syntaxNode }; module M: Projector = { @@ -33,42 +69,70 @@ module M: Projector = { let can_focus = false; let placeholder = (_, _) => Inline(10); let update = (model, _) => model; + let view = (_, ~info, ~local as _, ~parent: external_action => Ui_effect.t(unit)) => { - let args: list(UExp.t) = + let (ll, args): (string, list(UExp.t)) = switch (info.ci) { | Some(InfoExp(exp)) => - print_endline("Livelit term: " ++ UExp.show(exp.term)); let (term, _) = UExp.unwrap(exp.term); switch (term) { | Parens(args) => switch (args.term) { - | Ap(_dir, _f, args) => + | Ap(_dir, ll_uexp, args) => + let (ll_term, _) = UExp.unwrap(ll_uexp); + let ll = + switch (ll_term) { + | LivelitInvocation(name) => name + | _ => + failwith( + "LivelitProj: Not a LivelitInvocation term -- " + ++ UExp.show(ll_uexp), + ) + }; let (term, _) = UExp.unwrap(args); switch (term) { - | Tuple(lst) => lst - | _ => [args] + | Tuple(lst) => (ll, lst) + | _ => (ll, [args]) }; - | _ => failwith("Not an Ap term") + | _ => + failwith("LivelitProj: Not an Ap term -- " ++ UExp.show(args)) } - | _ => failwith("Not an Ap term") + | _ => + failwith( + "LivelitProj: Not a Parens term -- " ++ UExp.show(exp.term), + ) }; - | _ => failwith("Not an Ap term") + | _ => failwith("LivelitProj: Not an InfoExp term") }; - print_endline( - "Livelit args: " - ++ (args |> List.map(UExp.show) |> String.concat(", ")), - ); + /* Ignore the first piece, which is the livelit invocation */ + let pieces = + List.tl(getLeafPieces(info.syntax, ~ignored_labels=[[","]])); + let ll = Livelit.find_livelit(ll); - // print_endline("Livelit syntax: " ++ debug); - switch (info.ci) { - | _ => - Node.div( - ~attrs=[Attr.class_("livelit")], - [Node.text("I am a livelit")], - ) + // print_endline("size of args: " ++ string_of_int(List.length(args))); + // print_endline("size of pieces: " ++ string_of_int(List.length(pieces))); + // print_endline( + // "types of pieces: " + // ++ (List.map(Tile.show, pieces) |> String.concat(", ")), + // ); + + /* Combine args and pieces into model_piece records */ + let model_pieces = + List.map2( + (arg, piece): Livelit.model_piece => {{model: arg, piece}}, + args, + pieces, + ); + + let replace = (piece: Piece.tile) => { + let newSyntax = replacePieceInSyntax(info.syntax, piece); + parent(SetSyntax(newSyntax)); }; + + /* Call the projector function */ + ll.projector(model_pieces, replace); }; let focus = _ => (); }; diff --git a/src/haz3lweb/www/style/projectors.css b/src/haz3lweb/www/style/projectors.css index c6b2c1a833..21458cf448 100644 --- a/src/haz3lweb/www/style/projectors.css +++ b/src/haz3lweb/www/style/projectors.css @@ -163,3 +163,21 @@ color: var(--BLACK); background-color: var(--shard-selected); } + +.livelit { + position: relative; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; +} + +.livelit > .slider { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--shard-slider); + z-index: 1; +} \ No newline at end of file From 1a755921af6d9e9d5fdefadea9b25ed7dda4fc0f Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Fri, 8 Nov 2024 18:34:51 -0500 Subject: [PATCH 18/23] added more livelit demos --- browsertest/src/game.py | 42 ++ browsertest/src/websocket.py | 37 ++ src/haz3lcore/tiles/Livelit.re | 461 +++++++++++++++++- .../zipper/projectors/LivelitProj.re | 42 +- .../zipper/projectors/TextAreaProj.re | 3 +- 5 files changed, 567 insertions(+), 18 deletions(-) create mode 100644 browsertest/src/game.py create mode 100644 browsertest/src/websocket.py diff --git a/browsertest/src/game.py b/browsertest/src/game.py new file mode 100644 index 0000000000..7d057e083f --- /dev/null +++ b/browsertest/src/game.py @@ -0,0 +1,42 @@ +import asyncio +import websockets +import json + +PORT = 8765 + +connected_clients = set() +game_state = { + "players": {} +} + +async def handler(websocket, path): + connected_clients.add(websocket) + player_id = None + try: + async for message in websocket: + data = json.loads(message) + if data['type'] == 'join': + player_id = data['player']['id'] + game_state['players'][player_id] = data['player'] + await broadcast_game_state() + elif data['type'] == 'move' and player_id is not None: + game_state['players'][player_id] = data['player'] + await broadcast_game_state() + except websockets.exceptions.ConnectionClosed: + pass + finally: + if player_id is not None and player_id in game_state['players']: + del game_state['players'][player_id] + await broadcast_game_state() + connected_clients.remove(websocket) + +async def broadcast_game_state(): + if connected_clients: + message = json.dumps({"type": "state", "state": game_state}) + # Create tasks explicitly for each send operation + await asyncio.gather(*(asyncio.create_task(client.send(message)) for client in connected_clients)) + +start_server = websockets.serve(handler, "localhost", PORT) + +asyncio.get_event_loop().run_until_complete(start_server) +asyncio.get_event_loop().run_forever() diff --git a/browsertest/src/websocket.py b/browsertest/src/websocket.py new file mode 100644 index 0000000000..5d76ccd8fc --- /dev/null +++ b/browsertest/src/websocket.py @@ -0,0 +1,37 @@ +import asyncio +import websockets +from websockets.server import WebSocketServerProtocol +from typing import Set + +connected_clients: Set[WebSocketServerProtocol] = set() + +async def echo(websocket: WebSocketServerProtocol, path: str) -> None: + print("Client connected") + connected_clients.add(websocket) + try: + async for message in websocket: + print(f"Received message from client: {message}") + if connected_clients: + await asyncio.gather(*(client.send(f"{message}") for client in connected_clients if client != websocket)) + else: + print("No clients connected") + except websockets.ConnectionClosed: + print("Client disconnected") + finally: + connected_clients.remove(websocket) + +async def console_input() -> None: + while True: + message = await asyncio.get_event_loop().run_in_executor(None, input, "Enter message to broadcast: ") + if connected_clients: + await asyncio.gather(*(client.send(f"{message}") for client in connected_clients)) + else: + print("No clients connected") + +async def main() -> None: + async with websockets.serve(echo, "localhost", 8765): + print("WebSocket server running on ws://localhost:8765") + await asyncio.gather(console_input(), asyncio.Future()) # Run console input and server forever + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 1f2a02997b..dbe7b4f22b 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -26,6 +26,7 @@ type t = { projector: (list(model_piece), Piece.tile => Ui_effect.t(unit)) => Virtual_dom.Vdom.Node.t, + size: int, }; let slider: t = { @@ -55,6 +56,7 @@ let slider: t = { ], ); }, + size: 20, }; let double_slider: t = { @@ -98,6 +100,7 @@ let double_slider: t = { ], ); }, + size: 20, }; let script = (s: string) => { @@ -126,6 +129,7 @@ let js: t = { [script(s), Node.text("JS livelit")], ); }, + size: 20, }; /* General function to create a popup with communication */ @@ -184,6 +188,7 @@ let timestamp: t = { ~attrs=[Attr.class_("livelit")], [Node.text("Timestamp livelit")], ), + size: 20, }; /* Emotion livelit definition */ @@ -198,6 +203,7 @@ let not_found: t = { ~attrs=[Attr.class_("livelit")], [Node.text("No livelit found")], ), + size: 20, }; /* Game livelit definition */ @@ -696,6 +702,7 @@ popupComm.setHandlePopupMessage(function(data) { ], ); }, + size: 20, }; let emotion: t = { @@ -890,9 +897,391 @@ popupComm.setHandlePopupMessage(function(data) { ], ); }, + size: 20, }; -/* Add 'game' to the list of livelits */ +let websocket: t = { + name: "websocket", + expansion_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.String), + Typ.temp(Typ.String), + Typ.temp(Typ.String), + ]), + ), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Tuple([url, send_msg, recv_msg]) => + DHExp.fresh(Tuple([url, send_msg, recv_msg])) + | _ => DHExp.fresh(Undefined) + }, + model_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.String), + Typ.temp(Typ.String), + Typ.temp(Typ.String), + ]), + ), + projector: (models: list(model_piece), update) => { + let ( + (model_url, piece_url), + (model_send, piece_send), + (model_recv, piece_recv), + ) = + switch (models) { + | [ + {model: m1, piece: p1}, + {model: m2, piece: p2}, + {model: m3, piece: p3}, + ] => ( + (m1, p1), + (m2, p2), + (m3, p3), + ) + | _ => failwith("Expected exactly three model pieces") + }; + + let websocket_url = + switch (model_url.term) { + | String(s) => s + | _ => failwith("WebSocket livelit: not given string") + }; + + let send_msg = + switch (model_send.term) { + | String(s) => s + | _ => failwith("WebSocket livelit: not given string") + }; + + let recv_msg = + switch (model_recv.term) { + | String(s) => s + | _ => failwith("WebSocket livelit: not given string") + }; + + /* JavaScript code to open the websocket and handle communication */ + let websocketScript = + {| + (function() { + const socket = new WebSocket("|} + ++ websocket_url + ++ {|"); + socket.onopen = function() { + console.log("WebSocket connection opened"); + socket.send("|} + ++ send_msg + ++ {|"); + }; + + socket.onmessage = function(event) { + console.log("Message from server: ", event.data); + const hiddenInput = document.getElementById("hidden-input-|} + ++ Uuidm.to_string(piece_recv.id) + ++ {|"); + + // Update the hidden input value + hiddenInput.value = event.data; + + // Explicitly dispatch an input event + const inputEvent = new Event('input', { bubbles: true }); + hiddenInput.dispatchEvent(inputEvent); + }; + + socket.onerror = function(error) { + console.error("WebSocket error: ", error); + }; + + window.sendWebSocketMessage = function(message) { + if (socket.readyState === WebSocket.OPEN) { + socket.send(message); + } else { + console.warn("WebSocket is not open: message not sent"); + } + }; + })(); + |}; + + let send_message_to_websocket = (message: string): unit => { + let js_code = "window.sendWebSocketMessage('" ++ message ++ "');"; + Js_of_ocaml.Js.Unsafe.eval_string(js_code); + }; + + let key_handler = evt => { + let key = Key.mk(KeyDown, evt); + + switch (key.key) { + | _ => Effect.Stop_propagation + }; + }; + + /* Return the Node */ + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + /* Hidden input for the received message */ + Node.input( + ~attrs=[ + Attr.id("hidden-input-" ++ Uuidm.to_string(piece_recv.id)), + Attr.type_("hidden"), + Attr.value(recv_msg), + Attr.on_input((_, v) => { + print_endline("Received message: " ++ v); + update(put("\"" ++ v ++ "\"", piece_recv.id)); + }), + ], + (), + ), + /* Include the script for websocket setup */ + script(websocketScript), + /* Input for the message to send */ + Node.div([ + Node.input( + ~attrs=[ + Attr.type_("text"), + Attr.placeholder("Message to send"), + Attr.value(send_msg), + Attr.on_keydown(key_handler), + Attr.on_input((_, v) => { + update(put("\"" ++ v ++ "\"", piece_send.id)) + }), + Attr.id("websocket-send-input"), + Attr.class_("websocket-send-input"), + ], + (), + ), + /* Send button to trigger WebSocket message send */ + Node.button( + ~attrs=[ + Attr.on_click(_ => { + send_message_to_websocket(send_msg); + update(put("\"\"", piece_send.id)); + }), + ], + [Node.text("Send")], + ), + ]), + ], + ); + }, + size: 30, +}; + +let multiplayer_game: t = { + name: "multiplayer_game", + expansion_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.String), /* Player ID */ + Typ.temp(Typ.String), /* Game State */ + Typ.temp(Typ.String) /* Color */ + ]), + ), + expansion_f: (model: UExp.t) => + switch (model.term) { + | Tuple([player_id, game_state, color, _ws]) => + DHExp.fresh(Tuple([player_id, game_state, color])) + | _ => DHExp.fresh(Undefined) + }, + model_t: + Typ.temp( + Typ.Prod([ + Typ.temp(Typ.String), + Typ.temp(Typ.String), + Typ.temp(Typ.String), + Typ.temp(Typ.String), + ]), + ), + projector: (models: list(model_piece), update) => { + let ( + (model_player_id, piece_player_id), + (model_game_state, piece_game_state), + (model_color, piece_color), + (model_ws, piece_ws), + ) = + switch (models) { + | [ + {model: m_id, piece: p_id}, + {model: m_state, piece: p_state}, + {model: m_color, piece: p_color}, + {model: m_ws, piece: p_ws}, + ] => ( + (m_id, p_id), + (m_state, p_state), + (m_color, p_color), + (m_ws, p_ws), + ) + | _ => failwith("Expected exactly three model pieces") + }; + + let ws = + switch (model_ws.term) { + | String(s) => s + | _ => failwith("WebSocket URL is not a string") + }; + + let player_id = + switch (model_player_id.term) { + | String(s) => s + | _ => failwith("Player ID is not a string") + }; + + let game_state = + switch (model_game_state.term) { + | String(s) => s + | _ => failwith("Game state is not a string") + }; + + let color = + switch (model_color.term) { + | String(s) => s + | _ => failwith("Color is not a string") + }; + + let popup_content = + {| + + + + Multiplayer Game + + + + + + +|}; + + let popupScript = + "var popupComm = " + ++ create_popup_with_communication(~popup_content) + ++ ";"; + + let hidden_input_game_state_id = + "hidden-input-game_state-" ++ Uuidm.to_string(piece_game_state.id); + + let handlePopupMessageJs = + {| +popupComm.setHandlePopupMessage(function(data) { + if (data.variable && data.value !== undefined) { + var inputIds = { + game_state: '|} + ++ hidden_input_game_state_id + ++ {|' + }; + var inputId = inputIds[data.variable]; + if (inputId) { + var input = document.getElementById(inputId); + if (input) { + input.value = data.value; + var event = new Event('input', { bubbles: true }); + input.dispatchEvent(event); + } + } + } +}); +|}; + + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + script(popupScript), + script(handlePopupMessageJs), + Node.input( + ~attrs=[ + Attr.type_("hidden"), + Attr.id(hidden_input_game_state_id), + Attr.value(game_state), + Attr.on_input((_, v) => { + update(put("\"" ++ v ++ "\"", piece_game_state.id)) + }), + ], + (), + ), + Node.div([Node.text("Player ID: " ++ player_id)]), + ], + ); + }, + size: 20, +}; let livelits: list(t) = [ slider, js, @@ -900,6 +1289,8 @@ let livelits: list(t) = [ emotion, double_slider, game, + websocket, + multiplayer_game, ]; let find_livelit = (livelit_name: string): t => @@ -911,22 +1302,20 @@ let find_livelit = (livelit_name: string): t => }; /* - let emotion = (^emotion(5)) in - case (emotion) - | "happy" => "Hooray! What a pleasant day!" - | "neutral" => "Things are medium, I suppose." - | "sad" => "Sorrow sorrow, today and tomorrow." - | _ => "You have broken my trust, and frankly, our friendship" - end + let slider = (^slider(50)) in + case (slider) + | n => "Slider value: " ++ string_of_int(n) + end */ /* - let game = (^game(10, 10, 100, 1234)) in - case (game) - | (x, y, energy, seed) => - "Player at (" ++ string_of_int(x) ++ ", " ++ string_of_int(y) ++ ") with " - ++ string_of_int(energy) ++ " energy and seed " ++ string_of_int(seed) - end + let emotion = (^emotion(5)) in + case (emotion) + | "happy" => "Hooray! What a pleasant day!" + | "neutral" => "Things are medium, I suppose." + | "sad" => "Sorrow sorrow, today and tomorrow." + | _ => "You have broken my trust, and frankly, our friendship" + end */ /* @@ -937,3 +1326,47 @@ let find_livelit = (livelit_name: string): t => ++ string_of_int(energy) ++ " energy and seed " ++ string_of_int(seed) end */ + +/* + let websocket = (^websocket("ws://localhost:8765", "Hello", "World")) in + case (websocket) + | (url, send, recv) => + "WebSocket connection to " ++ url ++ " with send message " ++ send + ++ " and received message " ++ recv + end + */ + +/*let websocket = ( + ^websocket("ws://localhost:8765", "Send message", "Recieve message")) + in + case (websocket) + | (_, send, recv) => "Send: " ++ send ++ " Receive: " ++ recv + end + */ + +/* {'players': {'player1': {'x': 100, 'y': 100, 'color': 'red'}}} */ + +/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in + case (multiplayer_game) + | (player_id, game_state, color, ws) => + "Player " ++ player_id ++ " is playing with color " ++ color + end + */ + +/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in + case (multiplayer_game) + | (player_id, game_state, color) => + "Player " ++ player_id ++ " is playing with color " ++ color + end*/ + +/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in + case (multiplayer_game) + | (player_id, game_state, color) => + "Player " ++ player_id ++ " is playing with color " ++ color + end*/ + +/*let multiplayer_game = (^multiplayer_game("player2", "{}", "blue", "ws://localhost:8765")) in + case (multiplayer_game) + | (player_id, game_state, color) => + "Player " ++ player_id ++ " is playing with color " ++ color + end*/ diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 3ef28c205e..ee2cefeca8 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -2,6 +2,9 @@ open Util; open Virtual_dom.Vdom; open ProjectorBase; +let of_id = (id: Id.t) => + "id" ++ (id |> Id.to_string |> String.sub(_, 0, 8)); + /* Define a function to collect all leaf pieces from a tile */ let rec getLeafPieces = ( @@ -67,7 +70,37 @@ module M: Projector = { let init = (); let can_project = p => true; let can_focus = false; - let placeholder = (_, _) => Inline(10); + let placeholder = (model, info) => { + let ll = + switch (info.ci) { + | Some(InfoExp(exp)) => + let (term, _) = UExp.unwrap(exp.term); + switch (term) { + | Parens(args) => + switch (args.term) { + | Ap(_dir, ll_uexp, args) => + let (ll_term, _) = UExp.unwrap(ll_uexp); + switch (ll_term) { + | LivelitInvocation(name) => name + | _ => + failwith( + "LivelitProj: Not a LivelitInvocation term -- " + ++ UExp.show(ll_uexp), + ) + }; + | _ => + failwith("LivelitProj: Not an Ap term -- " ++ UExp.show(args)) + } + | _ => + failwith( + "LivelitProj: Not a Parens term -- " ++ UExp.show(exp.term), + ) + }; + | _ => failwith("LivelitProj: Not an InfoExp term") + }; + let ll = Livelit.find_livelit(ll); + Inline(ll.size); + }; let update = (model, _) => model; let view = @@ -134,5 +167,10 @@ module M: Projector = { /* Call the projector function */ ll.projector(model_pieces, replace); }; - let focus = _ => (); + let focus = ((id: Id.t, d: option(Direction.t))) => { + JsUtil.get_elem_by_id(of_id(id))##focus; + switch (d) { + | _ => () + }; + }; }; diff --git a/src/haz3lcore/zipper/projectors/TextAreaProj.re b/src/haz3lcore/zipper/projectors/TextAreaProj.re index 2099841556..d6488afd86 100644 --- a/src/haz3lcore/zipper/projectors/TextAreaProj.re +++ b/src/haz3lcore/zipper/projectors/TextAreaProj.re @@ -84,8 +84,7 @@ let view = (_, ~info, ~local as _, ~parent) => { [ Node.div( ~attrs=[Attr.classes(["cols", "code"])], - [Node.text("I am a livelit projector")] - @ [textarea(info.id, ~parent, text)], + [Node.text("·")] @ [textarea(info.id, ~parent, text)], ), ], ); From d614d2f6f3e4455fdbdf5b7883b13eb8fa477c41 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 11 Dec 2024 10:39:51 -0500 Subject: [PATCH 19/23] init --- Makefile | 2 +- hazel.opam | 1 + hazel.opam.locked | 2 +- src/haz3lweb/Main.re | 1 + src/haz3lweb/Store.re | 23 +++++++++--- src/haz3lweb/Update.re | 10 +++++ src/haz3lweb/UpdateAction.re | 1 + src/haz3lweb/view/NutMenu.re | 6 ++- src/haz3lweb/view/ScratchMode.re | 6 +++ src/util/JsUtil.re | 64 ++++++++++++++++++++++++++++++++ src/util/StringUtil.re | 17 +++++++++ src/util/dune | 2 +- 12 files changed, 126 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 5eef59a1d4..4fba1cf098 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ echo-html-dir: @echo $(HTML_DIR) serve: - cd $(HTML_DIR); python3 -m http.server 8000 + cd $(HTML_DIR); python3 -m http.server 8000 --bind 127.0.0.1 serve2: cd $(HTML_DIR); python3 -m http.server 8001 diff --git a/hazel.opam b/hazel.opam index 09ee887ab3..6f43cbbd17 100644 --- a/hazel.opam +++ b/hazel.opam @@ -14,6 +14,7 @@ depends: [ "reason" {>= "3.12.0"} "ppx_yojson_conv_lib" "ppx_yojson_conv" + "incr_dom" "bisect_ppx" "omd" {>= "2.0.0~alpha4"} "ezjs_idb" diff --git a/hazel.opam.locked b/hazel.opam.locked index 856b83ad33..aedd111ccb 100644 --- a/hazel.opam.locked +++ b/hazel.opam.locked @@ -38,8 +38,8 @@ depends: [ "bignum" {= "v0.16.0"} "bigstringaf" {= "0.10.0"} "bin_prot" {= "v0.16.0"} - "bonsai" {= "v0.16.0"} "bisect_ppx" {= "2.8.3"} + "bonsai" {= "v0.16.0"} "camlp-streams" {= "5.0.1"} "chrome-trace" {= "3.16.0"} "cmdliner" {= "1.3.0"} diff --git a/src/haz3lweb/Main.re b/src/haz3lweb/Main.re index 16811a32cb..d6bf9a92eb 100644 --- a/src/haz3lweb/Main.re +++ b/src/haz3lweb/Main.re @@ -46,6 +46,7 @@ let apply = (model, action, ~schedule_action, ~schedule_autosave): Model.t => { "ERROR: Exception during apply: %s\n", Printexc.to_string(exc), ); + Printf.printf("Action: %s\n", action |> UpdateAction.show); Error(Exception(Printexc.to_string(exc))); } ) { diff --git a/src/haz3lweb/Store.re b/src/haz3lweb/Store.re index f30a18ab85..3ac6b2f2ba 100644 --- a/src/haz3lweb/Store.re +++ b/src/haz3lweb/Store.re @@ -1,5 +1,6 @@ open Haz3lcore; open Util; +open StringUtil; // A generic key-value store for saving/loading data to/from local storage module Generic = { @@ -160,14 +161,26 @@ module Scratch = { scratch; }; - let load = (~settings: CoreSettings.t): t => - switch (JsUtil.get_localstore(save_scratch_key)) { - | None => init(~settings) + let load = (~settings: CoreSettings.t): t => { + switch (JsUtil.QueryParams.get_param("scratch")) { | Some(data) => - try(deserialize(~settings, data)) { - | _ => init(~settings) + switch (decompress(data)) { + | None => init(~settings) + | Some(data) => + try(deserialize(data, ~settings)) { + | _ => init(~settings) + } + } + | None => + switch (JsUtil.get_localstore(save_scratch_key)) { + | None => init(~settings) + | Some(data) => + try(deserialize(~settings, data)) { + | _ => init(~settings) + } } }; + }; let export = (~settings: CoreSettings.t): string => serialize(load(~settings)); diff --git a/src/haz3lweb/Update.re b/src/haz3lweb/Update.re index 778df5114a..40b62ba51c 100644 --- a/src/haz3lweb/Update.re +++ b/src/haz3lweb/Update.re @@ -465,6 +465,16 @@ let apply = (model: Model.t, update: t, ~schedule_action): Result.t(Model.t) => let editor = Editors.get_editor(model.editors); export_scratch_slide(editor); Ok(model); + | Export(EncodeScratchSlide) => + Model.save(model); + let editor = Editors.get_editor(model.editors); + let json_data = ScratchSlide.export(editor); + let compressed = + StringUtil.compress(json_data |> Yojson.Safe.to_string); + JsUtil.log(json_data); + JsUtil.log(compressed); + JsUtil.QueryParams.set_param("scratch", compressed); + Ok(model); | Export(ExerciseModule) => Model.save(model); instructor_exercise_update(model, export_exercise_module); diff --git a/src/haz3lweb/UpdateAction.re b/src/haz3lweb/UpdateAction.re index cd2f145f3e..c92d1f40ec 100644 --- a/src/haz3lweb/UpdateAction.re +++ b/src/haz3lweb/UpdateAction.re @@ -47,6 +47,7 @@ type benchmark_action = [@deriving (show({with_path: false}), sexp, yojson)] type export_action = + | EncodeScratchSlide | ExportScratchSlide | ExportPersistentData | ExerciseModule diff --git a/src/haz3lweb/view/NutMenu.re b/src/haz3lweb/view/NutMenu.re index b67f406504..6516731607 100644 --- a/src/haz3lweb/view/NutMenu.re +++ b/src/haz3lweb/view/NutMenu.re @@ -129,7 +129,11 @@ let file_group_scratch = (~inject) => item_group( ~inject, "File", - [ScratchMode.export_button(inject), ScratchMode.import_button(inject)], + [ + ScratchMode.export_button(inject), + ScratchMode.encode_button(inject), + ScratchMode.import_button(inject), + ], ); let reset_group_scratch = (~inject) => diff --git a/src/haz3lweb/view/ScratchMode.re b/src/haz3lweb/view/ScratchMode.re index 7fdc8eb361..64f2b560ef 100644 --- a/src/haz3lweb/view/ScratchMode.re +++ b/src/haz3lweb/view/ScratchMode.re @@ -50,6 +50,12 @@ let export_button = (inject: Update.t => Ui_effect.t(unit)) => _ => inject(Export(ExportScratchSlide)), ~tooltip="Export Scratchpad", ); +let encode_button = (inject: Update.t => Ui_effect.t(unit)) => + Widgets.button_named( + Icons.export, + _ => inject(Export(EncodeScratchSlide)), + ~tooltip="Encode Scratchpad", + ); let import_button = inject => Widgets.file_select_button_named( "import-scratchpad", diff --git a/src/util/JsUtil.re b/src/util/JsUtil.re index bd8388b7ad..1ea6465325 100644 --- a/src/util/JsUtil.re +++ b/src/util/JsUtil.re @@ -1,5 +1,6 @@ open Js_of_ocaml; open Virtual_dom.Vdom; +open Js_of_ocaml.Url; let get_elem_by_id = id => { let doc = Dom_html.document; @@ -174,3 +175,66 @@ module Fragment = { Url.Current.get() |> Option.map(fragment_of_url); }; }; + +module QueryParams = { + let get_arguments = (url: Url.url): list((string, string)) => + switch (url) { + | Http({hu_arguments, _}) => hu_arguments + | Https({hu_arguments, _}) => hu_arguments + | File({fu_arguments, _}) => fu_arguments + }; + + let set_arguments = (url: Url.url, args: list((string, string))): Url.url => + switch (url) { + | Http(u) => Http({...u, hu_arguments: args}) + | Https(u) => Https({...u, hu_arguments: args}) + | File(u) => File({...u, fu_arguments: args}) + }; + + let get_param = (name: string) => { + let q_opt = + Url.Current.get() + |> Option.map(url => + url |> get_arguments |> List.find_opt(((k, _)) => k == name) + ); + switch (q_opt) { + | Some(Some((_, v))) => Some(v) + | _ => None + }; + }; + + let set_param = (name: string, value: string) => { + Url.Current.get() + |> Option.iter(url => { + let args = + get_arguments(url) + |> List.filter(((k, _)) => k != name) + |> List.cons((name, value)); + + let new_url = set_arguments(url, args); + let href = Url.string_of_url(new_url); + + Dom_html.window##.history##pushState( + Js.null, + Js.string(""), + Js.some(Js.string(href)), + ); + }); + }; + + let remove_param = (name: string) => + Url.Current.get() + |> Option.iter(url => { + let args = + get_arguments(url) |> List.filter(((k, _)) => k != name); + + let new_url = set_arguments(url, args); + let href = Url.string_of_url(new_url); + + Dom_html.window##.history##pushState( + Js.null, + Js.string(""), + Js.some(Js.string(href)), + ); + }); +}; diff --git a/src/util/StringUtil.re b/src/util/StringUtil.re index a4fedde846..a4b181f1a6 100644 --- a/src/util/StringUtil.re +++ b/src/util/StringUtil.re @@ -63,3 +63,20 @@ let unescape_linebreaks: string => string = Re.Str.global_replace(Re.Str.regexp("\\\\n"), "\n"); let trim_leading = Re.Str.global_replace(Re.Str.regexp("\n[ ]*"), "\n"); + +let compress = (s: string): string => { + let result = + Js_of_ocaml.Js.Unsafe.eval_string("encodeURIComponent(`" ++ s ++ "`)") + |> Js_of_ocaml.Js.to_string; + JsUtil.log(result); + result; +}; + +let decompress = (s: string): option(string) => { + let result = + Js_of_ocaml.Js.Unsafe.eval_string("decodeURIComponent(`" ++ s ++ "`)") + |> Js_of_ocaml.Js.Optdef.to_option + |> Option.map(Js_of_ocaml.Js.to_string); + JsUtil.log(result); + result; +}; diff --git a/src/util/dune b/src/util/dune index f50e6ac0f7..db6b0b8589 100644 --- a/src/util/dune +++ b/src/util/dune @@ -1,6 +1,6 @@ (library (name util) - (libraries re base ptmap bonsai bonsai.web virtual_dom yojson) + (libraries re base ptmap bonsai bonsai.web virtual_dom yojson ezgzip) (js_of_ocaml) (instrumentation (backend bisect_ppx)) From 968b46d36265c2a6d850ebbd87cb2a383b626f1e Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Wed, 11 Dec 2024 16:30:20 -0500 Subject: [PATCH 20/23] for now, rely on text backup --- src/haz3lcore/zipper/PersistentZipper.re | 4 ++++ src/haz3lcore/zipper/Zipper.re | 2 ++ src/haz3lweb/Store.re | 12 +++++------- src/haz3lweb/Update.re | 7 ++----- src/util/StringUtil.re | 13 +++++-------- src/util/dune | 2 +- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/haz3lcore/zipper/PersistentZipper.re b/src/haz3lcore/zipper/PersistentZipper.re index a1bbc094d2..80d40b04d1 100644 --- a/src/haz3lcore/zipper/PersistentZipper.re +++ b/src/haz3lcore/zipper/PersistentZipper.re @@ -13,6 +13,10 @@ let persist = (zipper: Zipper.t) => { }; }; +let persist_text_only = (s: string) => { + {zipper: "", backup_text: s}; +}; + let unpersist = (persisted: t) => try(Sexplib.Sexp.of_string(persisted.zipper) |> Zipper.t_of_sexp) { | _ => diff --git a/src/haz3lcore/zipper/Zipper.re b/src/haz3lcore/zipper/Zipper.re index f87fb964e6..7bc34b5ae8 100644 --- a/src/haz3lcore/zipper/Zipper.re +++ b/src/haz3lcore/zipper/Zipper.re @@ -311,6 +311,8 @@ let serialize = (z: t): string => { sexp_of_t(z) |> Sexplib.Sexp.to_string; }; +let to_sexp = (z: t): Sexplib.Sexp.t => sexp_of_t(z); + let deserialize = (data: string): t => { Sexplib.Sexp.of_string(data) |> t_of_sexp; }; diff --git a/src/haz3lweb/Store.re b/src/haz3lweb/Store.re index 3ac6b2f2ba..ab08fbb9bc 100644 --- a/src/haz3lweb/Store.re +++ b/src/haz3lweb/Store.re @@ -164,13 +164,11 @@ module Scratch = { let load = (~settings: CoreSettings.t): t => { switch (JsUtil.QueryParams.get_param("scratch")) { | Some(data) => - switch (decompress(data)) { - | None => init(~settings) - | Some(data) => - try(deserialize(data, ~settings)) { - | _ => init(~settings) - } - } + let zip = decompress(data); + of_persistent( + ~settings, + (0, [PersistentZipper.persist_text_only(zip)], []), + ); | None => switch (JsUtil.get_localstore(save_scratch_key)) { | None => init(~settings) diff --git a/src/haz3lweb/Update.re b/src/haz3lweb/Update.re index 40b62ba51c..4fbc91c5ca 100644 --- a/src/haz3lweb/Update.re +++ b/src/haz3lweb/Update.re @@ -468,11 +468,8 @@ let apply = (model: Model.t, update: t, ~schedule_action): Result.t(Model.t) => | Export(EncodeScratchSlide) => Model.save(model); let editor = Editors.get_editor(model.editors); - let json_data = ScratchSlide.export(editor); - let compressed = - StringUtil.compress(json_data |> Yojson.Safe.to_string); - JsUtil.log(json_data); - JsUtil.log(compressed); + let printed = Printer.to_string_basic(editor.state.zipper); + let compressed = StringUtil.compress(printed); JsUtil.QueryParams.set_param("scratch", compressed); Ok(model); | Export(ExerciseModule) => diff --git a/src/util/StringUtil.re b/src/util/StringUtil.re index a4b181f1a6..f572a5070b 100644 --- a/src/util/StringUtil.re +++ b/src/util/StringUtil.re @@ -65,18 +65,15 @@ let unescape_linebreaks: string => string = let trim_leading = Re.Str.global_replace(Re.Str.regexp("\n[ ]*"), "\n"); let compress = (s: string): string => { + let js_string = "encodeURIComponent(`" ++ s ++ "`)"; let result = - Js_of_ocaml.Js.Unsafe.eval_string("encodeURIComponent(`" ++ s ++ "`)") - |> Js_of_ocaml.Js.to_string; - JsUtil.log(result); + Js_of_ocaml.Js.Unsafe.eval_string(js_string) |> Js_of_ocaml.Js.to_string; result; }; -let decompress = (s: string): option(string) => { +let decompress = (s: string): string => { + let js_string = "decodeURIComponent(`" ++ s ++ "`)"; let result = - Js_of_ocaml.Js.Unsafe.eval_string("decodeURIComponent(`" ++ s ++ "`)") - |> Js_of_ocaml.Js.Optdef.to_option - |> Option.map(Js_of_ocaml.Js.to_string); - JsUtil.log(result); + Js_of_ocaml.Js.Unsafe.eval_string(js_string) |> Js_of_ocaml.Js.to_string; result; }; diff --git a/src/util/dune b/src/util/dune index db6b0b8589..f50e6ac0f7 100644 --- a/src/util/dune +++ b/src/util/dune @@ -1,6 +1,6 @@ (library (name util) - (libraries re base ptmap bonsai bonsai.web virtual_dom yojson ezgzip) + (libraries re base ptmap bonsai bonsai.web virtual_dom yojson) (js_of_ocaml) (instrumentation (backend bisect_ppx)) From 422a00cf96220f15ce0edf24340e38b645fe328d Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Thu, 12 Dec 2024 13:46:02 -0500 Subject: [PATCH 21/23] debug refreshing --- browsertest/package.json | 12 +- browsertest/pnpm-lock.yaml | 275 +++++++++++++++++++++++++++++++++++ browsertest/src/extract.d.ts | 12 ++ browsertest/src/extract.js | 54 +++++++ browsertest/src/index.ts | 183 ++++++++++++----------- browsertest/src/utils.ts | 125 +--------------- browsertest/tsconfig.json | 1 + 7 files changed, 453 insertions(+), 209 deletions(-) create mode 100644 browsertest/src/extract.d.ts create mode 100644 browsertest/src/extract.js diff --git a/browsertest/package.json b/browsertest/package.json index 6ac7e7b2a1..b0d660df0b 100644 --- a/browsertest/package.json +++ b/browsertest/package.json @@ -6,8 +6,8 @@ "scripts": { "build:hazel": "cd .. && make deps && make release", "dev:hazel": "cd .. && make serve", - "execute:host": "npm run dev:hazel > /dev/null 2>&1 & tsc --outDir dist && cd dist && node src/index.js; kill -9 $(lsof -t -i:8000)", - "execute": "tsc --outDir dist && cd dist && node src/index.js", + "execute:host": "npm run dev:hazel > /dev/null 2>&1 & tsx src/index.ts; kill -9 $(lsof -t -i:8000)", + "execute": "tsx src/index.ts", "test": "vitest", "style": "prettier '**/*.ts' --write ." }, @@ -24,6 +24,8 @@ }, "devDependencies": { "prettier": "^3.3.3", - "ts-node": "^10.9.2" - } -} + "ts-node": "^10.9.2", + "tsx": "^4.19.2" + }, + "packageManager": "pnpm@9.14.4+sha512.c8180b3fbe4e4bca02c94234717896b5529740a6cbadf19fa78254270403ea2f27d4e1d46a08a0f56c89b63dc8ebfd3ee53326da720273794e6200fcf0d184ab" +} \ No newline at end of file diff --git a/browsertest/pnpm-lock.yaml b/browsertest/pnpm-lock.yaml index 099c778dab..176b02bf3b 100644 --- a/browsertest/pnpm-lock.yaml +++ b/browsertest/pnpm-lock.yaml @@ -33,6 +33,9 @@ importers: ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@22.7.1)(typescript@5.6.3) + tsx: + specifier: ^4.19.2 + version: 4.19.2 packages: @@ -58,138 +61,282 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@ffmpeg-installer/darwin-arm64@4.1.5': resolution: {integrity: sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==} cpu: [arm64] @@ -587,6 +734,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -655,6 +807,9 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -861,6 +1016,9 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + rollup@4.23.0: resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -993,6 +1151,11 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + typed-query-selector@2.12.0: resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} @@ -1178,72 +1341,144 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + '@ffmpeg-installer/darwin-arm64@4.1.5': optional: true @@ -1623,6 +1858,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -1689,6 +1951,10 @@ snapshots: dependencies: pump: 3.0.2 + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -1935,6 +2201,8 @@ snapshots: resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + rollup@4.23.0: dependencies: '@types/estree': 1.0.6 @@ -2083,6 +2351,13 @@ snapshots: tslib@2.7.0: {} + tsx@4.19.2: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + typed-query-selector@2.12.0: {} typescript@5.6.3: {} diff --git a/browsertest/src/extract.d.ts b/browsertest/src/extract.d.ts new file mode 100644 index 0000000000..3231728f32 --- /dev/null +++ b/browsertest/src/extract.d.ts @@ -0,0 +1,12 @@ +// extractInBrowser.d.ts +interface ExtractResult { + text: string; + mapping: Array<{ + index: number; + selectorPath: string; + }>; +} + +declare function extractInBrowser(selector: string): ExtractResult; + +export = extractInBrowser; diff --git a/browsertest/src/extract.js b/browsertest/src/extract.js new file mode 100644 index 0000000000..595d380884 --- /dev/null +++ b/browsertest/src/extract.js @@ -0,0 +1,54 @@ +// This file should contain plain JavaScript code that can run in the browser. +// It exports a function that takes a `selector` and extracts text and mapping. + +module.exports = function(selector) { + var parent = document.querySelector(selector); + if (!parent) { + throw new Error("Parent not found"); + } + + var textContent = ""; + var mapping = []; + + function getCssPath(el) { + var path = []; + var current = el; + while (current && current !== parent) { + var selector = current.tagName.toLowerCase(); + if (current.id) { + selector += "#" + current.id; + } else { + if (current.className) { + selector += "." + current.className.trim().replace(/\s+/g, "."); + } + var siblings = current.parentNode ? Array.from(current.parentNode.children) : []; + var index = siblings.indexOf(current); + selector += ":nth-child(" + (index + 1) + ")"; + } + path.unshift(selector); + current = current.parentElement; + } + return path.join(" > "); + } + + function traverse(element) { + var childNodes = element.childNodes; + for (var i = 0; i < childNodes.length; i++) { + var child = childNodes[i]; + if (child.nodeType === Node.TEXT_NODE && child.textContent) { + var baseIndex = textContent.length; + textContent += child.textContent; + var selectorPath = getCssPath(element); + for (var j = 0; j < child.textContent.length; j++) { + mapping.push({ index: baseIndex + j, selectorPath: selectorPath }); + } + } else if (child.nodeType === Node.ELEMENT_NODE) { + traverse(child); + } + } + } + + traverse(parent); + + return { text: textContent, mapping: mapping }; +}; diff --git a/browsertest/src/index.ts b/browsertest/src/index.ts index 9306a98cd4..a764e9d0e6 100644 --- a/browsertest/src/index.ts +++ b/browsertest/src/index.ts @@ -2,11 +2,10 @@ import puppeteer, { Page, ElementHandle, Browser } from "puppeteer"; import { PuppeteerScreenRecorder } from "puppeteer-screen-recorder"; import { emulateKeyCombination, - findSpanByQuery, - findSpanByRowCol, + extractTextAndMapping } from "./utils"; -process.chdir('../out'); +process.chdir('./out'); const RecorderConfig = { followNewTab: true, @@ -22,7 +21,7 @@ const RecorderConfig = { autopad: { color: "black", }, - aspectRatio: "1:1", + aspectRatio: "2:1", }; function wait(time: number) { @@ -97,8 +96,7 @@ class Cell { } } - async typeString(string: string, delay = 0, waitForCompletion = false) { - // select the code container + async typeString(string: string, delay = 0) { const codeContainer = await this.elementHandle.$( ".code-container .code-text", ); @@ -117,50 +115,47 @@ class Cell { } } - async clickRowCol(row: number, col: number) { - const codeContainer = await this.elementHandle.$( - ".code-container .code-text", - ); - if (!codeContainer) throw new Error("Code container not found"); - - const html = await codeContainer.evaluate((el) => el.innerHTML); - console.log("html:", html); - const span = findSpanByRowCol(html, row, col); - - if (span) { - await span.click(); - } else { - throw new Error(`Span not found at row ${row} and col ${col}`); - } - } - async cursorToEnd() { - // press right arrow key until cursor reaches end const codeContainer = await this.elementHandle.$( ".code-container .code-text", ); if (!codeContainer) throw new Error("Code container not found"); + // Press the right arrow key multiple times to move cursor to end. for (let i = 0; i < 50; i++) { await codeContainer.press("ArrowRight"); } } - async clickQuery(query: string) { - const codeContainer = await this.elementHandle.$( - ".code-container .code-text", - ); - if (!codeContainer) throw new Error("Code container not found"); - - const html = await codeContainer.evaluate((el) => el.innerHTML); - console.log("html:", html); - const span = findSpanByQuery(html, query); + /** + * Searches the cell's code container text for a given substring and clicks on the position + * at the start or end of that substring. Uses extractTextAndMapping to map from text indices + * to elements, then clicks the corresponding element. This won't necessarily guarantee cursor + * placement at a precise character boundary, but it should get you close. + */ + async clickAtSubstring(substring: string, position: "start" | "end" = "end") { + const containerSelector = ".code-container .code-text"; + const { text, mapping } = await extractTextAndMapping(this.page, containerSelector); + + const index = text.indexOf(substring); + if (index === -1) { + throw new Error(`Substring "${substring}" not found`); + } + const charIndex = position === "start" ? index : index + substring.length - 1; + const target = mapping.find((m) => m.index === charIndex); + if (!target) { + throw new Error(`Mapping not found for character index ${charIndex}`); + } - if (span) { - await span.click(); - } else { - throw new Error(`Span not found for query "${query}"`); + const elementHandle = await this.page.$(target.selectorPath); + if (!elementHandle) { + throw new Error(`Element at selector path ${target.selectorPath} not found`); } + + console.log(`Clicking at character ${charIndex} in substring "${substring}"`); + + // Click the element that represents that character position + await elementHandle.click(); } } @@ -220,6 +215,7 @@ class HazelController { console.log("Enabling projector"); const toggleSwitch = await this.page?.$(".toggle-knob"); if (toggleSwitch) { + console.log("Clicking toggle switch", toggleSwitch); await toggleSwitch.click(); } else { throw new Error("Toggle switch not found"); @@ -264,54 +260,73 @@ class HazelController { } } -//const livelit = `(^popup("the haters are ill-prepared"))`; +// const livelit = ` +// let emotion = (^emotion(50)) in +// case (emotion) +// | "happy" => "Hooray! What a pleasant day!" +// | "neutral" => "Things are medium, I suppose." +// | "sad" => "Sorrow sorrow, today and tomorrow." +// | _ => "You have broken my trust, and frankly, our friendship" +// end +// `; + +const invocation = `(^slider(50))`; + const livelit = ` - let emotion = (^emotion(50)) in - case (emotion) - | "happy" => "Hooray! What a pleasant day!" - | "neutral" => "Things are medium, I suppose." - | "sad" => "Sorrow sorrow, today and tomorrow." - | _ => "You have broken my trust, and frankly, our friendship" - end + let slider = ${invocation} in + case (slider) + | n => "Slider value: " ++ string_of_int(n) + end `; -// Usage example + (async () => { const controller = new HazelController(); - await controller.launch("http://localhost:8000", true); - - // Select "Exercises" mode - await controller.selectMode("Scratch"); - - // Get all cells - const cells = await controller.getCells(); - - // edit the first cell with id "YourImpl" - const scratchCell = cells[0]; - - await scratchCell.clearContent(); - await scratchCell.typeString(livelit, 25); - await wait(250); - // go to the end line - await scratchCell.cursorToEnd(); - await wait(250); - - // projector "livelit" - await controller.setProjectorMode("livelit"); - await wait(500); - // await controller.enableProjector(); - // await wait(1000); - - // save screenshot - await controller.page?.screenshot({ path: `screenshot-${new Date().getTime()}.png` }); - - // go to popup - const pages = await controller.browser!.pages(); // get all open pages by the browser - const popup = pages[pages.length - 1]; - await popup.bringToFront(); - - const zoomCommand = `document.body.style.fontSize = "72px";`; - await popup.evaluate(zoomCommand); - await wait(5000); - // Close browser - await controller.close(); -})(); + try { + await controller.launch("http://localhost:8000", true); + + // Select "Exercises" mode + await controller.selectMode("Scratch"); + + // Get all cells + const cells = await controller.getCells(); + + const scratchCell = cells[0]; + await scratchCell.clearContent(); + await scratchCell.typeString(livelit, 25); + await wait(250); + await scratchCell.cursorToEnd(); + await wait(250); + + // Click at the end of (^emotion(50)) + await scratchCell.clickAtSubstring(invocation, "end"); + await wait(250); + + // projector "livelit" + await controller.setProjectorMode("livelit"); + await wait(500); + + // save screenshot + await controller.page?.screenshot({ path: `screenshot-${Date.now()}.png` }); + + // // Go to popup + // const pages = await controller.browser!.pages(); + // const popup = pages[pages.length - 1]; + // await popup.bringToFront(); + + // const zoomCommand = `document.body.style.fontSize = "72px";`; + // await popup.evaluate(zoomCommand); + await wait(1000); + + // refresh page + await controller.page?.reload(); + + // wait for page to load + await wait(5000); + + // Close browser normally if all is successful + await controller.close(); + } catch (error) { + console.error('An error occurred:', error); + // Do not close the browser here, so it remains open for debugging. + } +})(); \ No newline at end of file diff --git a/browsertest/src/utils.ts b/browsertest/src/utils.ts index 1c7e5c3023..0b8146eb45 100644 --- a/browsertest/src/utils.ts +++ b/browsertest/src/utils.ts @@ -1,4 +1,5 @@ import { Page, ElementHandle } from "puppeteer"; +import extractInBrowser from "./extract"; /** * Emulates a key combination (e.g., Ctrl+A, Ctrl+C) by dispatching custom keyboard @@ -82,123 +83,7 @@ export async function emulateKeyCombination( ); } -import { JSDOM } from "jsdom"; - -interface SpanInfo { - element: HTMLElement; - startOffset: number; - endOffset: number; -} - -export function parseCodeString(codeString: string): { - text: string; - spans: SpanInfo[]; -} { - const dom = new JSDOM(codeString, { url: "http://localhost" }); - const body = dom.window.document.body; - - const spans: SpanInfo[] = []; - let text = ""; - let offset = 0; - - function processNode(node: Node) { - if (node.nodeType === dom.window.Node.TEXT_NODE) { - const nodeText = node.textContent || ""; - if (!/^\s*$/.test(nodeText)) { - // Only add text nodes that are not pure whitespace - text += nodeText; - offset += nodeText.length; - } - } else if (node.nodeType === dom.window.Node.ELEMENT_NODE) { - const element = node as HTMLElement; - if (element.classList.contains("linebreak")) { - text += "\n"; - offset += 1; - } else if (element.classList.contains("whitespace")) { - // Add the whitespace character(s) - const whitespaceText = element.textContent || " "; - text += whitespaceText; - offset += whitespaceText.length; - // Optionally, do not add whitespace elements to the spans - // If you prefer to track them, you can include the following lines: - // const startOffset = offset - whitespaceText.length; - // const endOffset = offset; - // spans.push({ element: element, startOffset, endOffset }); - } else { - const startOffset = offset; - for (let i = 0; i < element.childNodes.length; i++) { - processNode(element.childNodes[i]); - } - const endOffset = offset; - spans.push({ element: element, startOffset, endOffset }); - } - } - } - - for (let i = 0; i < body.childNodes.length; i++) { - processNode(body.childNodes[i]); - } - - return { text, spans }; -} - -export function findSpanByRowCol( - codeString: string, - row: number, - col: number, -): HTMLElement | null { - const { text, spans } = parseCodeString(codeString); - - // Convert row and col to character offset - const lines = text.split("\n"); - if (row < 1 || row > lines.length) { - return null; // Row out of range - } - const line = lines[row - 1]; - if (col < 1 || col > line.length + 1) { - return null; // Column out of range - } - - let charOffset = 0; - for (let i = 0; i < row - 1; i++) { - charOffset += lines[i].length + 1; // +1 for the newline character - } - charOffset += col - 1; - - // Find the span that covers this offset - for (const spanInfo of spans) { - if ( - charOffset >= spanInfo.startOffset && - charOffset < spanInfo.endOffset - ) { - return spanInfo.element; - } - } - - return null; -} - -export function findSpanByQuery( - codeString: string, - query: string, -): HTMLElement | null { - const { text, spans } = parseCodeString(codeString); - - const index = text.indexOf(query); - if (index === -1) { - return null; // Query not found - } - - // Find the first span that covers any character in the query - for (const spanInfo of spans) { - if ( - (index >= spanInfo.startOffset && index < spanInfo.endOffset) || - (spanInfo.startOffset > index && - spanInfo.startOffset < index + query.length) - ) { - return spanInfo.element; - } - } - - return null; -} +export async function extractTextAndMapping(page: Page, parentSelector: string) { + const { text, mapping } = await page.evaluate(extractInBrowser, parentSelector); + return { text, mapping }; +} \ No newline at end of file diff --git a/browsertest/tsconfig.json b/browsertest/tsconfig.json index 7ff5b869fd..52ecb12a84 100644 --- a/browsertest/tsconfig.json +++ b/browsertest/tsconfig.json @@ -4,6 +4,7 @@ "noImplicitAny": true, "removeComments": false, "preserveConstEnums": true, + "esModuleInterop": true, "sourceMap": true, "outDir": "./dist", "rootDir": "./", From 68c10a63f21c1db17e0f24fa0c3f0fdb2fd00740 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Fri, 17 Jan 2025 10:24:11 -0500 Subject: [PATCH 22/23] fix for #1440 --- src/haz3lcore/tiles/Livelit.re | 23 ++++++-- .../zipper/projectors/LivelitProj.re | 55 +++++++++++-------- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 87279c3fa5..83c6e09d9f 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -204,6 +204,20 @@ let not_found: t = { size: 20, }; +let syntax_error: t = { + name: "syntax_error", + expansion_t: Typ.temp(Unknown(Internal)), + expansion_f: (_model: UExp.t) => + DHExp.fresh(String("Syntax error -- are statics enabled?")), + model_t: Typ.temp(Unknown(Internal)), + projector: (_model: list(model_piece), _) => + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("Syntax error -- are statics enabled?")], + ), + size: 20, +}; + /* Game livelit definition */ let game: t = { name: "game", @@ -1273,7 +1287,6 @@ popupComm.setHandlePopupMessage(function(data) { size: 20, }; let livelits: list(t) = [ - not_found, slider, js, timestamp, @@ -1282,16 +1295,18 @@ let livelits: list(t) = [ game, websocket, multiplayer_game, + syntax_error, ]; -let find_livelit = (livelit_name: string): t => { +let find_livelit = (livelit_name: string): t => switch (List.find_opt(l => l.name == livelit_name, livelits)) { | Some(l) => l | None => - print_endline("Livelit " ++ livelit_name ++ " not found"); + print_endline("Livelit " ++ livelit_name ++ " not found; options:"); + // print options + List.iter(l => print_endline(l.name), livelits); not_found; }; -}; /* let slider = (^slider(50)) in diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 18579232dc..5a08303f9b 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -96,7 +96,11 @@ module M: Projector = { "LivelitProj: Not a Parens term -- " ++ UExp.show(exp.term), ) }; - | _ => failwith("LivelitProj: Not an InfoExp term") + | _ => + print_endline( + "Warning - LivelitProj.placeholder: Not an InfoExp term", + ); + "syntax_error"; }; let ll = Livelit.find_livelit(llname); Inline(ll.size); @@ -136,36 +140,39 @@ module M: Projector = { "LivelitProj: Not a Parens term -- " ++ UExp.show(exp.term), ) }; - | _ => failwith("LivelitProj: Not an InfoExp term") + | _ => + print_endline("Warning - LivelitProj.view: Not an InfoExp term"); + ("syntax_error", []); }; - /* Ignore the first piece, which is the livelit invocation */ - let pieces = - List.tl(getLeafPieces(info.syntax, ~ignored_labels=[[","]])); let ll = Livelit.find_livelit(ll); - // print_endline("size of args: " ++ string_of_int(List.length(args))); - // print_endline("size of pieces: " ++ string_of_int(List.length(pieces))); - // print_endline( - // "types of pieces: " - // ++ (List.map(Tile.show, pieces) |> String.concat(", ")), - // ); - - /* Combine args and pieces into model_piece records */ - let model_pieces = - List.map2( - (arg, piece): Livelit.model_piece => {{model: arg, piece}}, - args, - pieces, + if (ll.name == "syntax_error") { + Node.div( + ~attrs=[Attr.class_("livelit")], + [Node.text("Syntax error -- are statics enabled?")], ); + } else { + /* Ignore the first piece, which is the livelit invocation */ + let pieces = + List.tl(getLeafPieces(info.syntax, ~ignored_labels=[[","]])); - let replace = (piece: Piece.tile) => { - let newSyntax = replacePieceInSyntax(info.syntax, piece); - parent(SetSyntax(newSyntax)); - }; + /* Combine args and pieces into model_piece records */ + let model_pieces = + List.map2( + (arg, piece): Livelit.model_piece => {{model: arg, piece}}, + args, + pieces, + ); - /* Call the projector function */ - ll.projector(model_pieces, replace); + let replace = (piece: Piece.tile) => { + let newSyntax = replacePieceInSyntax(info.syntax, piece); + parent(SetSyntax(newSyntax)); + }; + + /* Call the projector function */ + ll.projector(model_pieces, replace); + }; }; let focus = ((id: Id.t, d: option(Direction.t))) => { JsUtil.get_elem_by_id(of_id(id))##focus; From 7121a36530028b6f12abd2d1168e2d1d6556d643 Mon Sep 17 00:00:00 2001 From: Gregory Croisdale Date: Fri, 17 Jan 2025 14:51:47 -0500 Subject: [PATCH 23/23] cleaned code --- src/haz3lcore/dune | 1 + src/haz3lcore/tiles/Livelit.re | 1388 +++-------------- .../zipper/projectors/LivelitProj.re | 2 +- 3 files changed, 192 insertions(+), 1199 deletions(-) diff --git a/src/haz3lcore/dune b/src/haz3lcore/dune index 812c2a68d4..3e694cd1c2 100644 --- a/src/haz3lcore/dune +++ b/src/haz3lcore/dune @@ -18,6 +18,7 @@ (env (dev (js_of_ocaml + (link_flags testjs.js) (flags :standard --debuginfo --noinline --dynlink --linkall --sourcemap))) (release (js_of_ocaml diff --git a/src/haz3lcore/tiles/Livelit.re b/src/haz3lcore/tiles/Livelit.re index 83c6e09d9f..8f5effde1d 100644 --- a/src/haz3lcore/tiles/Livelit.re +++ b/src/haz3lcore/tiles/Livelit.re @@ -1,6 +1,7 @@ open Util; open Virtual_dom.Vdom; +/* A utility function for putting a string into a tile. */ type model_piece = { model: UExp.t, piece: Piece.tile, @@ -15,6 +16,7 @@ let put: (string, Uuidm.t) => Piece.tile = }; }; +/* Type for a livelit */ [@deriving (show({with_path: false}), sexp, yojson)] type t = { name: string, @@ -24,9 +26,10 @@ type t = { projector: (list(model_piece), Piece.tile => Ui_effect.t(unit)) => Virtual_dom.Vdom.Node.t, - size: int, + size: ProjectorBase.shape, }; +/* Slider livelit */ let slider: t = { name: "slider", expansion_t: Typ.temp(Int), @@ -48,133 +51,104 @@ let slider: t = { ~attrs=[Attr.class_("livelit")], [ Util.Web.range( - ~attrs=[Attr.on_input((_, v) => {update(put(v, piece.id))})], + ~attrs=[Attr.on_input((_, v) => update(put(v, piece.id)))], string_of_int(n), ), ], ); }, - size: 20, + size: Inline(20), }; -let double_slider: t = { - name: "double_slider", - expansion_t: Typ.temp(Prod([Typ.temp(Int), Typ.temp(Int)])), +/* JS livelit */ +let js: t = { + name: "js", + expansion_t: Typ.temp(String), expansion_f: (model: UExp.t) => switch (model.term) { - | Tuple([t1, t2]) => DHExp.fresh(Tuple([t1, t2])) + | Tuple([_code, result]) => DHExp.fresh(Tuple([result])) | _ => DHExp.fresh(Undefined) }, - model_t: Typ.temp(Prod([Typ.temp(Int), Typ.temp(Int)])), + model_t: Typ.temp(Prod([Typ.temp(String), Typ.temp(String)])), projector: (models: list(model_piece), update) => { - // Pattern match directly on models to extract the two elements - let ((model_1, piece_1), (model_2, piece_2)) = + /* We expect exactly two model pieces: (code, result). */ + let ((code_model, _code_piece), (_result_model, result_piece)) = switch (models) { - | [{model: m1, piece: p1}, {model: m2, piece: p2}] => ( - (m1, p1), - (m2, p2), + | [{model: m_code, piece: p_code}, {model: m_result, piece: p_result}] => ( + (m_code, p_code), + (m_result, p_result), ) - | _ => failwith("Expected exactly two model pieces") + | _ => failwith("JS livelit: expected two model pieces (code, result)") }; - // Pattern match on model terms to extract integers directly - let (n1, n2) = - switch (model_1.term, model_2.term) { - | (Int(n1), Int(n2)) => (n1, n2) - | _ => failwith("Double slider livelit: not given pair of ints") + /* Extract the user-supplied code from the first piece. */ + let code = + switch (code_model.term) { + | String(s) => s + | _ => failwith("JS livelit: 'code' is not a string") }; - Node.div( - ~attrs=[Attr.class_("livelit")], - [ - Util.Web.range( - ~attrs=[Attr.on_input((_, v) => update(put(v, piece_1.id)))], - string_of_int(n1), - ), - Util.Web.range( - ~attrs=[Attr.on_input((_, v) => update(put(v, piece_2.id)))], - string_of_int(n2), - ), - ], - ); - }, - size: 20, -}; - -let script = (s: string) => { - Node.create("script", [Node.text(s)]); -}; + /* We'll store the updated result here when code is run. */ + let hidden_result_id = "hidden-result-test"; // ++ Uuidm.to_string(result_piece.id); + + /* This script: + - Reads `code` + - Executes it via `eval` (or your function of choice) + - Stores the result into the second hidden input + - Dispatches an `input` event so we can update the tile’s model + */ + let result = Js_of_ocaml.Js.Unsafe.eval_string(code); + + let hidden_input = + Node.input( + ~attrs=[ + Attr.id(hidden_result_id), + Attr.type_("hidden"), + Attr.value(""), + /* When the script is done, it sets this to the new result. */ + Attr.on_input((_, newVal) => { + /* Update the second piece’s model with the new result. */ + update( + put(newVal, result_piece.id), + ) + }), + ], + (), + ); -let js: t = { - name: "js", - expansion_t: Typ.temp(String), - expansion_f: (model: UExp.t) => - switch (model.term) { - | String(s) => DHExp.fresh(String(s)) - | _ => DHExp.fresh(Undefined) - }, - model_t: Typ.temp(String), - projector: (model: list(model_piece), _parent) => { - let {model, piece} = List.nth(model, 0); - let s = - switch (model.term) { - | String(s) => s - | _ => failwith("JS livelit: not given string") - }; + let out = + Node.div( + ~attrs=[Attr.class_("livelit")], + [ + /* Hidden input to store the current result. */ + hidden_input, + /* compute button */ + Node.button( + ~attrs=[ + Attr.on_click(_ => + Js_of_ocaml.Js.Unsafe.eval_string( + "document.getElementById('" + ++ hidden_result_id + ++ "').value = String(" + ++ result + ++ ")", + ) + ), + ], + [Node.text("Compute")], + ), + /* A bit of UI showing code and/or result. */ + Node.div([Node.text("Code: " ++ code)]), + Node.div([Node.text("Result: " ++ result)]), + ], + ); - Node.div( - ~attrs=[Attr.class_("livelit")], - [script(s), Node.text("JS livelit")], - ); + out; }, - size: 20, + size: Inline(20), }; -/* General function to create a popup with communication */ -let create_popup_with_communication = (~popup_content: string): string => - {| -(function() { - const options = "width=800,height=600,scrollbars=yes,resizable=yes"; - const popup = window.open("", "_blank", options); - var handlePopupMessage = null; - - if (popup) { - popup.document.open(); - popup.document.write(`|} - ++ popup_content - ++ {|`); - popup.document.close(); - - // Function to update the popup - function updatePopup(variable, newValue) { - if (popup) { - popup.postMessage({ variable: variable, value: newValue }, '*'); - } - } - - // Set up listener for messages from the popup - window.addEventListener('message', function(event) { - if (event.source === popup && event.data) { - // Handle message from popup - if (handlePopupMessage) { - handlePopupMessage(event.data); - } - } - }, false); - - // Return an object with methods - return { - updatePopup: updatePopup, - setHandlePopupMessage: function(handler) { - handlePopupMessage = handler; - } - }; - } else { - return null; - } -})(); -|}; - +/* Timestamp livelit */ let timestamp: t = { name: "timestamp", expansion_t: Typ.temp(Int), @@ -186,24 +160,10 @@ let timestamp: t = { ~attrs=[Attr.class_("livelit")], [Node.text("Timestamp livelit")], ), - size: 20, -}; - -/* Emotion livelit definition */ - -let not_found: t = { - name: "not_found", - expansion_t: Typ.temp(Unknown(Internal)), - expansion_f: (_model: UExp.t) => DHExp.fresh(String("No livelit found")), - model_t: Typ.temp(Unknown(Internal)), - projector: (_model: list(model_piece), _) => - Node.div( - ~attrs=[Attr.class_("livelit")], - [Node.text("No livelit found")], - ), - size: 20, + size: Inline(20), }; +/* Syntax error livelit */ let syntax_error: t = { name: "syntax_error", expansion_t: Typ.temp(Unknown(Internal)), @@ -215,508 +175,14 @@ let syntax_error: t = { ~attrs=[Attr.class_("livelit")], [Node.text("Syntax error -- are statics enabled?")], ), - size: 20, -}; - -/* Game livelit definition */ -let game: t = { - name: "game", - expansion_t: - Typ.temp( - Prod([ - Typ.temp(Int), // Player X position - Typ.temp(Int), // Player Y position - Typ.temp(Int), // Energy - Typ.temp(Int) // Random Seed - ]), - ), - expansion_f: (model: UExp.t) => - switch (model.term) { - | Tuple([x, y, energy, seed]) => - DHExp.fresh(Tuple([x, y, energy, seed])) - | _ => DHExp.fresh(Undefined) - }, - model_t: - Typ.temp( - Prod([ - Typ.temp(Int), // Player X position - Typ.temp(Int), // Player Y position - Typ.temp(Int), // Energy - Typ.temp(Int) // Random Seed - ]), - ), - projector: (models: list(model_piece), update) => { - // Extract the model pieces - let ( - (model_x, piece_x), - (model_y, piece_y), - (model_energy, piece_energy), - (model_seed, piece_seed), - ) = - switch (models) { - | [ - {model: m_x, piece: p_x}, - {model: m_y, piece: p_y}, - {model: m_e, piece: p_e}, - {model: m_s, piece: p_s}, - ] => ( - (m_x, p_x), - (m_y, p_y), - (m_e, p_e), - (m_s, p_s), - ) - | _ => failwith("Expected exactly four model pieces") - }; - - // Extract the values - let x = - switch (model_x.term) { - | Int(n) => n - | _ => failwith("Game livelit: player X position is not an int") - }; - let y = - switch (model_y.term) { - | Int(n) => n - | _ => failwith("Game livelit: player Y position is not an int") - }; - let energy = - switch (model_energy.term) { - | Int(n) => n - | _ => failwith("Game livelit: energy is not an int") - }; - let seed = - switch (model_seed.term) { - | Int(n) => n - | _ => failwith("Game livelit: random seed is not an int") - }; - - /* Popup content with the game */ - let popup_content = - {| - - - - - Maze Game - - - -

    Maze Game

    - -

    Energy:

    - - - - -|}; - - /* JavaScript code to open the popup and set up communication */ - let popupScript = - "var popupComm = " - ++ create_popup_with_communication(~popup_content) - ++ ";"; - - /* JavaScript code to handle messages from the popup */ - let handlePopupMessageJs = - {| -popupComm.setHandlePopupMessage(function(data) { - if (data.variable && data.value !== undefined) { - // Mapping from variable names to input IDs - var inputIds = { - x: '|} - ++ "hidden-input-x-" - ++ Uuidm.to_string(piece_x.id) - ++ {|', - y: '|} - ++ "hidden-input-y-" - ++ Uuidm.to_string(piece_y.id) - ++ {|', - energy: '|} - ++ "hidden-input-energy-" - ++ Uuidm.to_string(piece_energy.id) - ++ {|', - seed: '|} - ++ "hidden-input-seed-" - ++ Uuidm.to_string(piece_seed.id) - ++ {|' - }; - var inputId = inputIds[data.variable]; - if (inputId) { - var input = document.getElementById(inputId); - if (input) { - input.value = data.value; - var event = new Event('input', { bubbles: true }); - input.dispatchEvent(event); - } - } - } else if (data.request === 'getEnergy') { - // Simulate click on the "Get More Energy" button - var getEnergyButton = document.getElementById('|} - ++ "get-energy-button-" - ++ Uuidm.to_string(piece_energy.id) - ++ {|'); - if (getEnergyButton) { - getEnergyButton.click(); - } - } -}); -|}; - - /* Helper function to send a message to the popup */ - let send_message_to_popup = (variable: string, value: string): unit => { - let js_code = - "if (popupComm) { popupComm.updatePopup('" - ++ variable - ++ "', '" - ++ value - ++ "'); }"; - Js_of_ocaml.Js.Unsafe.eval_string(js_code); - }; - - /* Return the node */ - Node.div( - ~attrs=[Attr.class_("livelit")], - [ - /* Include the scripts */ - script(popupScript), - script(handlePopupMessageJs), - /* Hidden input elements */ - Node.input( - ~attrs=[ - Attr.type_("hidden"), - Attr.id("hidden-input-x-" ++ Uuidm.to_string(piece_x.id)), - Attr.value(string_of_int(x)), - Attr.on_input((_, v) => { - // Update the model for player x position - update( - put(v, piece_x.id), - ) - }), - ], - (), - ), - Node.input( - ~attrs=[ - Attr.type_("hidden"), - Attr.id("hidden-input-y-" ++ Uuidm.to_string(piece_y.id)), - Attr.value(string_of_int(y)), - Attr.on_input((_, v) => { - // Update the model for player y position - update( - put(v, piece_y.id), - ) - }), - ], - (), - ), - Node.input( - ~attrs=[ - Attr.type_("hidden"), - Attr.id( - "hidden-input-energy-" ++ Uuidm.to_string(piece_energy.id), - ), - Attr.value(string_of_int(energy)), - Attr.on_input((_, v) => { - // Update the model for energy - update(put(v, piece_energy.id)) - }), - ], - (), - ), - Node.input( - ~attrs=[ - Attr.type_("hidden"), - Attr.id("hidden-input-seed-" ++ Uuidm.to_string(piece_seed.id)), - Attr.value(string_of_int(seed)), - Attr.on_input((_, v) => { - // Send new seed to popup to regenerate maze - send_message_to_popup("seed", v); - // Update the model for seed - update(put(v, piece_seed.id)); - }), - ], - (), - ), - /* Button to get more energy */ - Node.button( - ~attrs=[ - Attr.id( - "get-energy-button-" ++ Uuidm.to_string(piece_energy.id), - ), - Attr.on_click(_event => { - // Increase energy - let new_energy = energy + 10; - // Send updated energy to popup - send_message_to_popup("energy", string_of_int(new_energy)); - // Update the model - update(put(string_of_int(new_energy), piece_energy.id)); - }), - ], - [Node.text("Get More Energy")], - ), - ], - ); - }, - size: 20, + size: Inline(20), }; +/* Inline Emotion livelit + - Draws a face with eyes and a mouth + - Shows a slider below the face + - The mouth shape changes based on the slider’s value. + */ let emotion: t = { name: "emotion", expansion_t: Typ.temp(String), @@ -745,635 +211,161 @@ let emotion: t = { | _ => failwith("Emotion livelit: not given int") }; - /* Popup content with its own slider */ - let popup_content = - {| - - - - - Emotion Popup - - - -
    - - - - -|}; - - /* JavaScript code to open the popup and set up communication */ - let popupScript = - "var popupComm = " - ++ create_popup_with_communication(~popup_content) - ++ ";"; - - /* JavaScript code to handle messages from the popup */ - let hidden_input_id = "hidden-input-" ++ Uuidm.to_string(piece.id); - let handlePopupMessageJs = - {| -popupComm.setHandlePopupMessage(function(data) { - if (data.variable === 'emotionValue' && data.value !== undefined) { - // Update the hidden input value and dispatch input event - var input = document.getElementById('|} - ++ hidden_input_id - ++ {|'); - if (input) { - input.value = data.value; - var event = new Event('input', { bubbles: true }); - input.dispatchEvent(event); - } - } -}); -|}; - - /* Helper function to send a message to the popup */ - let send_message_to_popup = (variable: string, value: string): unit => { - let js_code = - "if (popupComm) { popupComm.updatePopup('" - ++ variable - ++ "', '" - ++ value - ++ "'); }"; - Js_of_ocaml.Js.Unsafe.eval_string(js_code); - }; - - /* Return the node */ Node.div( ~attrs=[Attr.class_("livelit")], [ - /* Include the scripts */ - script(popupScript), - script(handlePopupMessageJs), - /* Hidden input element */ - Node.input( + Node.create_svg( + "svg", ~attrs=[ - Attr.type_("hidden"), - Attr.id(hidden_input_id), - Attr.value(string_of_int(n)), - Attr.on_input((_, v) => { - /* Update the model */ - update(put(v, piece.id)) - }), + Attr.create("width", "200"), + Attr.create("height", "200"), + ], + [ + Node.create_svg( + "circle", + ~attrs=[ + Attr.create("cx", "100"), + Attr.create("cy", "100"), + Attr.create("r", "90"), + Attr.create("fill", "yellow"), + Attr.create("stroke", "black"), + ], + [], + ), + Node.create_svg( + "circle", + ~attrs=[ + Attr.create("cx", "65"), + Attr.create("cy", "80"), + Attr.create("r", "10"), + Attr.create("fill", "black"), + ], + [], + ), + Node.create_svg( + "circle", + ~attrs=[ + Attr.create("cx", "135"), + Attr.create("cy", "80"), + Attr.create("r", "10"), + Attr.create("fill", "black"), + ], + [], + ), + Node.create_svg( + "path", + ~attrs=[ + Attr.create("d", pathData), + Attr.create("stroke", "black"), + Attr.create("fill", "transparent"), + Attr.create("stroke-width", "5"), + ], + [], + ), ], - (), ), - /* Visible slider in the main window */ Util.Web.range( ~attrs=[ - Attr.class_("livelit slider"), - Attr.id(Uuidm.to_string(piece.id)), - Attr.on_input((_, v) => { - /* Send message to the popup */ - send_message_to_popup("emotionValue", v); - /* Update the model */ - update(put(v, piece.id)); - }), + Attr.value(string_of_int(n)), + Attr.on_input((_, v) => update(put(v, piece.id))), ], + ~min="0", + ~max="100", string_of_int(n), ), ], ); }, - size: 20, + size: Block({row: 10, col: 20}), }; -let websocket: t = { - name: "websocket", - expansion_t: - Typ.temp( - Prod([Typ.temp(String), Typ.temp(String), Typ.temp(String)]), - ), +let fetch_url: t = { + name: "fetch_url", + expansion_t: Typ.temp(String), expansion_f: (model: UExp.t) => switch (model.term) { - | Tuple([url, send_msg, recv_msg]) => - DHExp.fresh(Tuple([url, send_msg, recv_msg])) + | String(s) => DHExp.fresh(String(s)) | _ => DHExp.fresh(Undefined) }, - model_t: - Typ.temp( - Prod([Typ.temp(String), Typ.temp(String), Typ.temp(String)]), - ), - projector: (models: list(model_piece), update) => { - let ( - (model_url, piece_url), - (model_send, piece_send), - (model_recv, piece_recv), - ) = - switch (models) { - | [ - {model: m1, piece: p1}, - {model: m2, piece: p2}, - {model: m3, piece: p3}, - ] => ( - (m1, p1), - (m2, p2), - (m3, p3), - ) - | _ => failwith("Expected exactly three model pieces") - }; - - let websocket_url = - switch (model_url.term) { - | String(s) => s - | _ => failwith("WebSocket livelit: not given string") - }; - - let send_msg = - switch (model_send.term) { + model_t: Typ.temp(String), + projector: (model: list(model_piece), update) => { + let {model, piece} = List.nth(model, 0); + let url = + switch (model.term) { | String(s) => s - | _ => failwith("WebSocket livelit: not given string") + | _ => failwith("fetch_url: not given a string URL") }; - let recv_msg = - switch (model_recv.term) { - | String(s) => s - | _ => failwith("WebSocket livelit: not given string") - }; + /* We'll stash fetched text into this hidden input when it arrives. */ + let hidden_input_id = "hidden-input-" ++ Uuidm.to_string(piece.id); - /* JavaScript code to open the websocket and handle communication */ - let websocketScript = + let script_code = {| - (function() { - const socket = new WebSocket("|} - ++ websocket_url - ++ {|"); - socket.onopen = function() { - console.log("WebSocket connection opened"); - socket.send("|} - ++ send_msg - ++ {|"); - }; - - socket.onmessage = function(event) { - console.log("Message from server: ", event.data); - const hiddenInput = document.getElementById("hidden-input-|} - ++ Uuidm.to_string(piece_recv.id) - ++ {|"); - - // Update the hidden input value - hiddenInput.value = event.data; - - // Explicitly dispatch an input event - const inputEvent = new Event('input', { bubbles: true }); - hiddenInput.dispatchEvent(inputEvent); - }; - - socket.onerror = function(error) { - console.error("WebSocket error: ", error); - }; - - window.sendWebSocketMessage = function(message) { - if (socket.readyState === WebSocket.OPEN) { - socket.send(message); - } else { - console.warn("WebSocket is not open: message not sent"); + (function() { + fetch("|} + ++ url + ++ {|") + .then(resp => resp.text()) + .then(text => { + const input = document.getElementById("|} + ++ hidden_input_id + ++ {|\"); + if (input) { + input.value = text; + input.dispatchEvent(new Event('input', { bubbles: true })); } - }; - })(); + }) + .catch(err => console.error("Fetch error: ", err)); + })(); |}; + // let script_code = "console.log('fetching from: " ++ url ++ "');"; - let send_message_to_websocket = (message: string): unit => { - let js_code = "window.sendWebSocketMessage('" ++ message ++ "');"; - Js_of_ocaml.Js.Unsafe.eval_string(js_code); - }; - - let key_handler = evt => { - let key = Key.mk(KeyDown, evt); - - switch (key.key) { - | _ => Effect.Stop_propagation - }; - }; - - /* Return the Node */ Node.div( ~attrs=[Attr.class_("livelit")], [ - /* Hidden input for the received message */ + /* Hidden input to store the fetched text once available. */ Node.input( ~attrs=[ - Attr.id("hidden-input-" ++ Uuidm.to_string(piece_recv.id)), + Attr.id(hidden_input_id), Attr.type_("hidden"), - Attr.value(recv_msg), + Attr.value(url), Attr.on_input((_, v) => { - print_endline("Received message: " ++ v); - update(put("\"" ++ v ++ "\"", piece_recv.id)); + /* Once the fetch completes, update the tile with the new text */ + update( + put("\"" ++ v ++ "\"", piece.id), + ) }), ], (), ), - /* Include the script for websocket setup */ - script(websocketScript), - /* Input for the message to send */ - Node.div([ - Node.input( - ~attrs=[ - Attr.type_("text"), - Attr.placeholder("Message to send"), - Attr.value(send_msg), - Attr.on_keydown(key_handler), - Attr.on_input((_, v) => { - update(put("\"" ++ v ++ "\"", piece_send.id)) - }), - Attr.id("websocket-send-input"), - Attr.class_("websocket-send-input"), - ], - (), - ), - /* Send button to trigger WebSocket message send */ - Node.button( - ~attrs=[ - Attr.on_click(_ => { - send_message_to_websocket(send_msg); - update(put("\"\"", piece_send.id)); - }), - ], - [Node.text("Send")], - ), - ]), + /* The script that performs the fetch and populates the hidden input. */ + Node.create("script", [Node.text(script_code)]), + /* Visible text for debugging or user feedback. */ + Node.text("Fetching from: " ++ url), ], ); }, - size: 30, + size: Inline(20), }; -let multiplayer_game: t = { - name: "multiplayer_game", - expansion_t: - Typ.temp( - Prod([ - Typ.temp(String), /* Player ID */ - Typ.temp(String), /* Game State */ - Typ.temp(String) /* Color */ - ]), - ), - expansion_f: (model: UExp.t) => - switch (model.term) { - | Tuple([player_id, game_state, color, _ws]) => - DHExp.fresh(Tuple([player_id, game_state, color])) - | _ => DHExp.fresh(Undefined) - }, - model_t: - Typ.temp( - Prod([ - Typ.temp(String), - Typ.temp(String), - Typ.temp(String), - Typ.temp(String), - ]), - ), - projector: (models: list(model_piece), update) => { - let ( - (model_player_id, piece_player_id), - (model_game_state, piece_game_state), - (model_color, piece_color), - (model_ws, piece_ws), - ) = - switch (models) { - | [ - {model: m_id, piece: p_id}, - {model: m_state, piece: p_state}, - {model: m_color, piece: p_color}, - {model: m_ws, piece: p_ws}, - ] => ( - (m_id, p_id), - (m_state, p_state), - (m_color, p_color), - (m_ws, p_ws), - ) - | _ => failwith("Expected exactly three model pieces") - }; - - let ws = - switch (model_ws.term) { - | String(s) => s - | _ => failwith("WebSocket URL is not a string") - }; - - let player_id = - switch (model_player_id.term) { - | String(s) => s - | _ => failwith("Player ID is not a string") - }; - - let game_state = - switch (model_game_state.term) { - | String(s) => s - | _ => failwith("Game state is not a string") - }; - - let color = - switch (model_color.term) { - | String(s) => s - | _ => failwith("Color is not a string") - }; - - let popup_content = - {| - - - - Multiplayer Game - - - - - - -|}; - - let popupScript = - "var popupComm = " - ++ create_popup_with_communication(~popup_content) - ++ ";"; - - let hidden_input_game_state_id = - "hidden-input-game_state-" ++ Uuidm.to_string(piece_game_state.id); - - let handlePopupMessageJs = - {| -popupComm.setHandlePopupMessage(function(data) { - if (data.variable && data.value !== undefined) { - var inputIds = { - game_state: '|} - ++ hidden_input_game_state_id - ++ {|' - }; - var inputId = inputIds[data.variable]; - if (inputId) { - var input = document.getElementById(inputId); - if (input) { - input.value = data.value; - var event = new Event('input', { bubbles: true }); - input.dispatchEvent(event); - } - } - } -}); -|}; - - Node.div( - ~attrs=[Attr.class_("livelit")], - [ - script(popupScript), - script(handlePopupMessageJs), - Node.input( - ~attrs=[ - Attr.type_("hidden"), - Attr.id(hidden_input_game_state_id), - Attr.value(game_state), - Attr.on_input((_, v) => { - update(put("\"" ++ v ++ "\"", piece_game_state.id)) - }), - ], - (), - ), - Node.div([Node.text("Player ID: " ++ player_id)]), - ], - ); - }, - size: 20, -}; +/* Export the final set of livelits we want to keep. */ let livelits: list(t) = [ slider, js, timestamp, emotion, - double_slider, - game, - websocket, - multiplayer_game, syntax_error, + fetch_url, ]; -let find_livelit = (livelit_name: string): t => - switch (List.find_opt(l => l.name == livelit_name, livelits)) { +/* A helper to find a livelit by name. Returns syntax_error if not found. */ +let find_livelit = (name: string): t => + switch (List.find_opt(l => l.name == name, livelits)) { | Some(l) => l - | None => - print_endline("Livelit " ++ livelit_name ++ " not found; options:"); - // print options - List.iter(l => print_endline(l.name), livelits); - not_found; + | None => syntax_error }; - -/* - let slider = (^slider(50)) in - case (slider) - | n => "Slider value: " ++ string_of_int(n) - end - */ - -/* - let emotion = (^emotion(5)) in - case (emotion) - | "happy" => "Hooray! What a pleasant day!" - | "neutral" => "Things are medium, I suppose." - | "sad" => "Sorrow sorrow, today and tomorrow." - | _ => "You have broken my trust, and frankly, our friendship" - end - */ - -/* - let game = (^game(10, 10, 10, 1234)) in - case (game) - | (x, y, energy, seed) => - "Player at (" ++ string_of_int(x) ++ ", " ++ string_of_int(y) ++ ") with " - ++ string_of_int(energy) ++ " energy and seed " ++ string_of_int(seed) - end - */ - -/* - let websocket = (^websocket("ws://localhost:8765", "Hello", "World")) in - case (websocket) - | (url, send, recv) => - "WebSocket connection to " ++ url ++ " with send message " ++ send - ++ " and received message " ++ recv - end - */ - -/*let websocket = ( - ^websocket("ws://localhost:8765", "Send message", "Recieve message")) - in - case (websocket) - | (_, send, recv) => "Send: " ++ send ++ " Receive: " ++ recv - end - */ - -/* {'players': {'player1': {'x': 100, 'y': 100, 'color': 'red'}}} */ - -/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in - case (multiplayer_game) - | (player_id, game_state, color, ws) => - "Player " ++ player_id ++ " is playing with color " ++ color - end - */ - -/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in - case (multiplayer_game) - | (player_id, game_state, color) => - "Player " ++ player_id ++ " is playing with color " ++ color - end*/ - -/*let multiplayer_game = (^multiplayer_game("player1", "{}", "red", "ws://localhost:8765")) in - case (multiplayer_game) - | (player_id, game_state, color) => - "Player " ++ player_id ++ " is playing with color " ++ color - end*/ - -/*let multiplayer_game = (^multiplayer_game("player2", "{}", "blue", "ws://localhost:8765")) in - case (multiplayer_game) - | (player_id, game_state, color) => - "Player " ++ player_id ++ " is playing with color " ++ color - end*/ diff --git a/src/haz3lcore/zipper/projectors/LivelitProj.re b/src/haz3lcore/zipper/projectors/LivelitProj.re index 5a08303f9b..f1e4be90ae 100644 --- a/src/haz3lcore/zipper/projectors/LivelitProj.re +++ b/src/haz3lcore/zipper/projectors/LivelitProj.re @@ -103,7 +103,7 @@ module M: Projector = { "syntax_error"; }; let ll = Livelit.find_livelit(llname); - Inline(ll.size); + ll.size; }; let update = (model, _) => model;
  • mKS9-}M? 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%0Ak3qN*h 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