diff --git a/benchmarks/elm.json b/benchmarks/elm.json index 28485cf..e982fa6 100644 --- a/benchmarks/elm.json +++ b/benchmarks/elm.json @@ -9,30 +9,26 @@ "direct": { "elm/browser": "1.0.2", "elm/core": "1.0.5", - "elm/html": "1.0.0", + "elm/json": "1.1.4", + "elm/random": "1.0.0", "elm/regex": "1.0.0", - "elm-explorations/benchmark": "1.0.2", - "lue-bird/elm-alternative-benchmark-runner": "1.0.0" + "elm-explorations/test": "2.2.1", + "gampleman/elm-bench": "1.1.0" }, "indirect": { "BrianHicks/elm-trend": "2.1.3", - "avh4/elm-color": "1.0.0", - "elm/json": "1.1.3", + "elm/bytes": "1.0.8", + "elm/html": "1.0.1", "elm/time": "1.0.0", "elm/url": "1.0.0", - "elm/virtual-dom": "1.0.3", - "mdgriffith/elm-ui": "1.1.8", + "elm/virtual-dom": "1.0.5", + "elm-explorations/benchmark": "1.0.2", "mdgriffith/style-elements": "5.0.2", - "miniBill/elm-ui-with-context": "1.1.0", "robinheghan/murmur3": "1.0.0" } }, "test-dependencies": { - "direct": { - "elm-explorations/test": "1.2.2" - }, - "indirect": { - "elm/random": "1.0.0" - } + "direct": {}, + "indirect": {} } } diff --git a/benchmarks/src/Array/Extra/Intersperse.elm b/benchmarks/src/Array/Extra/Intersperse.elm index efc70ea..a173fae 100644 --- a/benchmarks/src/Array/Extra/Intersperse.elm +++ b/benchmarks/src/Array/Extra/Intersperse.elm @@ -7,7 +7,7 @@ import Array.Extra withPush : a -> Array a -> Array a withPush separator = \array -> - case array |> Array.get ((array |> Array.length) - 1) of + case Array.get (Array.length array - 1) array of Nothing -> Array.empty @@ -22,7 +22,7 @@ withPush separator = beforeLastInterspersed = array |> Array.Extra.pop - |> Array.foldr step Array.empty + |> Array.foldl step Array.empty in beforeLastInterspersed |> Array.push last diff --git a/benchmarks/src/Array/Extra/MapToList.elm b/benchmarks/src/Array/Extra/MapToList.elm index 7b83b36..3a9a518 100644 --- a/benchmarks/src/Array/Extra/MapToList.elm +++ b/benchmarks/src/Array/Extra/MapToList.elm @@ -9,7 +9,8 @@ withFoldr alter = array |> Array.foldr (\element soFar -> - soFar |> (::) (element |> alter) + soFar + |> (::) (element |> alter) ) [] diff --git a/benchmarks/src/Array/Extra/Reverse.elm b/benchmarks/src/Array/Extra/Reverse.elm index 287c4b3..177db1d 100644 --- a/benchmarks/src/Array/Extra/Reverse.elm +++ b/benchmarks/src/Array/Extra/Reverse.elm @@ -12,7 +12,7 @@ withCons = withPush : Array a -> Array a withPush = \array -> - array |> Array.foldl Array.push Array.empty + array |> Array.foldr Array.push Array.empty withListReverse : Array a -> Array a diff --git a/benchmarks/src/Benchmarks.elm b/benchmarks/src/Benchmarks.elm index 88b6ab0..92c59aa 100644 --- a/benchmarks/src/Benchmarks.elm +++ b/benchmarks/src/Benchmarks.elm @@ -1,4 +1,4 @@ -module Benchmarks exposing (main) +module Benchmarks exposing (suite) import Application.NegAbs import Application.Sum @@ -14,9 +14,7 @@ import Array.Extra.MapToList import Array.Extra.Member import Array.Extra.Reverse import Array.Extra.Unzip -import Benchmark exposing (Benchmark, describe) -import Benchmark.Alternative exposing (rank) -import Benchmark.Runner.Alternative as BenchmarkRunner +import Bench exposing (Benchmark) import List.Extra import List.Extra.DropRight import List.Extra.GroupsOf @@ -36,9 +34,9 @@ import String.Extra.IsBlank import String.Extra.RightOfLeftOf -main : BenchmarkRunner.Program -main = - describe "for core-extra" +suite : Benchmark +suite = + Bench.describe "core-extra" [ application , array , arrayExtra @@ -49,13 +47,12 @@ main = , maybeExtra , resultExtra ] - |> BenchmarkRunner.program application : Benchmark application = - describe "application" - [ rank "curry" + Bench.describe "application" + [ Bench.rank "curry" (\sum -> ints1To100 |> sum) [ ( "name only", Application.Sum.nameOnlyCurried ) , ( "partially curried/applied", Application.Sum.partiallyCurried ) @@ -63,7 +60,7 @@ application = , ( "lambda, fully applied", Application.Sum.lambdaFullyAppliedCurried ) , ( "lambda nested, fully applied", Application.Sum.lambdaNestedFullyAppliedCurried ) ] - , rank "chain" + , Bench.rank "chain" (\negAbs -> ints1To100 |> Array.map negAbs) [ ( "declaration argument, |> |>", Application.NegAbs.declarationArgumentPipeline ) , ( "lambda, |> |>", Application.NegAbs.lambdaPipeline ) @@ -75,8 +72,8 @@ application = array : Benchmark array = - describe "Array" - [ rank "Array.fold" + Bench.describe "Array" + [ Bench.rank "Array.fold" (\fold -> ints1To100 |> fold (+) 0) [ ( "foldl", Array.foldl ) , ( "foldr", Array.foldr ) @@ -86,13 +83,13 @@ array = arrayExtra : Benchmark arrayExtra = - describe "Array.Extra" - [ rank "mapToList" + Bench.describe "Array.Extra" + [ Bench.rank "mapToList" (\mapToList -> ints1To100 |> mapToList negate) [ ( "with foldr", Array.Extra.MapToList.withFoldr ) , ( "with Array.toIndexedList", Array.Extra.MapToList.withListMap ) ] - , rank "indexedMapToList" + , Bench.rank "indexedMapToList" (\indexedMapToList -> ints1To100 |> indexedMapToList Tuple.pair ) @@ -107,7 +104,7 @@ arrayExtra = , Array.Extra.IndexedMapToList.withListIndexedMap ) ] - , rank "reverse" + , Bench.rank "reverse" (\reverse -> reverse ints1To100) [ ( "with cons", Array.Extra.Reverse.withCons ) , ( "with List.reverse", Array.Extra.Reverse.withListReverse ) @@ -117,14 +114,14 @@ arrayExtra = zipped = Array.zip ints1To100 ints1To100 in - rank "unzip" + Bench.rank "unzip" (\unzip -> zipped |> unzip) [ ( "with maps", Array.Extra.Unzip.withMaps ) , ( "with List.unzip", Array.Extra.Unzip.withListUnzip ) , ( "with push", Array.Extra.Unzip.wthPush ) , ( "with cons", Array.Extra.Unzip.wthCons ) ] - , rank "map2" + , Bench.rank "map2" (\map2 -> map2 Tuple.pair ints1To100 ints1To100 ) @@ -143,7 +140,7 @@ arrayExtra = Just x ) in - rank "filterMap" + Bench.rank "filterMap" (\filterMap -> maybeInts |> filterMap identity) [ ( "with List.filterMap", Array.Extra.FilterMap.withListFilterMap ) , ( "with push", Array.Extra.FilterMap.withPush ) @@ -153,7 +150,7 @@ arrayExtra = allTrue = Array.repeat 100 True in - rank "all" + Bench.rank "all" (\all -> allTrue |> all identity) [ ( "recursive last", Array.Extra.All.recursiveLast ) , ( "recursive get", Array.Extra.All.recursiveGet ) @@ -164,20 +161,20 @@ arrayExtra = allFalse = Array.repeat 100 False in - rank "any" + Bench.rank "any" (\any -> allFalse |> any identity) [ ( "recursive last", Array.Extra.Any.recursiveLast ) , ( "recursive get", Array.Extra.Any.recursiveGet ) , ( "with List.any", Array.Extra.Any.withList ) , ( "with fold", Array.Extra.Any.withFold ) ] - , rank "intersperse" + , Bench.rank "intersperse" (\intersperse -> ints1To100 |> intersperse 0) [ ( "with push", Array.Extra.Intersperse.withPush ) , ( "with cons", Array.Extra.Intersperse.withCons ) , ( "with List.intersperse", Array.Extra.Intersperse.withListIntersperse ) ] - , rank "member" + , Bench.rank "member" (\member -> member 50 ints1To100) [ ( "with fold", Array.Extra.Member.withFold ) , ( "recursive", Array.Extra.Member.recursive ) @@ -199,84 +196,87 @@ listExtra = longList = List.range 1 1000 in - describe "List.Extra" - ([ rank "uniquePairs" + Bench.describe "List.Extra" + ([ Bench.rank "uniquePairs" (\uniquePairs -> uniquePairs intList) [ ( "original (++)", List.Extra.UniquePairs.originalConcat ) , ( "tail-recursive", List.Extra.UniquePairs.tailRecursive ) ] - , rank "unfoldr" + -- These return pairs in different order, but this function isn't particularly order sensitive. + -- Nonetheless, changing the implementation would be a major change. + |> Bench.skipEqualityCheck + , Bench.rank "unfoldr" (\unfoldr -> unfoldr subtractOneUntilZero 100) [ ( "original", List.Extra.Unfoldr.nonTailRecursive ) , ( "tail-recursive", List.Extra.Unfoldr.tailRecursive ) ] - , rank "lift2" + , Bench.rank "lift2" (\lift2 -> lift2 (\a b -> a + b) shortList shortList) [ ( "original", List.Extra.Lift.liftAndThen2 ) , ( "foldl", List.Extra.Lift.liftFold2 ) ] - , rank "lift3" + , Bench.rank "lift3" (\lift3 -> lift3 (\a b c -> a + b + c) shortList shortList shortList) [ ( "original", List.Extra.Lift.liftAndThen3 ) , ( "foldl", List.Extra.Lift.liftFold3 ) ] - , rank "lift4" + , Bench.rank "lift4" (\lift4 -> lift4 (\a b c d -> a + b + c + d) shortList shortList shortList shortList) [ ( "original", List.Extra.Lift.liftAndThen4 ) , ( "foldl", List.Extra.Lift.liftFold4 ) ] - , rank "notMember 1" + , Bench.rank "notMember 1" (\notMember -> notMember 1 intList) [ ( "Original", List.Extra.NotMember.notMemberOriginal ) , ( "Simplified", List.Extra.NotMember.notMemberSimple ) ] - , rank "notMember 99" + , Bench.rank "notMember 99" (\notMember -> notMember 99 intList) [ ( "Original", List.Extra.NotMember.notMemberOriginal ) , ( "Simplified", List.Extra.NotMember.notMemberSimple ) ] - , rank "notMember 101" + , Bench.rank "notMember 101" (\notMember -> notMember 101 intList) [ ( "Original", List.Extra.NotMember.notMemberOriginal ) , ( "Simplified", List.Extra.NotMember.notMemberSimple ) ] - , rank "dropRight 5 10" + , Bench.rank "dropRight 5 10" (\dropRight -> dropRight 5 shortList) [ ( "foldr", List.Extra.DropRight.dropRightFoldr ) , ( "reverse", List.Extra.DropRight.dropRightReverse ) , ( "length", List.Extra.DropRight.dropRightLength ) ] - , rank "takeRight 5 10" + , Bench.rank "takeRight 5 10" (\takeRight -> takeRight 5 shortList) [ ( "foldr", List.Extra.TakeRight.takeRightFoldr ) , ( "reverse", List.Extra.TakeRight.takeRightReverse ) , ( "length", List.Extra.TakeRight.takeRightLength ) ] - , rank "dropRight 50 100" + , Bench.rank "dropRight 50 100" (\dropRight -> dropRight 50 intList) [ ( "foldr", List.Extra.DropRight.dropRightFoldr ) , ( "reverse", List.Extra.DropRight.dropRightReverse ) , ( "length", List.Extra.DropRight.dropRightLength ) ] - , rank "takeRight 50 100" + , Bench.rank "takeRight 50 100" (\takeRight -> takeRight 50 intList) [ ( "foldr", List.Extra.TakeRight.takeRightFoldr ) , ( "reverse", List.Extra.TakeRight.takeRightReverse ) , ( "length", List.Extra.TakeRight.takeRightLength ) ] - , rank "dropRight 500 1000" + , Bench.rank "dropRight 500 1000" (\dropRight -> dropRight 500 longList) [ ( "foldr", List.Extra.DropRight.dropRightFoldr ) , ( "reverse", List.Extra.DropRight.dropRightReverse ) , ( "length", List.Extra.DropRight.dropRightLength ) ] - , rank "takeRight 500 1000" + , Bench.rank "takeRight 500 1000" (\takeRight -> takeRight 500 longList) [ ( "foldr", List.Extra.TakeRight.takeRightFoldr ) , ( "reverse", List.Extra.TakeRight.takeRightReverse ) , ( "length", List.Extra.TakeRight.takeRightLength ) ] - , rank "insertAt negative index" + , Bench.rank "insertAt negative index" (\insertAt -> insertAt -3 999 intList) [ ( "recursion", List.Extra.InsertAt.insertAtRecursion ) , ( "takeDrop", List.Extra.InsertAt.insertAtTakeDrop ) @@ -284,7 +284,7 @@ listExtra = , ( "recursion2", List.Extra.InsertAt.insertAtRecursion2 ) , ( "recursion3", List.Extra.InsertAt.insertAtRecursion3 ) ] - , rank "insertAt good positive index" + , Bench.rank "insertAt good positive index" (\insertAt -> insertAt 50 999 intList) [ ( "recursion", List.Extra.InsertAt.insertAtRecursion ) , ( "takeDrop", List.Extra.InsertAt.insertAtTakeDrop ) @@ -292,7 +292,7 @@ listExtra = , ( "recursion2", List.Extra.InsertAt.insertAtRecursion2 ) , ( "recursion3", List.Extra.InsertAt.insertAtRecursion3 ) ] - , rank "insertAt bad positive index" + , Bench.rank "insertAt bad positive index" (\insertAt -> insertAt 150 999 intList) [ ( "recursion", List.Extra.InsertAt.insertAtRecursion ) , ( "takeDrop", List.Extra.InsertAt.insertAtTakeDrop ) @@ -314,12 +314,12 @@ toComparisonsGroupsOfWithStep exponent = range = List.range 1 listSize in - [ rank ("groupsOfWithStep 3 2 [1.." ++ String.fromInt listSize ++ "]") + [ Bench.rank ("groupsOfWithStep 3 2 [1.." ++ String.fromInt listSize ++ "]") (\impl -> impl 3 2 range) [ ( "using elm-core's List.tail", List.Extra.GroupsOf.coreTailGroupsOfWithStep ) , ( "using fully tail-recursive List.tail", List.Extra.GroupsOf.tailRecGroupsOfWithStep ) ] - , rank ("greedyGroupsOfWithStep 3 2 [1.." ++ String.fromInt listSize ++ "]") + , Bench.rank ("greedyGroupsOfWithStep 3 2 [1.." ++ String.fromInt listSize ++ "]") (\impl -> impl 3 2 range) [ ( "using elm-core's List.tail", List.Extra.GroupsOf.coreTailGreedyGroupsOfWithStep ) , ( "using fully tail-recursive List.tail", List.Extra.GroupsOf.tailRecGreedyGroupsOfWithStep ) @@ -329,36 +329,39 @@ toComparisonsGroupsOfWithStep exponent = tupleExtra : Benchmark tupleExtra = - describe "Tuple.Extra" - [ Benchmark.compare "construction" "literal" (\() -> ( 1, "a" )) "function" (\() -> Tuple.pair 1 "a") + Bench.describe "Tuple.Extra" + [ Bench.compare "construction" + ( "literal", \_ -> ( 1, "a" ) ) + ( "function", \_ -> Tuple.pair 1 "a" ) ] stringExtra : Benchmark stringExtra = - describe "String.Extra" + Bench.describe "String.Extra" [ stringExtraIsBlank - , describe "String.Extra.{rightOf,leftOf}" - [ describe "1 match" (rightLeft 1) - , describe "10 matches" (rightLeft 10) - , describe "100 matches" (rightLeft 100) - , describe "1000 matches" (rightLeft 1000) + , Bench.describe "String.Extra.{rightOf,leftOf}" + [ Bench.describe "1 match" (rightLeft 1) + , Bench.describe "10 matches" (rightLeft 10) + , Bench.describe "100 matches" (rightLeft 100) + , Bench.describe "1000 matches" (rightLeft 1000) ] ] +rightLeft : Int -> List Benchmark rightLeft matches = let a = List.Extra.initialize matches String.fromInt |> String.join "___" in - [ rank "rightOf" + [ Bench.rank "rightOf" (\rightOf -> rightOf "___" a) [ ( "regex", String.Extra.RightOfLeftOf.rightOfRegex ) , ( "String.indexes", String.Extra.RightOfLeftOf.rightOfIndexes ) ] - , rank "leftOf" + , Bench.rank "leftOf" (\leftOf -> leftOf "___" a) [ ( "regex", String.Extra.RightOfLeftOf.leftOfRegex ) , ( "String.indexes", String.Extra.RightOfLeftOf.leftOfIndexes ) @@ -368,8 +371,8 @@ rightLeft matches = maybeExtra : Benchmark maybeExtra = - describe "Maybe.Extra" - [ rank "andMap - Just × Just" + Bench.describe "Maybe.Extra" + [ Bench.rank "andMap - Just × Just" (\andMap -> Just negate |> andMap (Just 0)) [ ( "original", Maybe.Extra.AndMap.andMapOriginal ) , ( "inlined", Maybe.Extra.AndMap.andMapInlined ) @@ -377,7 +380,7 @@ maybeExtra = , ( "nested case-of", Maybe.Extra.AndMap.andMapNestedCaseOf ) , ( "nested case-of ignoring Nothing", Maybe.Extra.AndMap.andMapNestedCaseOfIgnoringNothing ) ] - , rank "andMap - Nothing × Just" + , Bench.rank "andMap - Nothing × Just" (\andMap -> Nothing |> andMap (Just 0)) [ ( "original", Maybe.Extra.AndMap.andMapOriginal ) , ( "inlined", Maybe.Extra.AndMap.andMapInlined ) @@ -385,7 +388,7 @@ maybeExtra = , ( "nested case-of", Maybe.Extra.AndMap.andMapNestedCaseOf ) , ( "nested case-of ignoring Nothing", Maybe.Extra.AndMap.andMapNestedCaseOfIgnoringNothing ) ] - , rank "andMap - Just × Nothing" + , Bench.rank "andMap - Just × Nothing" (\andMap -> Just negate |> andMap Nothing) [ ( "original", Maybe.Extra.AndMap.andMapOriginal ) , ( "inlined", Maybe.Extra.AndMap.andMapInlined ) @@ -393,7 +396,7 @@ maybeExtra = , ( "nested case-of", Maybe.Extra.AndMap.andMapNestedCaseOf ) , ( "nested case-of ignoring Nothing", Maybe.Extra.AndMap.andMapNestedCaseOfIgnoringNothing ) ] - , rank "andMap - Nothing × Nothing" + , Bench.rank "andMap - Nothing × Nothing" (\andMap -> Nothing |> andMap Nothing) [ ( "original", Maybe.Extra.AndMap.andMapOriginal ) , ( "inlined", Maybe.Extra.AndMap.andMapInlined ) @@ -424,42 +427,42 @@ resultExtra = else Ok (a + sum) in - describe "Result.Extra" - [ rank "andMap - Ok × Ok" + Bench.describe "Result.Extra" + [ Bench.rank "andMap - Ok × Ok" (\andMap -> Ok negate |> andMap (Ok 0)) [ ( "original", Result.Extra.AndMap.andMapOriginal ) , ( "inlined", Result.Extra.AndMap.andMapInlined ) , ( "inlined, nested case-of", Result.Extra.AndMap.andMapInlinedNestedCaseOf ) ] - , rank "andMap - Err × Ok" + , Bench.rank "andMap - Err × Ok" (\andMap -> Err "e" |> andMap (Ok 0)) [ ( "original", Result.Extra.AndMap.andMapOriginal ) , ( "inlined", Result.Extra.AndMap.andMapInlined ) , ( "inlined, nested case-of", Result.Extra.AndMap.andMapInlinedNestedCaseOf ) ] - , rank "andMap - Ok × Err" + , Bench.rank "andMap - Ok × Err" (\andMap -> Ok negate |> andMap (Err "e")) [ ( "original", Result.Extra.AndMap.andMapOriginal ) , ( "inlined", Result.Extra.AndMap.andMapInlined ) , ( "inlined, nested case-of", Result.Extra.AndMap.andMapInlinedNestedCaseOf ) ] - , rank "andMap - Err × Err" + , Bench.rank "andMap - Err × Err" (\andMap -> Err "b" |> andMap (Err "e")) [ ( "original", Result.Extra.AndMap.andMapOriginal ) , ( "inlined", Result.Extra.AndMap.andMapInlined ) , ( "inlined, nested case-of", Result.Extra.AndMap.andMapInlinedNestedCaseOf ) ] - , rank "andMap - Err × Err" + , Bench.rank "andMap - Err × Err (2)" (\andMap -> Err "l" |> andMap (Err "e")) [ ( "original", Result.Extra.AndMap.andMapOriginal ) , ( "inlined", Result.Extra.AndMap.andMapInlined ) ] - , rank "foldlWhileOk - Err at the first element" + , Bench.rank "foldlWhileOk - Err at the first element" (\foldlWhileOk -> foldlWhileOk foldFnFirstError 0 integers) [ ( "Using List.foldl", \f initial list -> List.foldl (\n acc -> Result.andThen (f n) acc) (Ok initial) list ) , ( "foldlWhileOk", \f initial list -> Result.Extra.foldlWhileOk f initial list ) ] - , rank "foldlWhileOk - all Ok" + , Bench.rank "foldlWhileOk - all Ok" (\foldlWhileOk -> foldlWhileOk foldFnAllOk 0 integers) [ ( "Using List.foldl", \f initial list -> List.foldl (\n acc -> Result.andThen (f n) acc) (Ok initial) list ) , ( "foldlWhileOk", \f initial list -> Result.Extra.foldlWhileOk f initial list ) @@ -471,7 +474,7 @@ stringExtraIsBlank : Benchmark stringExtraIsBlank = let bench label string = - rank label + Bench.rank label (\isBlank -> isBlank string) [ ( "regex based", String.Extra.IsBlank.regexBased ) , ( "regex based (with top-level regex)", String.Extra.IsBlank.regexBasedWithTopLevelRegex ) @@ -487,7 +490,7 @@ stringExtraIsBlank = fullString = String.repeat 10 "Hello World" in - Benchmark.describe "isBlank" + Bench.describe "isBlank" [ bench "empty string" emptyString , bench "whitespace string" wsString , bench "full string" fullString @@ -508,20 +511,6 @@ ints1To100 = Array.fromList (List.range 1 100) - --- Note for benchmarking: --- Since sets are ordered internally, you can get seriously distorted numbers --- if the sets happen to intersect and start/end, or are disjoint with no overlap --- in their ranges. --- --- Hence the following sample data is carefully chosen such that even disjoint --- sets are for instance even/odd numbers. --- --- That said, in my experience specific benchmark results can be highly dependant --- on exact choice of example data, so if you are getting particularly interesting --- results, play around with different data distributions. - - evenNumberSet : Set Int evenNumberSet = Set.fromList (List.range 50 1000 |> List.filter (\x -> modBy 2 x == 0)) @@ -552,30 +541,30 @@ divisibleBy3and5Set = setExtra : Benchmark setExtra = - describe "Set.Extra" - [ rank "areDisjoint == True" + Bench.describe "Set.Extra" + [ Bench.rank "areDisjoint == True" (\areDisjoint -> areDisjoint evenNumberSet oddNumberSet) [ ( "intersection", Set.Extra.AreDisjoint.intersection ) , ( "listRecursion", Set.Extra.AreDisjoint.listRecursion ) , ( "foldr", Set.Extra.AreDisjoint.foldr ) , ( "foldl", Set.Extra.AreDisjoint.foldl ) ] - , rank "areDisjoint == False (and small)" + , Bench.rank "areDisjoint == False (and small)" (\areDisjoint -> areDisjoint evenNumberSet oddNumberSetPlus500) [ ( "intersection", Set.Extra.AreDisjoint.intersection ) , ( "listRecursion", Set.Extra.AreDisjoint.listRecursion ) , ( "foldr", Set.Extra.AreDisjoint.foldr ) , ( "foldl", Set.Extra.AreDisjoint.foldl ) ] - , rank "areDisjoint == False (and large)" + , Bench.rank "areDisjoint == False (and large)" (\areDisjoint -> areDisjoint evenNumberSet lowNumsAndDivisibleBy4Set) [ ( "intersection", Set.Extra.AreDisjoint.intersection ) , ( "listRecursion", Set.Extra.AreDisjoint.listRecursion ) , ( "foldr", Set.Extra.AreDisjoint.foldr ) , ( "foldl", Set.Extra.AreDisjoint.foldl ) ] - , rank "symmetricDifference" - (\areDisjoint -> areDisjoint evenNumberSet divisibleBy3and5Set) + , Bench.rank "symmetricDifference" + (\symDiff -> symDiff evenNumberSet divisibleBy3and5Set) [ ( "naive", Set.Extra.SymmetricDifference.naive ) , ( "orderExploiting", Set.Extra.SymmetricDifference.orderExploiting ) ] diff --git a/benchmarks/src/List/Extra/GroupsOf.elm b/benchmarks/src/List/Extra/GroupsOf.elm index 8e2f025..8217cbf 100644 --- a/benchmarks/src/List/Extra/GroupsOf.elm +++ b/benchmarks/src/List/Extra/GroupsOf.elm @@ -1,8 +1,5 @@ module List.Extra.GroupsOf exposing (coreTailGreedyGroupsOfWithStep, coreTailGroupsOfWithStep, tailRecGreedyGroupsOfWithStep, tailRecGroupsOfWithStep) -import Benchmark -import Benchmark.Runner.Alternative as BenchmarkRunner - coreTailGroupsOfWithStep : Int -> Int -> List a -> List (List a) coreTailGroupsOfWithStep size step list = diff --git a/benchmarks/src/Result/Extra/AndMap.elm b/benchmarks/src/Result/Extra/AndMap.elm index af07564..cc11367 100644 --- a/benchmarks/src/Result/Extra/AndMap.elm +++ b/benchmarks/src/Result/Extra/AndMap.elm @@ -36,4 +36,9 @@ andMapInlinedNestedCaseOf ra rb = Err x Err x -> - Err x + case rb of + Ok _ -> + Err x + + Err y -> + Err y diff --git a/elm.json b/elm.json index 3db0971..d8b00e3 100644 --- a/elm.json +++ b/elm.json @@ -26,8 +26,8 @@ "elm/regex": "1.0.0 <= v < 2.0.0" }, "test-dependencies": { - "elm/html": "1.0.0 <= v < 2.0.0", "elm/random": "1.0.0 <= v < 2.0.0", - "elm-explorations/test": "2.0.0 <= v < 3.0.0" + "elm-explorations/test": "2.0.0 <= v < 3.0.0", + "elm/html": "1.0.1 <= v < 2.0.0" } } diff --git a/package-lock.json b/package-lock.json index d37c478..3062f40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,18 +6,20 @@ "": { "dependencies": { "elm": "0.19.1-5", + "elm-bench": "^1.0.0", "elm-doc-preview": "^5.0.5", "elm-format": "^0.8.7", "elm-review": "^2.13.5", "elm-test": "0.19.1-revision12", "elm-verify-examples": "^6.0.3", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "playwright": "^1.60.0" } }, "node_modules/@avh4/elm-format-darwin-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.7-2.tgz", - "integrity": "sha512-F5JD44mJ3KX960J5GkXMfh1/dtkXuPcQpX2EToHQKjLTZUfnhZ++ytQQt0gAvrJ0bzoOvhNzjNjUHDA1ruTVbg==", + "version": "0.8.8-1", + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.8-1.tgz", + "integrity": "sha512-VDu3CRajhB/Sax+CEU4PhIzErBZv8vVxbk9Sk8seUHa1ngfICa3Ejoq3PhnoOFKYF1v1sSxNOC2RnUzvd/9bUw==", "cpu": [ "arm64" ], @@ -28,9 +30,9 @@ ] }, "node_modules/@avh4/elm-format-darwin-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.7-2.tgz", - "integrity": "sha512-4pfF1cl0KyTion+7Mg4XKM3yi4Yc7vP76Kt/DotLVGJOSag4ISGic1og2mt8RZZ7XArybBmHNyYkiUbe/cEiCw==", + "version": "0.8.8-1", + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.8-1.tgz", + "integrity": "sha512-9NAzi3HUBSHEIx3Nje+a6wFcv6RDKv2PO0OUNcV/XlS4Sou3r89xsYAVAXS8mi4+CKTdscyfSSkgGd8qiCCxAw==", "cpu": [ "x64" ], @@ -41,9 +43,9 @@ ] }, "node_modules/@avh4/elm-format-linux-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.7-2.tgz", - "integrity": "sha512-WkVmuce2zU6s9dupHhqPc886Vaqpea8dZlxv2fpZ4wSzPUbiiKHoHZzoVndMIMTUL0TZukP3Ps0n/lWO5R5+FA==", + "version": "0.8.8-1", + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.8-1.tgz", + "integrity": "sha512-VNuXYphgxtnk7Gw+VBgWBeA9k8wKSo9r/O2F7udgurokYLO8S+RGhLHgD9mb6Yecv/veWz4v9n/O0IggH/BOCQ==", "cpu": [ "arm64" ], @@ -54,21 +56,74 @@ ] }, "node_modules/@avh4/elm-format-linux-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.7-2.tgz", - "integrity": "sha512-kmncfJrTBjVT94JtQvMf4M5Pn2Yl0sZt3wo7AzgFiDnB/CiZ+KjJyXuWM64NeGiv4MQqzPq65tsFXUH1CIJeiQ==", + "version": "0.8.8-1", + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.8-1.tgz", + "integrity": "sha512-IvtmUTDw/V5mBeglLgtQMzWZPc0QvmqUmoJ+vipxYii3DJ/1KV2drtpvlLuFdBlFrehUivtrh4HhOTsdGXxyXQ==", "cpu": [ "x64" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "linux" ] }, "node_modules/@avh4/elm-format-win32-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.7-2.tgz", - "integrity": "sha512-sBdMBGq/8mD8Y5C+fIr5vlb3N50yB7S1MfgeAq2QEbvkr/sKrCZI540i43lZDH9gWsfA1w2W8wCe0penFYzsGw==", + "version": "0.8.8-1", + "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.8-1.tgz", + "integrity": "sha512-qGYZM2oJFSVQ80Tayk1v15ba7PWCU3B89EkA3Fy4YQasvtA+UrYYR5Bv7MRF4kn6Zp7oSDk4FhknURFsZWZ7kg==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@elm_binaries/darwin_arm64": { + "version": "0.19.1-0", + "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_arm64/-/darwin_arm64-0.19.1-0.tgz", + "integrity": "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@elm_binaries/darwin_x64": { + "version": "0.19.1-0", + "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_x64/-/darwin_x64-0.19.1-0.tgz", + "integrity": "sha512-QGUtrZTPBzaxgi9al6nr+9313wrnUVHuijzUK39UsPS+pa+n6CmWyV/69sHZeX9qy6UfeugE0PzF3qcUiy2GDQ==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@elm_binaries/linux_x64": { + "version": "0.19.1-0", + "resolved": "https://registry.npmjs.org/@elm_binaries/linux_x64/-/linux_x64-0.19.1-0.tgz", + "integrity": "sha512-T1ZrWVhg2kKAsi8caOd3vp/1A3e21VuCpSG63x8rDie50fHbCytTway9B8WHEdnBFv4mYWiA68dzGxYCiFmU2w==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@elm_binaries/win32_x64": { + "version": "0.19.1-0", + "resolved": "https://registry.npmjs.org/@elm_binaries/win32_x64/-/win32_x64-0.19.1-0.tgz", + "integrity": "sha512-yDleiXqSE9EcqKtd9SkC/4RIW8I71YsXzMPL79ub2bBPHjWTcoyyeBbYjoOB9SxSlArJ74HaoBApzT6hY7Zobg==", "cpu": [ "x64" ], @@ -167,6 +222,84 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@mattpiz/elm-test-rs-darwin-arm64": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-darwin-arm64/-/elm-test-rs-darwin-arm64-3.0.2-0.tgz", + "integrity": "sha512-Gb1f4L09fxF1QfpatoGc41+dfepfzZn7K1eVLU9Zh/ft15vivTg3Snk611dYDo8PdEm+dZ9Xf8GkqX3NTz4BzA==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@mattpiz/elm-test-rs-darwin-x64": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-darwin-x64/-/elm-test-rs-darwin-x64-3.0.2-0.tgz", + "integrity": "sha512-ly9pcE0sthEeLigkDdzspKEKxVxLNRN7NaDhlV3zs8beKC+AJmFz5AtGIeDIQ8hfNK6QR0xRQxgevlOTYiWbOA==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@mattpiz/elm-test-rs-linux-arm": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-linux-arm/-/elm-test-rs-linux-arm-3.0.2-0.tgz", + "integrity": "sha512-DRjK3rsO0rb0AuCMUcLkuuSJuxpBaMobrAyH5av8MrpPh7cwjZ3RhXzCCeweuhfizH1OP/idBeVlmN8hiqA2BQ==", + "cpu": [ + "arm" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@mattpiz/elm-test-rs-linux-arm64": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-linux-arm64/-/elm-test-rs-linux-arm64-3.0.2-0.tgz", + "integrity": "sha512-SpZjVmeAlBSc46Ku3RefFK4LDwsfmVgPerhFgana95dzaTYoruHNrMWUpqU9MT6FOnbJXiJQHZrI+y4VjJ5lJA==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@mattpiz/elm-test-rs-linux-x64": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-linux-x64/-/elm-test-rs-linux-x64-3.0.2-0.tgz", + "integrity": "sha512-Ia8kayW/Aag6tEwJOEV5ZIr49KHekDYZjB/oItyYScySlRxII+VppVYmh47o6xlTz9ZO845UkEyngUMZc25Lkg==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@mattpiz/elm-test-rs-win32-x64": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/@mattpiz/elm-test-rs-win32-x64/-/elm-test-rs-win32-x64-3.0.2-0.tgz", + "integrity": "sha512-cxPybYCU0wXmhpc2eFTmxEvffWdXpUILlC+YnB4XG3ddTnMOIUGe6C2rK9DfT3o+9fmeq/OlroKcG5I4/cMxsQ==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -345,6 +478,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asciichart": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/asciichart/-/asciichart-1.5.25.tgz", + "integrity": "sha512-PNxzXIPPOtWq8T7bgzBtk9cI2lgS4SJZthUHEiQ1aoIc3lNzGfUvIvo9LiAnq26TACo9t1/4qP6KTGAUbzX9Xg==", + "license": "MIT" + }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -432,6 +571,19 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -440,6 +592,22 @@ "node": ">=8" } }, + "node_modules/binwrap": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/binwrap/-/binwrap-0.2.3.tgz", + "integrity": "sha512-N4Pm7iyDEv0BrAMs+dny8WQa+e0nNTdzn2ODkf/MM6XBtKSCxCSUA1ZOQGoc1n7mUqdgOS5pwjsW91rmXVxy2Q==", + "license": "MIT", + "dependencies": { + "request": "^2.88.0", + "tar": "^6.1.0", + "unzip-stream": "^0.3.1" + }, + "bin": { + "binwrap-install": "bin/binwrap-install", + "binwrap-prepare": "bin/binwrap-prepare", + "binwrap-test": "bin/binwrap-test" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -450,19 +618,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -546,6 +701,14 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -621,11 +784,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/canvas": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.3.tgz", + "integrity": "sha512-PzE5nJZPz72YUAfo8oTp0u3fqqY7IzlTubneAihqDYAUcBk7ryeCmBbdJBEdaH0bptSOe2VT2Zwcb3UaFyaSWw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.3" + }, + "engines": { + "node": "^18.12.0 || >= 20.9.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -694,6 +883,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -951,6 +1149,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1004,6 +1211,76 @@ "node": ">=7.0.0" } }, + "node_modules/elm-bench": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/elm-bench/-/elm-bench-1.1.0.tgz", + "integrity": "sha512-96FTJ2y2UGpP4YtmcNwioAJ/1fAq3+zLD6bkLK7oGEHmnqNwUD511EcF4h2BrHegd0otieRpfffsDG/h6ZBAUQ==", + "license": "MIT", + "dependencies": { + "asciichart": "^1.5.25", + "canvas": "^3.2.3", + "chalk": "^5.4.1", + "commander": "^13.1.0", + "cross-spawn": "^7.0.6", + "elm": "^0.19.1-6", + "elm-format": "^0.8.8", + "elm-json": "^0.2.13", + "elm-review": "^2.13.5", + "elm-test-rs": "^3.0.2-0", + "sixel": "^0.16.0", + "supports-terminal-graphics": "^0.1.0", + "tinyglobby": "^0.2.12" + }, + "bin": { + "elm-bench": "bin/elm-bench.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "playwright": "^1.52.0" + } + }, + "node_modules/elm-bench/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/elm-bench/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/elm-bench/node_modules/elm": { + "version": "0.19.1-6", + "resolved": "https://registry.npmjs.org/elm/-/elm-0.19.1-6.tgz", + "integrity": "sha512-mKYyierHICPdMx/vhiIacdPmTPnh889gjHOZ75ZAoCxo3lZmSWbGP8HMw78wyctJH0HwvTmeKhlYSWboQNYPeQ==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "bin": { + "elm": "bin/elm" + }, + "engines": { + "node": ">=7.0.0" + }, + "optionalDependencies": { + "@elm_binaries/darwin_arm64": "0.19.1-0", + "@elm_binaries/darwin_x64": "0.19.1-0", + "@elm_binaries/linux_x64": "0.19.1-0", + "@elm_binaries/win32_x64": "0.19.1-0" + } + }, "node_modules/elm-doc-preview": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/elm-doc-preview/-/elm-doc-preview-5.0.5.tgz", @@ -1032,19 +1309,33 @@ } }, "node_modules/elm-format": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.7.tgz", - "integrity": "sha512-sVzFXfWnb+6rzXK+q3e3Ccgr6/uS5mFbFk1VSmigC+x2XZ28QycAa7lS8owl009ALPhRQk+pZ95Eq5ANjpEZsQ==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.8.tgz", + "integrity": "sha512-OJYUtVnepuy8UZdnL5OCjSxUY5+dIGP2NdWTB6icxVVOOH0b8MpJIijTPsGW+ztnv9yzSoTK0dhCuVDh+AGhNQ==", "hasInstallScript": true, + "license": "BSD-3-Clause", "bin": { "elm-format": "bin/elm-format" }, "optionalDependencies": { - "@avh4/elm-format-darwin-arm64": "0.8.7-2", - "@avh4/elm-format-darwin-x64": "0.8.7-2", - "@avh4/elm-format-linux-arm64": "0.8.7-2", - "@avh4/elm-format-linux-x64": "0.8.7-2", - "@avh4/elm-format-win32-x64": "0.8.7-2" + "@avh4/elm-format-darwin-arm64": "0.8.8-1", + "@avh4/elm-format-darwin-x64": "0.8.8-1", + "@avh4/elm-format-linux-arm64": "0.8.8-1", + "@avh4/elm-format-linux-x64": "0.8.8-1", + "@avh4/elm-format-win32-x64": "0.8.8-1" + } + }, + "node_modules/elm-json": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/elm-json/-/elm-json-0.2.13.tgz", + "integrity": "sha512-KpmZIcWJbnGsUn4X1/OqGdPMWnV0kgtrK5thACwfnKHlOg3A2jMyMBWzBOJcycCpQVBC7XTVssClZGetsvaMBQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "binwrap": "^0.2.3" + }, + "bin": { + "elm-json": "bin/elm-json" } }, "node_modules/elm-review": { @@ -1150,14 +1441,6 @@ "node": ">=8" } }, - "node_modules/elm-review/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/elm-review/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -1205,6 +1488,24 @@ "node": ">=12.20.0" } }, + "node_modules/elm-test-rs": { + "version": "3.0.2-0", + "resolved": "https://registry.npmjs.org/elm-test-rs/-/elm-test-rs-3.0.2-0.tgz", + "integrity": "sha512-Rzk3PD4unWvuzdzYthUoMjFELL78oRHeYTXpF8KDp/fyHLbb+vxOzmDXHRt51ogvfKSTyiK8y0xa4F+q7lzyfQ==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "bin": { + "elm-test-rs": "elm-test-rs.js" + }, + "optionalDependencies": { + "@mattpiz/elm-test-rs-darwin-arm64": "3.0.2-0", + "@mattpiz/elm-test-rs-darwin-x64": "3.0.2-0", + "@mattpiz/elm-test-rs-linux-arm": "3.0.2-0", + "@mattpiz/elm-test-rs-linux-arm64": "3.0.2-0", + "@mattpiz/elm-test-rs-linux-x64": "3.0.2-0", + "@mattpiz/elm-test-rs-win32-x64": "3.0.2-0" + } + }, "node_modules/elm-test/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1606,6 +1907,15 @@ "node": ">= 0.6" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -1861,6 +2171,36 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1997,6 +2337,12 @@ "assert-plus": "^1.0.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2903,6 +3249,15 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -2912,6 +3267,31 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -2927,11 +3307,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -2945,6 +3337,36 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -3546,6 +3968,77 @@ "node": ">=4" } }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -3665,14 +4158,6 @@ "rc": "cli.js" } }, - "node_modules/rc/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -3686,6 +4171,20 @@ "node": ">=4" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4119,11 +4618,62 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/sixel": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/sixel/-/sixel-0.16.0.tgz", + "integrity": "sha512-xicu6Y6Cyhmv5rjyHxq2r5RnKerlL/nyZEGjOU5bLCshXkZryc9JFJThTCKPOAtWXCfeWquEKFVFfMPcTD25PA==", + "license": "MIT" + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -4368,6 +4918,91 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/supports-terminal-graphics": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/supports-terminal-graphics/-/supports-terminal-graphics-0.1.0.tgz", + "integrity": "sha512-+KdfozhS0Fw8y5Sghw8kkZNGT8nWYzJ1EzcoIvVjxhl+26TJTs26y02yfBgvc1jh5AS/c8jcI3xtahhR95KRyQ==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -4389,23 +5024,29 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "node_modules/tinyglobby": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", - "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "license": "MIT", "dependencies": { - "fdir": "^6.4.2", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -4416,9 +5057,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -4479,6 +5120,15 @@ "node": ">=0.8" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -4612,6 +5262,28 @@ "node": ">= 0.8" } }, + "node_modules/unzip-stream": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.4.tgz", + "integrity": "sha512-PyofABPVv+d7fL7GOpusx7eRT9YETY2X04PhwbSipdj6bMxVCFJrr+nm0Mxqbf9hUiTin/UsnuFWBXlDZFy0Cw==", + "license": "MIT", + "dependencies": { + "binary": "^0.3.0", + "mkdirp": "^0.5.1" + } + }, + "node_modules/unzip-stream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -4878,6 +5550,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index 5e07924..87cc29c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "elm-review": "^2.13.5", "elm-test": "0.19.1-revision12", "elm-verify-examples": "^6.0.3", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "playwright": "^1.60.0", + "elm-bench": "^1.0.0" }, "scripts": { "test": "npm-run-all --print-name --sequential test:make test:format test:examples test:run fix:format-examples test:review ", @@ -19,9 +21,8 @@ "fix:format": "elm-format src/ tests/*.elm tests/String review benchmarks upgrade --yes", "fix:review": "elm-review --fix", "fix:format-examples": "elm-format --yes tests/VerifyExamples/Set/Extra", - "start": "npm-run-all -p -l start:docs start:bench", + "start": "npm-run-all -p -l start:docs", "start:docs": "elm-doc-preview", - "start:bench": "cd benchmarks; elm make --optimize --output elm-stuff/bench.html src/Benchmarks.elm && open elm-stuff/bench.html", "elm-bump": "npm-run-all --print-name --sequential test bump-version 'test:review -- --fix-all-without-prompt'", "bump-version": "(yes | elm bump)" }