From febc5cf1289d6ba313c38c393eb0710208cc1de4 Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Tue, 4 Oct 2022 01:17:21 +0200 Subject: [PATCH 1/5] Introduce elm-review --- package.json | 6 +- review/elm.json | 42 ++++++++++ review/src/ReviewConfig.elm | 71 ++++++++++++++++ src/Expect.elm | 8 +- src/MicroBitwiseExtra.elm | 17 ++-- src/RandomRun.elm | 25 +++--- src/Simplify.elm | 7 +- src/Simplify/Cmd.elm | 6 +- src/Test/Fuzz.elm | 1 - .../Html/Internal/ElmHtml/InternalTypes.elm | 14 ++-- src/Test/Html/Internal/ElmHtml/Markdown.elm | 4 +- src/Test/Html/Internal/ElmHtml/ToString.elm | 32 ++++---- src/Test/Html/Query.elm | 3 +- src/Test/Html/Query/Internal.elm | 50 +++++++----- src/Test/Html/Selector.elm | 18 ++--- src/Test/Html/Selector/Internal.elm | 19 +++-- tests/elm.json | 9 +-- tests/review/elm.json | 42 ++++++++++ tests/review/src/ReviewConfig.elm | 66 +++++++++++++++ tests/src/FloatWithinTests.elm | 20 +++-- tests/src/FuzzerTests.elm | 55 ++++++++----- tests/src/PerformanceRegressionTests.elm | 4 +- tests/src/Runner/String.elm | 7 -- tests/src/Runner/String/Coverage.elm | 4 - tests/src/Runner/String/Format.elm | 16 ++-- tests/src/RunnerTests.elm | 6 +- tests/src/SeedTests.elm | 24 +++--- tests/src/ShrinkingChallengeTests.elm | 12 ++- tests/src/Test/Html/EventTests.elm | 64 ++++++++++----- tests/src/Test/Html/ExampleApp.elm | 6 +- tests/src/Test/Html/ExampleAppTests.elm | 4 +- tests/src/Test/Html/Query/CustomNodeTests.elm | 4 +- tests/src/Test/Html/Query/MarkdownTests.elm | 4 +- tests/src/Test/Html/QueryTests.elm | 4 +- tests/src/Test/Html/SelectorTests.elm | 20 +++-- tests/src/Tests.elm | 81 +++++++++---------- 36 files changed, 523 insertions(+), 252 deletions(-) create mode 100644 review/elm.json create mode 100644 review/src/ReviewConfig.elm create mode 100644 tests/review/elm.json create mode 100644 tests/review/src/ReviewConfig.elm diff --git a/package.json b/package.json index 315ceba7..ed86ee95 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,12 @@ "test": "bash tests/run-tests.sh", "test:random": "RANDOMIZED=1 bash tests/run-tests.sh", "format": "elm-format --validate src tests/src benchmarks", + "review": "elm-review src/ && cd tests && yarn review", "install-local": "rm -rf ~/.elm/0.19.1/packages/elm-explorations/test/1.2.2/ && mkdir -p ~/.elm/0.19.1/packages/elm-explorations/test/1.2.2/ && cp -r ./{src,elm.json,LICENSE,README.md} ~/.elm/0.19.1/packages/elm-explorations/test/1.2.2/" }, "author": "Richard Feldman", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "devDependencies": { + "elm-review": "^2.7.5" + } } diff --git a/review/elm.json b/review/elm.json new file mode 100644 index 00000000..a68c1cd4 --- /dev/null +++ b/review/elm.json @@ -0,0 +1,42 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/core": "1.0.5", + "elm/json": "1.1.3", + "elm/project-metadata-utils": "1.0.2", + "jfmengels/elm-review": "2.8.1", + "jfmengels/elm-review-code-style": "1.0.0", + "jfmengels/elm-review-common": "1.2.1", + "jfmengels/elm-review-debug": "1.0.6", + "jfmengels/elm-review-documentation": "2.0.1", + "jfmengels/elm-review-simplify": "2.0.18", + "jfmengels/elm-review-unused": "1.1.22", + "stil4m/elm-syntax": "7.2.9" + }, + "indirect": { + "elm/html": "1.0.0", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3", + "elm-community/list-extra": "8.6.0", + "elm-explorations/test": "1.2.2", + "miniBill/elm-unicode": "1.0.2", + "pzp1997/assoc-list": "1.0.0", + "rtfeldman/elm-hex": "1.0.0", + "stil4m/structured-writer": "1.0.3" + } + }, + "test-dependencies": { + "direct": { + "elm-explorations/test": "1.2.2" + }, + "indirect": {} + } +} \ No newline at end of file diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm new file mode 100644 index 00000000..e812503b --- /dev/null +++ b/review/src/ReviewConfig.elm @@ -0,0 +1,71 @@ +module ReviewConfig exposing (config) + +{-| Do not rename the ReviewConfig module or the config function, because +`elm-review` will look for these. + +To add packages that contain rules, add them to this review project using + + `elm install author/packagename` + +when inside the directory containing this file. + +-} + +import Docs.NoMissing exposing (exposedModules, onlyExposed) +import Docs.ReviewAtDocs +import Docs.ReviewLinksAndSections +import Docs.UpToDateReadmeLinks +import NoDebug.Log +import NoDebug.TodoOrToString +import NoExposingEverything +import NoImportingEverything +import NoMissingTypeAnnotation +import NoMissingTypeAnnotationInLetIn +import NoMissingTypeExpose +import NoPrematureLetComputation +import NoSimpleLetBody +import NoUnused.CustomTypeConstructorArgs +import NoUnused.CustomTypeConstructors +import NoUnused.Dependencies +import NoUnused.Exports +import NoUnused.Modules +import NoUnused.Parameters +import NoUnused.Patterns +import NoUnused.Variables +import Review.Rule as Rule exposing (Rule) +import Simplify + + +config : List Rule +config = + [ NoExposingEverything.rule + , NoImportingEverything.rule [] + |> Rule.ignoreErrorsForFiles + [ "src/Test/Html/Internal/ElmHtml/ToString.elm" + , "src/Test/Html/Internal/ElmHtml/Query.elm" + ] + , NoMissingTypeAnnotation.rule + |> Rule.ignoreErrorsForFiles [ "src/Test/Internal/KernelConstants.elm" ] + , NoMissingTypeExpose.rule + , NoSimpleLetBody.rule + |> Rule.ignoreErrorsForFiles [ "src/Simplify.elm" ] + , NoPrematureLetComputation.rule + , NoUnused.CustomTypeConstructors.rule [] + |> Rule.ignoreErrorsForFiles [ "src/Test/Html/Internal/ElmHtml/InternalTypes.elm" ] + , NoUnused.CustomTypeConstructorArgs.rule + |> Rule.ignoreErrorsForFiles [ "src/Test/Html/Internal/ElmHtml/InternalTypes.elm" ] + , NoUnused.Dependencies.rule + , NoUnused.Exports.rule + |> Rule.ignoreErrorsForFiles + [ "src/Test/Html/Internal/ElmHtml/ToString.elm" + , "src/Test/Html/Internal/ElmHtml/Query.elm" + , "src/Test/Html/Internal/ElmHtml/InternalTypes.elm" + ] + , NoUnused.Modules.rule + , NoUnused.Parameters.rule + , NoUnused.Patterns.rule + , NoUnused.Variables.rule + |> Rule.ignoreErrorsForFiles [ "src/Simplify.elm" ] + , Simplify.rule Simplify.defaults + |> Rule.ignoreErrorsForFiles [ "src/Fuzz.elm" ] + ] diff --git a/src/Expect.elm b/src/Expect.elm index 1e9ce417..bc68ea45 100644 --- a/src/Expect.elm +++ b/src/Expect.elm @@ -731,16 +731,14 @@ equateWith reason comparison b a = usesFloats = isFloat (Internal.toString a) || isFloat (Internal.toString b) - - floatError = + in + if usesFloats then + fail <| if String.contains reason "not" then "Do not use Expect.notEqual with floats. Use Expect.notWithin instead." else "Do not use Expect.equal with floats. Use Expect.within instead." - in - if usesFloats then - fail floatError else testWith Equality reason comparison b a diff --git a/src/MicroBitwiseExtra.elm b/src/MicroBitwiseExtra.elm index 1b7c4dcf..512eeb30 100644 --- a/src/MicroBitwiseExtra.elm +++ b/src/MicroBitwiseExtra.elm @@ -28,17 +28,16 @@ isBitSet index num = int52FromTuple : ( Int, Int ) -> Int int52FromTuple ( highBits, lowBits ) = - (+) - (highBits - |> keepBits 20 - |> signedToUnsigned - -- Bitwise.shiftLeftBy 32 would be buggy, so we do: - |> (*) 0x0000000100000000 - ) - (lowBits + (highBits + |> keepBits 20 + |> signedToUnsigned + -- Bitwise.shiftLeftBy 32 would be buggy, so we do: + |> (*) 0x0000000100000000 + ) + + (lowBits |> signedToUnsigned |> keepBits 32 - ) + ) int52ToTuple : Int -> ( Int, Int ) diff --git a/src/RandomRun.elm b/src/RandomRun.elm index e58dc46d..2e9b5637 100644 --- a/src/RandomRun.elm +++ b/src/RandomRun.elm @@ -128,18 +128,15 @@ deleteChunk chunk run = let list = Queue.toList run.data - - result = - { run - | length = run.length - chunk.size - , data = - (List.take chunk.startIndex list - ++ List.drop (chunk.startIndex + chunk.size) list - ) - |> Queue.fromList - } in - result + { run + | length = run.length - chunk.size + , data = + (List.take chunk.startIndex list + ++ List.drop (chunk.startIndex + chunk.size) list + ) + |> Queue.fromList + } else run @@ -219,10 +216,6 @@ swapChunks : -> RandomRun -> Maybe RandomRun swapChunks { leftChunk, rightChunk } run = - let - list = - Queue.toList run.data - in Maybe.map2 (\lefts rights -> replaceInList @@ -232,7 +225,7 @@ swapChunks { leftChunk, rightChunk } run = ] ) run.length - list + (Queue.toList run.data) ) {- TODO PERF: both of these are doing the Queue.toList etc. operations while we already have that factored out in the `list` var. diff --git a/src/Simplify.elm b/src/Simplify.elm index da226f2b..95f2434c 100644 --- a/src/Simplify.elm +++ b/src/Simplify.elm @@ -137,15 +137,14 @@ logRun label run = logState : String -> State a -> State a logState label state = - let - runString = - Debug.toString (RandomRun.toList state.randomRun) - in let _ = case Fuzz.Internal.generate (PRNG.hardcoded state.randomRun) state.fuzzer of Generated { value } -> let + runString = + Debug.toString (RandomRun.toList state.randomRun) + _ = Debug.log (label ++ " - " ++ runString ++ " --->") value in diff --git a/src/Simplify/Cmd.elm b/src/Simplify/Cmd.elm index df8a8977..6a99df99 100644 --- a/src/Simplify/Cmd.elm +++ b/src/Simplify/Cmd.elm @@ -90,7 +90,7 @@ cmdsForRun run = List.fastConcat [ deletionCmds length , zeroCmds length - , minimizeChoiceCmds run length + , minimizeChoiceCmds run , minimizeFloatCmds run length , sortCmds length , redistributeCmds length @@ -126,8 +126,8 @@ sortCmds length = } -minimizeChoiceCmds : RandomRun -> Int -> List SimplifyCmd -minimizeChoiceCmds run length = +minimizeChoiceCmds : RandomRun -> List SimplifyCmd +minimizeChoiceCmds run = run |> RandomRun.toList |> List.indexedMap Tuple.pair diff --git a/src/Test/Fuzz.elm b/src/Test/Fuzz.elm index 11f8d5e9..4afa17f0 100644 --- a/src/Test/Fuzz.elm +++ b/src/Test/Fuzz.elm @@ -13,7 +13,6 @@ import Test.Coverage exposing (CoverageReport(..)) import Test.Coverage.Internal exposing (Coverage(..), ExpectedCoverage(..)) import Test.Expectation exposing (Expectation(..)) import Test.Internal exposing (Test(..), blankDescriptionFailure) -import Test.Runner.Coverage import Test.Runner.Failure exposing (InvalidReason(..), Reason(..)) diff --git a/src/Test/Html/Internal/ElmHtml/InternalTypes.elm b/src/Test/Html/Internal/ElmHtml/InternalTypes.elm index f2a6bc73..96f92516 100644 --- a/src/Test/Html/Internal/ElmHtml/InternalTypes.elm +++ b/src/Test/Html/Internal/ElmHtml/InternalTypes.elm @@ -19,9 +19,9 @@ module Test.Html.Internal.ElmHtml.InternalTypes exposing import Dict exposing (Dict) import Json.Decode exposing (field) -import Test.Html.Internal.ElmHtml.Constants as Constants exposing (..) -import Test.Html.Internal.ElmHtml.Helpers exposing (..) -import Test.Html.Internal.ElmHtml.Markdown exposing (..) +import Test.Html.Internal.ElmHtml.Constants as Constants +import Test.Html.Internal.ElmHtml.Helpers exposing (filterKnownKeys) +import Test.Html.Internal.ElmHtml.Markdown exposing (MarkdownModel, decodeMarkdownModel) import Test.Internal.KernelConstants exposing (kernelConstants) import VirtualDom @@ -312,7 +312,7 @@ decodeMarkdownNodeRecord context = decodeStyles : Json.Decode.Decoder (Dict String String) decodeStyles = Json.Decode.oneOf - [ field styleKey (Json.Decode.dict Json.Decode.string) + [ field Constants.styleKey (Json.Decode.dict Json.Decode.string) , Json.Decode.succeed Dict.empty ] @@ -353,7 +353,7 @@ decodeDictFilterMap decoder = decodeAttributes : Json.Decode.Decoder a -> Json.Decode.Decoder (Dict String a) decodeAttributes decoder = Json.Decode.oneOf - [ Json.Decode.field attributeKey (decodeDictFilterMap decoder) + [ Json.Decode.field Constants.attributeKey (decodeDictFilterMap decoder) , Json.Decode.succeed Dict.empty ] @@ -361,7 +361,7 @@ decodeAttributes decoder = decodeEvents : (EventHandler -> VirtualDom.Handler msg) -> Json.Decode.Decoder (Dict String (VirtualDom.Handler msg)) decodeEvents taggedEventDecoder = Json.Decode.oneOf - [ Json.Decode.field eventKey (Json.Decode.dict (Json.Decode.map taggedEventDecoder Json.Decode.value)) + [ Json.Decode.field Constants.eventKey (Json.Decode.dict (Json.Decode.map taggedEventDecoder Json.Decode.value)) , Json.Decode.succeed Dict.empty ] @@ -373,7 +373,7 @@ decodeFacts (HtmlContext taggers eventDecoder) = Json.Decode.map5 Facts decodeStyles (decodeEvents (eventDecoder taggers)) - (Json.Decode.maybe (Json.Decode.field attributeNamespaceKey Json.Decode.value)) + (Json.Decode.maybe (Json.Decode.field Constants.attributeNamespaceKey Json.Decode.value)) (decodeOthers Json.Decode.string) (decodeOthers Json.Decode.bool) diff --git a/src/Test/Html/Internal/ElmHtml/Markdown.elm b/src/Test/Html/Internal/ElmHtml/Markdown.elm index cdbef7af..5dde8563 100644 --- a/src/Test/Html/Internal/ElmHtml/Markdown.elm +++ b/src/Test/Html/Internal/ElmHtml/Markdown.elm @@ -1,11 +1,11 @@ module Test.Html.Internal.ElmHtml.Markdown exposing - ( MarkdownOptions, MarkdownModel, baseMarkdownModel + ( MarkdownOptions, MarkdownModel , decodeMarkdownModel ) {-| Markdown helpers -@docs MarkdownOptions, MarkdownModel, baseMarkdownModel +@docs MarkdownOptions, MarkdownModel @docs decodeMarkdownModel diff --git a/src/Test/Html/Internal/ElmHtml/ToString.elm b/src/Test/Html/Internal/ElmHtml/ToString.elm index b7e2c99d..be3abd29 100644 --- a/src/Test/Html/Internal/ElmHtml/ToString.elm +++ b/src/Test/Html/Internal/ElmHtml/ToString.elm @@ -95,14 +95,6 @@ nodeRecordToString options { tag, children, facts } = in "<" ++ tag ++ filling ++ ">" - closeTag = - "" - - childrenStrings = - List.map (nodeToLines options) children - |> List.concat - |> List.map ((++) (String.repeat options.indent " ")) - styles = case Dict.toList facts.styles of [] -> @@ -111,7 +103,7 @@ nodeRecordToString options { tag, children, facts } = styleValues -> styleValues |> List.map (\( key, value ) -> key ++ ":" ++ value ++ ";") - |> String.join "" + |> String.concat |> (\styleString -> "style=\"" ++ styleString ++ "\"") |> Just @@ -127,12 +119,11 @@ nodeRecordToString options { tag, children, facts } = |> Just boolToString b = - case b of - True -> - "True" + if b then + "True" - False -> - "False" + else + "False" boolAttributes = Dict.toList facts.boolAttributes @@ -153,6 +144,15 @@ nodeRecordToString options { tag, children, facts } = element kinds. -} _ -> - [ openTag [ classes, styles, stringAttributes, boolAttributes ] ] - ++ childrenStrings + let + closeTag = + "" + + childrenStrings = + children + |> List.concatMap (nodeToLines options) + |> List.map ((++) (String.repeat options.indent " ")) + in + openTag [ classes, styles, stringAttributes, boolAttributes ] + :: childrenStrings ++ [ closeTag ] diff --git a/src/Test/Html/Query.elm b/src/Test/Html/Query.elm index e7a55771..8c57f325 100644 --- a/src/Test/Html/Query.elm +++ b/src/Test/Html/Query.elm @@ -24,7 +24,8 @@ import Expect exposing (Expectation) import Html exposing (Html) import Test.Html.Internal.Inert as Inert import Test.Html.Query.Internal as Internal exposing (failWithQuery) -import Test.Html.Selector.Internal exposing (Selector, selectorToString) +import Test.Html.Selector exposing (Selector) +import Test.Html.Selector.Internal exposing (selectorToString) diff --git a/src/Test/Html/Query/Internal.elm b/src/Test/Html/Query/Internal.elm index 27e8374c..527111b7 100644 --- a/src/Test/Html/Query/Internal.elm +++ b/src/Test/Html/Query/Internal.elm @@ -1,4 +1,22 @@ -module Test.Html.Query.Internal exposing (Multiple(..), Query(..), QueryError(..), SelectorQuery(..), Single(..), addQueryFromHtmlLine, baseIndentation, contains, expectAll, expectAllHelp, failWithQuery, getChildren, getElementAt, getElementAtHelp, getHtmlContext, has, hasNot, isElement, joinAsList, missingDescendants, multipleToExpectation, prefixOutputLine, prependSelector, prettyPrint, printIndented, queryErrorToString, showSelectorOutcome, showSelectorOutcomeInverse, toLines, toLinesHelp, toOutputLine, traverse, traverseSelector, traverseSelectors, verifySingle, withHtmlContext) +module Test.Html.Query.Internal exposing + ( Multiple(..) + , Query(..) + , QueryError(..) + , SelectorQuery(..) + , Single(..) + , contains + , expectAll + , failWithQuery + , has + , hasNot + , joinAsList + , multipleToExpectation + , prependSelector + , prettyPrint + , queryErrorToString + , traverse + , verifySingle + ) import Expect exposing (Expectation) import Test.Html.Descendant as Descendant @@ -209,20 +227,20 @@ joinAsList toStr list = printIndented : Int -> Int -> ElmHtml msg -> String printIndented maxDigits index elmHtml = - let - caption = - (String.fromInt (index + 1) ++ ")") - |> String.padRight (maxDigits + 3) ' ' - |> String.append baseIndentation - - indentation = - String.repeat (String.length caption) " " - in case String.split "\n" (prettyPrint elmHtml) of [] -> "" first :: rest -> + let + caption = + (String.fromInt (index + 1) ++ ")") + |> String.padRight (maxDigits + 3) ' ' + |> String.append baseIndentation + + indentation = + String.repeat (String.length caption) " " + in rest |> List.map (String.append indentation) |> (::) (caption ++ first) @@ -360,16 +378,6 @@ getChildren elmHtml = [] -isElement : ElmHtml msg -> Bool -isElement elmHtml = - case elmHtml of - NodeEntry _ -> - True - - _ -> - False - - verifySingle : String -> List a -> Result QueryError a verifySingle queryName list = case list of @@ -474,7 +482,7 @@ contains expectedDescendants query = else Expect.fail - (String.join "" + (String.concat [ "\t✗ /" , String.fromInt <| List.length missing , "\\ missing descendants: \n\n" diff --git a/src/Test/Html/Selector.elm b/src/Test/Html/Selector.elm index 20d28c33..dfc8b06b 100644 --- a/src/Test/Html/Selector.elm +++ b/src/Test/Html/Selector.elm @@ -24,7 +24,7 @@ import Html exposing (Attribute) import Json.Decode import Test.Html.Internal.ElmHtml.InternalTypes as InternalTypes import Test.Html.Internal.Inert as Inert -import Test.Html.Selector.Internal as Internal exposing (..) +import Test.Html.Selector.Internal as Internal exposing (Selector(..)) {-| A selector used to filter sets of elements. @@ -132,7 +132,7 @@ to matching the entire class attribute exactly. -} exactClassName : String -> Selector exactClassName = - namedAttr "className" + Internal.namedAttr "className" {-| Matches elements that have the given `id` attribute. @@ -155,7 +155,7 @@ exactClassName = -} id : String -> Selector id = - namedAttr "id" + Internal.namedAttr "id" {-| Matches elements that have the given tag. @@ -194,7 +194,7 @@ attribute attr = |> Classes else - namedAttr key value + Internal.namedAttr key value Ok (InternalTypes.Property { key, value }) -> if key == "className" then @@ -207,12 +207,12 @@ attribute attr = else value |> Json.Decode.decodeValue Json.Decode.string - |> Result.map (namedAttr key) + |> Result.map (Internal.namedAttr key) |> orElseLazy (\() -> value |> Json.Decode.decodeValue Json.Decode.bool - |> Result.map (namedBoolAttr key) + |> Result.map (Internal.namedBoolAttr key) ) |> Result.withDefault Invalid @@ -297,7 +297,7 @@ attribute with the given value. -} selected : Bool -> Selector selected = - namedBoolAttr "selected" + Internal.namedBoolAttr "selected" {-| Matches elements that have a @@ -306,7 +306,7 @@ attribute with the given value. -} disabled : Bool -> Selector disabled = - namedBoolAttr "disabled" + Internal.namedBoolAttr "disabled" {-| Matches elements that have a @@ -315,7 +315,7 @@ attribute with the given value. -} checked : Bool -> Selector checked = - namedBoolAttr "checked" + Internal.namedBoolAttr "checked" diff --git a/src/Test/Html/Selector/Internal.elm b/src/Test/Html/Selector/Internal.elm index abe9a4e1..42198658 100644 --- a/src/Test/Html/Selector/Internal.elm +++ b/src/Test/Html/Selector/Internal.elm @@ -1,4 +1,12 @@ -module Test.Html.Selector.Internal exposing (Selector(..), hasAll, namedAttr, namedBoolAttr, query, queryAll, queryAllChildren, selectorToString, styleToString) +module Test.Html.Selector.Internal exposing + ( Selector(..) + , hasAll + , namedAttr + , namedBoolAttr + , queryAll + , queryAllChildren + , selectorToString + ) import Test.Html.Internal.ElmHtml.InternalTypes exposing (ElmHtml) import Test.Html.Internal.ElmHtml.Query as ElmHtmlQuery @@ -24,12 +32,11 @@ selectorToString criteria = "\"" ++ s ++ "\"" boolToString b = - case b of - True -> - "True" + if b then + "True" - False -> - "False" + else + "False" in case criteria of All list -> diff --git a/tests/elm.json b/tests/elm.json index 3ed63d50..172fef81 100644 --- a/tests/elm.json +++ b/tests/elm.json @@ -6,21 +6,14 @@ "elm-version": "0.19.1", "dependencies": { "direct": { - "elm/browser": "1.0.2", - "elm/bytes": "1.0.8", "elm/core": "1.0.5", "elm/html": "1.0.0", "elm/json": "1.1.3", "elm/random": "1.0.0", - "elm/time": "1.0.0", - "elm/url": "1.0.0", - "elm/virtual-dom": "1.0.2", - "elm-explorations/linear-algebra": "1.0.3", "elm-explorations/markdown": "1.0.0", "elm-explorations/test": "1.2.2", "elm-explorations/webgl": "1.1.2", - "jinjor/elm-diff": "1.0.6", - "turboMaCk/queue": "1.0.2" + "jinjor/elm-diff": "1.0.6" }, "indirect": {} }, diff --git a/tests/review/elm.json b/tests/review/elm.json new file mode 100644 index 00000000..a68c1cd4 --- /dev/null +++ b/tests/review/elm.json @@ -0,0 +1,42 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/core": "1.0.5", + "elm/json": "1.1.3", + "elm/project-metadata-utils": "1.0.2", + "jfmengels/elm-review": "2.8.1", + "jfmengels/elm-review-code-style": "1.0.0", + "jfmengels/elm-review-common": "1.2.1", + "jfmengels/elm-review-debug": "1.0.6", + "jfmengels/elm-review-documentation": "2.0.1", + "jfmengels/elm-review-simplify": "2.0.18", + "jfmengels/elm-review-unused": "1.1.22", + "stil4m/elm-syntax": "7.2.9" + }, + "indirect": { + "elm/html": "1.0.0", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3", + "elm-community/list-extra": "8.6.0", + "elm-explorations/test": "1.2.2", + "miniBill/elm-unicode": "1.0.2", + "pzp1997/assoc-list": "1.0.0", + "rtfeldman/elm-hex": "1.0.0", + "stil4m/structured-writer": "1.0.3" + } + }, + "test-dependencies": { + "direct": { + "elm-explorations/test": "1.2.2" + }, + "indirect": {} + } +} \ No newline at end of file diff --git a/tests/review/src/ReviewConfig.elm b/tests/review/src/ReviewConfig.elm new file mode 100644 index 00000000..a2838e6f --- /dev/null +++ b/tests/review/src/ReviewConfig.elm @@ -0,0 +1,66 @@ +module ReviewConfig exposing (config) + +{-| Do not rename the ReviewConfig module or the config function, because +`elm-review` will look for these. + +To add packages that contain rules, add them to this review project using + + `elm install author/packagename` + +when inside the directory containing this file. + +-} + +import Docs.NoMissing exposing (exposedModules, onlyExposed) +import Docs.ReviewAtDocs +import Docs.ReviewLinksAndSections +import Docs.UpToDateReadmeLinks +import NoDebug.Log +import NoDebug.TodoOrToString +import NoExposingEverything +import NoImportingEverything +import NoMissingTypeAnnotation +import NoMissingTypeAnnotationInLetIn +import NoMissingTypeExpose +import NoPrematureLetComputation +import NoSimpleLetBody +import NoUnused.CustomTypeConstructorArgs +import NoUnused.CustomTypeConstructors +import NoUnused.Dependencies +import NoUnused.Exports +import NoUnused.Modules +import NoUnused.Parameters +import NoUnused.Patterns +import NoUnused.Variables +import Review.Rule as Rule exposing (Rule) +import Simplify + + +config : List Rule +config = + [ NoExposingEverything.rule + , NoImportingEverything.rule [] + , NoMissingTypeAnnotation.rule + , NoMissingTypeExpose.rule + , NoSimpleLetBody.rule + , NoPrematureLetComputation.rule + , NoUnused.CustomTypeConstructors.rule [] + , NoUnused.CustomTypeConstructorArgs.rule + |> Rule.ignoreErrorsForFiles [ "src/Test/Html/EventTests.elm" ] + , NoUnused.Dependencies.rule + , NoUnused.Exports.rule + |> Rule.ignoreErrorsForFiles [ "src/Runner/Log.elm" ] + , NoUnused.Modules.rule + , NoUnused.Parameters.rule + , NoUnused.Patterns.rule + , NoUnused.Variables.rule + |> Rule.ignoreErrorsForFiles + [ "src/Runner/Log.elm" + , "src/Main.elm" + ] + , Simplify.rule Simplify.defaults + |> Rule.ignoreErrorsForFiles + [ "src/Tests.elm" + , "src/FuzzerTests.elm" + ] + ] diff --git a/tests/src/FloatWithinTests.elm b/tests/src/FloatWithinTests.elm index bd364ccd..8ee3984b 100644 --- a/tests/src/FloatWithinTests.elm +++ b/tests/src/FloatWithinTests.elm @@ -1,9 +1,15 @@ module FloatWithinTests exposing (floatWithinTests) import Expect exposing (FloatingPointTolerance(..)) -import Fuzz exposing (..) -import Helpers exposing (..) -import Test exposing (..) +import Fuzz exposing (niceFloat) +import Helpers + exposing + ( different + , expectTestToFail + , expectToFail + , same + ) +import Test exposing (Test, describe, fuzz, fuzz2, fuzz3, test) floatWithinTests : Test @@ -17,7 +23,7 @@ floatWithinTests = \_ -> 0.1 + 0.2 |> Expect.within (Absolute 0.000000001) 0.3 , test "approximation of pi" <| \_ -> 3.14 |> Expect.within (Absolute 0.01) pi - , fuzz (floatRange 0.000001 100000) "relative tolerance of circle circumference using pi approximation" <| + , fuzz (Fuzz.floatRange 0.000001 100000) "relative tolerance of circle circumference using pi approximation" <| \radius -> (radius * pi) |> Expect.within (Relative 0.001) (radius * 3.14) @@ -29,14 +35,14 @@ floatWithinTests = , test "too high absolute tolerance of circle circumference using pi approximation" <| \() -> expectTestToFail <| - fuzz (floatRange 0.000001 100000) "x" <| + fuzz (Fuzz.floatRange 0.000001 100000) "x" <| \radius -> (radius * pi) |> Expect.within (Absolute 0.001) (radius * 3.14) , test "too high relative tolerance of circle circumference using pi approximation" <| \() -> expectTestToFail <| - fuzz (floatRange 0.000001 100000) "x" <| + fuzz (Fuzz.floatRange 0.000001 100000) "x" <| \radius -> (radius * pi) |> Expect.within (Relative 0.0001) (radius * 3.14) @@ -129,7 +135,7 @@ floatWithinTests = a |> Expect.notWithin (Absolute (abs epsilon)) b in different withinTest notWithinTest - , fuzz2 (pair niceFloat niceFloat) (pair niceFloat niceFloat) "within and notWithin should never agree on absolute or relative tolerance" <| + , fuzz2 (Fuzz.pair niceFloat niceFloat) (Fuzz.pair niceFloat niceFloat) "within and notWithin should never agree on absolute or relative tolerance" <| \( absoluteEpsilon, relativeEpsilon ) ( a, b ) -> let withinTest = diff --git a/tests/src/FuzzerTests.elm b/tests/src/FuzzerTests.elm index aaa954d0..db84c57d 100644 --- a/tests/src/FuzzerTests.elm +++ b/tests/src/FuzzerTests.elm @@ -2,10 +2,25 @@ module FuzzerTests exposing (fuzzerTests) import Array import Expect exposing (Expectation) -import Fuzz exposing (..) -import Helpers exposing (..) -import Random exposing (Generator) -import Test exposing (..) +import Fuzz exposing (Fuzzer) +import Helpers + exposing + ( canGenerate + , canGenerateSatisfying + , canGenerateSatisfyingWith + , canGenerateWith + , cannotGenerate + , cannotGenerateSatisfying + , cannotGenerateSatisfyingWith + , doesNotReject + , passes + , rejects + , simplifiesTowards + , simplifiesTowardsMany + , simplifiesTowardsWith + ) +import Random +import Test exposing (Test, describe, fuzz, fuzz2, fuzz3) import Test.Coverage import Test.Runner exposing (Simplifiable) @@ -14,12 +29,12 @@ fuzzerTests : Test fuzzerTests = describe "Fuzzer tests" [ describe "FuzzN (uses use pair or triple) testing string length properties" - [ fuzz2 string string "fuzz2" <| + [ fuzz2 Fuzz.string Fuzz.string "fuzz2" <| \a b -> - testStringLengthIsPreserved [ a, b ] - , fuzz3 string string string "fuzz3" <| + Helpers.testStringLengthIsPreserved [ a, b ] + , fuzz3 Fuzz.string Fuzz.string Fuzz.string "fuzz3" <| \a b c -> - testStringLengthIsPreserved [ a, b, c ] + Helpers.testStringLengthIsPreserved [ a, b, c ] ] , testRunnerModuleTests , fuzzerSpecificationTests @@ -30,7 +45,7 @@ fuzzerTests = testRunnerModuleTests : Test testRunnerModuleTests = describe "Test.Runner.{fuzz,simplify}" - [ fuzz randomSeedFuzzer "Claim there are no even numbers" <| + [ fuzz Helpers.randomSeedFuzzer "Claim there are no even numbers" <| \seed -> let -- fuzzer is guaranteed to produce an even number @@ -64,13 +79,15 @@ testRunnerModuleTests = in finalValue |> Expect.equal (Just 2) - , fuzz randomSeedFuzzer "No strings contain the letter e" <| + , fuzz Helpers.randomSeedFuzzer "No strings contain the letter e" <| \seed -> let -- fuzzer is guaranteed to produce a string with the letter e fuzzer : Fuzzer String fuzzer = - map2 (\pre suf -> pre ++ "e" ++ suf) string string + Fuzz.map2 (\pre suf -> pre ++ "e" ++ suf) + Fuzz.string + Fuzz.string getExpectation : String -> Expectation getExpectation string = @@ -1149,8 +1166,8 @@ coverageTests = ] } (Fuzz.intRange 1 20) - "Int range boundaries" - (\n -> Expect.pass) + "reportCoverage: pass, example 1" + (\_ -> Expect.pass) , Test.fuzzWith { runs = 10000 , coverage = @@ -1160,8 +1177,8 @@ coverageTests = ] } (Fuzz.intRange 1 20) - "Fizz buzz" - (\n -> Expect.pass) + "reportCoverage: pass, example 2" + (\_ -> Expect.pass) , Test.fuzzWith { runs = 10000 , coverage = @@ -1173,8 +1190,8 @@ coverageTests = ] } (Fuzz.intRange 1 20) - "Fizz buzz even odd" - (\n -> Expect.pass) + "reportCoverage: pass, example 3" + (\_ -> Expect.pass) , Test.fuzzWith { runs = 10000 , coverage = @@ -1187,8 +1204,8 @@ coverageTests = ] } (Fuzz.intRange 1 20) - "Int range boundaries - mandatory" - (\n -> Expect.pass) + "expectCoverage: pass" + (\_ -> Expect.pass) ] diff --git a/tests/src/PerformanceRegressionTests.elm b/tests/src/PerformanceRegressionTests.elm index 574d8452..fcdae7ea 100644 --- a/tests/src/PerformanceRegressionTests.elm +++ b/tests/src/PerformanceRegressionTests.elm @@ -1,7 +1,7 @@ module PerformanceRegressionTests exposing (all) import Expect -import Test exposing (..) +import Test exposing (Test, describe, test) all : Test @@ -12,6 +12,7 @@ all = ] +mediumListTest : Test mediumListTest = -- this list should be large but still small enough to get a char-by-char diff let @@ -58,6 +59,7 @@ mediumListTest = \_ -> input |> Expect.equal expected +hugeListTest : Test hugeListTest = -- this list should be too large to get a char-by-char diff let diff --git a/tests/src/Runner/String.elm b/tests/src/Runner/String.elm index df5f644e..f67df793 100644 --- a/tests/src/Runner/String.elm +++ b/tests/src/Runner/String.elm @@ -11,7 +11,6 @@ Note that this always uses an initial seed of 902101337, since it can't do effec -} -import Dict exposing (Dict) import Expect exposing (Expectation) import Random import Runner.String.Coverage @@ -118,7 +117,6 @@ fromExpectation labels expectation summary = { summaryWithCoverage | output = summaryWithCoverage.output ++ newOutput , failed = summaryWithCoverage.failed + 1 - , passed = summaryWithCoverage.passed } @@ -139,11 +137,6 @@ defaultRuns = 100 -wrap : String -> String -> String -wrap delimiter string = - delimiter ++ string ++ delimiter - - indentLines : String -> String indentLines str = str diff --git a/tests/src/Runner/String/Coverage.elm b/tests/src/Runner/String/Coverage.elm index cf96390e..933f54fe 100644 --- a/tests/src/Runner/String/Coverage.elm +++ b/tests/src/Runner/String/Coverage.elm @@ -1,10 +1,6 @@ module Runner.String.Coverage exposing (report) -import Dict exposing (Dict) -import Expect exposing (Expectation) -import Set exposing (Set) import Test.Coverage exposing (CoverageReport(..)) -import Test.Runner report : List String -> CoverageReport -> Maybe String diff --git a/tests/src/Runner/String/Format.elm b/tests/src/Runner/String/Format.elm index 447ef53f..28cbf5f5 100644 --- a/tests/src/Runner/String/Format.elm +++ b/tests/src/Runner/String/Format.elm @@ -57,7 +57,7 @@ format description reason = "\nThese keys are missing: " ++ (missing |> String.join ", " |> (\d -> "[ " ++ d ++ " ]")) in - String.join "" + String.concat [ verticalBar description expected actual , "\n" , extraStr @@ -76,6 +76,7 @@ verticalBar comparison below above = |> String.join "\n" +hexInt : Int -> String hexInt int = if int == 0 then "0" @@ -121,6 +122,7 @@ hexInt int = zeroPad4 (hexIntInternal int) +escapeUnicodeChars : String -> String escapeUnicodeChars s = let isAsciiChar v = @@ -141,7 +143,7 @@ escapeUnicodeChars s = else "\\u{" ++ hexInt c ++ "}" ) - |> String.join "" + |> String.concat listDiffToString : @@ -161,7 +163,7 @@ listDiffToString index description { expected, actual } originals = , "\n" , Debug.toString originals.originalActual ] - |> String.join "" + |> String.concat ( _ :: _, [] ) -> verticalBar (description ++ " was shorter than") @@ -185,7 +187,7 @@ listDiffToString index description { expected, actual } originals = else -- We found elements that differ; fail! - String.join "" + String.concat [ verticalBar description (Debug.toString originals.originalExpected) (Debug.toString originals.originalActual) @@ -211,12 +213,12 @@ equalityToString { operation, expected, actual } = combine things = things - |> List.map (String.join "") + |> List.map String.concat |> String.join "\n" in verticalBar operation - (if String.join "" valueBelow /= String.join "" unicodeValueBelow then + (if String.concat valueBelow /= String.concat unicodeValueBelow then -- we need to show the escaped string as well combine [ valueBelow @@ -231,7 +233,7 @@ equalityToString { operation, expected, actual } = , diffArrowsBelow ] ) - (if String.join "" valueAbove /= String.join "" unicodeValueAbove then + (if String.concat valueAbove /= String.concat unicodeValueAbove then -- we need to show the escaped string as well combine [ unicodeDiffArrowsAbove diff --git a/tests/src/RunnerTests.elm b/tests/src/RunnerTests.elm index 6f66cf58..aa8fb6f0 100644 --- a/tests/src/RunnerTests.elm +++ b/tests/src/RunnerTests.elm @@ -1,10 +1,10 @@ module RunnerTests exposing (all) import Expect -import Fuzz exposing (..) +import Fuzz import Helpers exposing (expectPass) import Random -import Test exposing (..) +import Test exposing (Test, describe, fuzz2, test) import Test.Runner exposing (SeededRunners(..)) import Test.Runner.Failure @@ -24,7 +24,7 @@ fromTest : Test fromTest = describe "TestRunner.fromTest" [ describe "test length" - [ fuzz2 int int "only positive tests runs are valid" <| + [ fuzz2 Fuzz.int Fuzz.int "only positive tests runs are valid" <| \runs intSeed -> case Test.Runner.fromTest runs (Random.initialSeed intSeed) passing of Invalid str -> diff --git a/tests/src/SeedTests.elm b/tests/src/SeedTests.elm index 376b497e..2b9b9a6b 100644 --- a/tests/src/SeedTests.elm +++ b/tests/src/SeedTests.elm @@ -1,9 +1,9 @@ module SeedTests exposing (fixedSeed, noAutoFail, tests) import Expect -import Fuzz exposing (..) +import Fuzz import Random -import Test exposing (..) +import Test exposing (Test, describe, fuzz, only, skip, test) @@ -37,13 +37,13 @@ exactly the string "Seed test". -} fuzzTest : Test fuzzTest = - fuzz int "It receives the expected number" <| + fuzz Fuzz.int "It receives the expected number" <| \num -> Expect.equal num expectedNum fuzzTestAfterOneDistributed : Test fuzzTestAfterOneDistributed = - fuzz int "This should be different than expectedNum, because there is a fuzz test before it." <| + fuzz Fuzz.int "This should be different than expectedNum, because there is a fuzz test before it." <| \num -> Expect.equal num oneSeedAlreadyDistributed @@ -52,7 +52,7 @@ tests = [ describe "Seed test" [ fuzzTest ] , describe "Seed test" - [ fuzz int "It receives the expected number even though this text is different" <| + [ fuzz Fuzz.int "It receives the expected number even though this text is different" <| \num -> Expect.equal num expectedNum ] @@ -94,18 +94,18 @@ tests = ] ] , Test.concat - [ fuzz int "top-level fuzz tests don't affect subsequent top-level fuzz tests, since they use their labels to get different seeds" <| + [ fuzz Fuzz.int "top-level fuzz tests don't affect subsequent top-level fuzz tests, since they use their labels to get different seeds" <| \num -> Expect.equal num 110 , describe "Seed test" [ fuzzTest ] , describe "another top-level fuzz test" - [ fuzz int "it still gets different values, due to computing the seed as a hash of the label, and these labels must be unique" <| + [ fuzz Fuzz.int "it still gets different values, due to computing the seed as a hash of the label, and these labels must be unique" <| \num -> Expect.equal num 8759 ] ] , describe "Fuzz tests with different outer describe texts get different seeds" - [ fuzz int "It receives the expected number" <| + [ fuzz Fuzz.int "It receives the expected number" <| \num -> Expect.equal num -31327 ] @@ -140,7 +140,7 @@ noAutoFail = Test.concat [ describe "Seed test" [ only <| - fuzz int "No Autofail here" <| + fuzz Fuzz.int "No Autofail here" <| \num -> Expect.equal num expectedNum , test "This should never get run" <| @@ -151,14 +151,14 @@ noAutoFail = , -- Test.skip skips the test in question describe "Seed test" [ skip <| - fuzz int "Skip test sanity check" <| + fuzz Fuzz.int "Skip test sanity check" <| \_ -> Expect.fail "Test.skip is broken! This should not have been run." , fuzzTestAfterOneDistributed ] , -- the previous test gets the same answer if Test.skip is removed describe "Seed test" - [ fuzz int "Skip test sanity check" <| + [ fuzz Fuzz.int "Skip test sanity check" <| \_ -> Expect.pass , fuzzTestAfterOneDistributed @@ -166,7 +166,7 @@ noAutoFail = , -- Test.only skips the other tests. describe "Seed test" [ only <| - fuzz int "No Autofail here" <| + fuzz Fuzz.int "No Autofail here" <| \num -> Expect.equal num expectedNum , test "this should never get run" <| diff --git a/tests/src/ShrinkingChallengeTests.elm b/tests/src/ShrinkingChallengeTests.elm index 813f58d0..5a254071 100644 --- a/tests/src/ShrinkingChallengeTests.elm +++ b/tests/src/ShrinkingChallengeTests.elm @@ -1,10 +1,14 @@ module ShrinkingChallengeTests exposing (shrinkingChallenges) -import Fuzz exposing (..) -import Helpers exposing (..) -import Random +import Fuzz exposing (Fuzzer) +import Helpers + exposing + ( simplifiesTowards + , simplifiesTowardsMany + , simplifiesTowardsWith + ) import Set -import Test exposing (..) +import Test exposing (Test, describe) {-| diff --git a/tests/src/Test/Html/EventTests.elm b/tests/src/Test/Html/EventTests.elm index 4897b946..0a295bda 100644 --- a/tests/src/Test/Html/EventTests.elm +++ b/tests/src/Test/Html/EventTests.elm @@ -3,12 +3,12 @@ module Test.Html.EventTests exposing (all) import Expect import Html exposing (Html, button, div, input, text) import Html.Attributes as Attr -import Html.Events exposing (..) +import Html.Events import Html.Keyed as Keyed import Html.Lazy as Lazy import Json.Decode exposing (Value, succeed) import Json.Encode as Encode -import Test exposing (..) +import Test exposing (Test, describe, test) import Test.Html.Event as Event exposing (Event) import Test.Html.Query as Query import Test.Html.Selector exposing (tag) @@ -27,7 +27,11 @@ all = , test "return msg for stopPropagation event listener" <| \() -> div [ Attr.class "container" ] - [ button [ stopPropagationOn "click" (succeed ( SampleMsg, True )) ] [ text "click me" ] + [ button + [ Html.Events.stopPropagationOn "click" + (succeed ( SampleMsg, True )) + ] + [ text "click me" ] ] |> Query.fromHtml |> Query.findAll [ tag "button" ] @@ -37,7 +41,11 @@ all = , test "return msg for preventDefault event listener" <| \() -> div [ Attr.class "container" ] - [ button [ preventDefaultOn "click" (succeed ( SampleMsg, True )) ] [ text "click me" ] + [ button + [ Html.Events.preventDefaultOn "click" + (succeed ( SampleMsg, True )) + ] + [ text "click me" ] ] |> Query.fromHtml |> Query.findAll [ tag "button" ] @@ -91,31 +99,35 @@ all = |> Event.expect (SampleInputMsg "foobar") , test "returns msg for input with transformation" <| \() -> - input [ onInput (String.toUpper >> SampleInputMsg) ] [] + input [ Html.Events.onInput (String.toUpper >> SampleInputMsg) ] [] |> Query.fromHtml |> Event.simulate (Event.input "cats") |> Event.expect (SampleInputMsg "CATS") , test "returns msg for check event" <| \() -> - input [ onCheck SampleCheckedMsg ] [] + input [ Html.Events.onCheck SampleCheckedMsg ] [] |> Query.fromHtml |> Event.simulate (Event.check True) |> Event.expect (SampleCheckedMsg True) , test "returns msg for custom event" <| \() -> - input [ on "keyup" (Json.Decode.map SampleKeyUpMsg keyCode) ] [] + input + [ Html.Events.on "keyup" + (Json.Decode.map SampleKeyUpMsg Html.Events.keyCode) + ] + [] |> Query.fromHtml |> Event.simulate ( "keyup", Encode.object [ ( "keyCode", Encode.int 5 ) ] ) |> Event.expect (SampleKeyUpMsg 5) - , testEvent onDoubleClick Event.doubleClick - , testEvent onMouseDown Event.mouseDown - , testEvent onMouseUp Event.mouseUp - , testEvent onMouseLeave Event.mouseLeave - , testEvent onMouseOver Event.mouseOver - , testEvent onMouseOut Event.mouseOut - , testEvent onSubmit Event.submit - , testEvent onBlur Event.blur - , testEvent onFocus Event.focus + , testEvent Html.Events.onDoubleClick Event.doubleClick + , testEvent Html.Events.onMouseDown Event.mouseDown + , testEvent Html.Events.onMouseUp Event.mouseUp + , testEvent Html.Events.onMouseLeave Event.mouseLeave + , testEvent Html.Events.onMouseOver Event.mouseOver + , testEvent Html.Events.onMouseOut Event.mouseOut + , testEvent Html.Events.onSubmit Event.submit + , testEvent Html.Events.onBlur Event.blur + , testEvent Html.Events.onFocus Event.focus , test "event result" <| \() -> Query.fromHtml sampleHtml @@ -192,7 +204,7 @@ type Msg sampleHtml : Html Msg sampleHtml = div [ Attr.class "container" ] - [ button [ onClick SampleMsg ] [ text "click me" ] + [ button [ Html.Events.onClick SampleMsg ] [ text "click me" ] ] @@ -200,7 +212,7 @@ sampleLazyHtml : Html Msg sampleLazyHtml = div [ Attr.class "container" ] [ Lazy.lazy - (\str -> button [ onClick SampleMsg ] [ text str ]) + (\str -> button [ Html.Events.onClick SampleMsg ] [ text str ]) "click me" ] @@ -208,7 +220,11 @@ sampleLazyHtml = sampleMappedHtml : Html Msg sampleMappedHtml = div [ Attr.class "container" ] - [ Html.map (always MappedSampleMsg) (button [ onClick SampleMsg ] [ text "click me" ]) + [ Html.map (always MappedSampleMsg) + (button + [ Html.Events.onClick SampleMsg ] + [ text "click me" ] + ) ] @@ -217,7 +233,11 @@ sampleMappedLazyHtml = div [ Attr.class "container" ] [ Html.map (always MappedSampleMsg) <| Lazy.lazy - (\str -> button [ onClick SampleMsg ] [ text str ]) + (\str -> + button + [ Html.Events.onClick SampleMsg ] + [ text str ] + ) "click me" ] @@ -227,7 +247,7 @@ sampleMappedKeyedHtml = div [ Attr.class "container" ] [ Html.map (always MappedSampleMsg) <| Keyed.node "button" - [ onClick SampleMsg ] + [ Html.Events.onClick SampleMsg ] [ ( "key", text "click me" ) ] ] @@ -239,7 +259,7 @@ deepMappedHtml = (div [] [ Html.map (\msg -> msg ++ "bar") (div [] - [ input [ onInput identity ] [] + [ input [ Html.Events.onInput identity ] [] ] ) ] diff --git a/tests/src/Test/Html/ExampleApp.elm b/tests/src/Test/Html/ExampleApp.elm index 2e7a3eca..24065e1e 100644 --- a/tests/src/Test/Html/ExampleApp.elm +++ b/tests/src/Test/Html/ExampleApp.elm @@ -1,7 +1,7 @@ -module Test.Html.ExampleApp exposing (exampleModel, view) +module Test.Html.ExampleApp exposing (Model, Msg, exampleModel, view) -import Html exposing (..) -import Html.Attributes exposing (..) +import Html exposing (Html, a, div, footer, header, li, section, text) +import Html.Attributes exposing (class, href, id) import Html.Events exposing (onClick) import Html.Keyed as Keyed import Html.Lazy as Lazy diff --git a/tests/src/Test/Html/ExampleAppTests.elm b/tests/src/Test/Html/ExampleAppTests.elm index 1e781081..ad12ddf3 100644 --- a/tests/src/Test/Html/ExampleAppTests.elm +++ b/tests/src/Test/Html/ExampleAppTests.elm @@ -2,10 +2,10 @@ module Test.Html.ExampleAppTests exposing (all) import Expect import Html.Attributes exposing (href) -import Test exposing (..) +import Test exposing (Test, describe, test) import Test.Html.ExampleApp exposing (exampleModel, view) import Test.Html.Query as Query -import Test.Html.Selector exposing (..) +import Test.Html.Selector exposing (attribute, classes, id, tag, text) all : Test diff --git a/tests/src/Test/Html/Query/CustomNodeTests.elm b/tests/src/Test/Html/Query/CustomNodeTests.elm index 89ca17f3..57024577 100644 --- a/tests/src/Test/Html/Query/CustomNodeTests.elm +++ b/tests/src/Test/Html/Query/CustomNodeTests.elm @@ -1,9 +1,9 @@ module Test.Html.Query.CustomNodeTests exposing (all) import Html exposing (Html, div) -import Test exposing (..) +import Test exposing (Test, describe, test) import Test.Html.Query as Query -import Test.Html.Selector exposing (..) +import Test.Html.Selector exposing (text) import WebGL exposing (Shader) diff --git a/tests/src/Test/Html/Query/MarkdownTests.elm b/tests/src/Test/Html/Query/MarkdownTests.elm index 79d208f0..5d0b7ea1 100644 --- a/tests/src/Test/Html/Query/MarkdownTests.elm +++ b/tests/src/Test/Html/Query/MarkdownTests.elm @@ -1,9 +1,9 @@ module Test.Html.Query.MarkdownTests exposing (all) import Markdown -import Test exposing (..) +import Test exposing (Test, describe, test) import Test.Html.Query as Query -import Test.Html.Selector exposing (..) +import Test.Html.Selector exposing (text) all : Test diff --git a/tests/src/Test/Html/QueryTests.elm b/tests/src/Test/Html/QueryTests.elm index 134ff5c2..d9624a69 100644 --- a/tests/src/Test/Html/QueryTests.elm +++ b/tests/src/Test/Html/QueryTests.elm @@ -7,9 +7,9 @@ import Html.Attributes as Attr exposing (href) import Html.Keyed as Keyed import Html.Lazy as Lazy import Json.Encode as Encode -import Test exposing (..) +import Test exposing (Test, describe, fuzz, test) import Test.Html.Query as Query exposing (Single) -import Test.Html.Selector exposing (..) +import Test.Html.Selector exposing (attribute, class, classes, containing, exactClassName, style, tag, text) import Test.Runner diff --git a/tests/src/Test/Html/SelectorTests.elm b/tests/src/Test/Html/SelectorTests.elm index 0300bfd9..5a08c47b 100644 --- a/tests/src/Test/Html/SelectorTests.elm +++ b/tests/src/Test/Html/SelectorTests.elm @@ -3,12 +3,12 @@ module Test.Html.SelectorTests exposing (all) {-| Tests for selectors -} -import Fuzz exposing (..) +import Fuzz import Html import Html.Attributes as Attr -import Test exposing (..) +import Test exposing (Test, describe, fuzz3, test) import Test.Html.Query as Query -import Test.Html.Selector exposing (..) +import Test.Html.Selector exposing (attribute, class, text) all : Test @@ -45,7 +45,12 @@ bug13 = textSelectors : Test textSelectors = describe "Selector.text" - [ fuzz3 (list string) string (list string) "Finds one result" <| + [ fuzz3 + (Fuzz.list Fuzz.string) + Fuzz.string + (Fuzz.list Fuzz.string) + "Finds one result" + <| \before str after -> let textNodes = @@ -56,7 +61,12 @@ textSelectors = Html.div [] textNodes |> Query.fromHtml |> Query.has [ text str ] - , fuzz3 (list string) (list string) (list string) "Finds multiple results" <| + , fuzz3 + (Fuzz.list Fuzz.string) + (Fuzz.list Fuzz.string) + (Fuzz.list Fuzz.string) + "Finds multiple results" + <| \before strings after -> let textNodes = diff --git a/tests/src/Tests.elm b/tests/src/Tests.elm index 75500747..0ac84462 100644 --- a/tests/src/Tests.elm +++ b/tests/src/Tests.elm @@ -2,13 +2,12 @@ module Tests exposing (all) import Expect import FloatWithinTests exposing (floatWithinTests) -import Fuzz exposing (..) +import Fuzz import FuzzerTests exposing (fuzzerTests) -import Helpers exposing (..) +import Helpers import RunnerTests import ShrinkingChallengeTests exposing (shrinkingChallenges) -import Test exposing (..) -import Test.Coverage +import Test exposing (Test, describe, fuzz, fuzzWith, test, todo) import Test.Html.EventTests import Test.Html.ExampleAppTests import Test.Html.Query.CustomNodeTests @@ -63,7 +62,7 @@ readmeExample = "ABCDEFG" |> String.reverse |> Expect.equal "GFEDCBA" - , fuzz string "restores the original string if you run it again" <| + , fuzz Fuzz.string "restores the original string if you run it again" <| \randomlyGeneratedString -> randomlyGeneratedString |> String.reverse @@ -84,21 +83,21 @@ expectationTests = \_ -> Ok 12 |> Expect.err - |> expectToFail + |> Helpers.expectToFail ] , describe "Expect.all" [ test "fails with empty list" <| \_ -> "dummy subject" |> Expect.all [] - |> expectToFail + |> Helpers.expectToFail ] , describe "Expect.equal" [ test "fails when equating two floats (see #230)" <| \_ -> 1.41 |> Expect.equal 1.41 - |> expectToFail + |> Helpers.expectToFail , test "succeeds when equating two ints" <| \_ -> 141 |> Expect.equal 141 ] @@ -121,7 +120,7 @@ expectationTests = regressions : Test regressions = describe "regression tests" - [ fuzz (intRange 1 32) "for elm-community/elm-test #39" <| + [ fuzz (Fuzz.intRange 1 32) "for elm-community/elm-test #39" <| \positiveInt -> positiveInt |> Expect.greaterThan 0 @@ -133,10 +132,10 @@ regressions = (Issue numbers refer to elm-community/elm-test.) -} \() -> - fuzz (intRange 1 8) + fuzz (Fuzz.intRange 1 8) "fuzz tests run 100 times" (Expect.notEqual 5) - |> expectTestToFail + |> Helpers.expectTestToFail , test "the String.reverse bug that prevented us from releasing unicode string fuzzers in August 2017 is now fixed" <| -- if characters that span more than one utf-16 character work, this version of the unicode string fuzzer is good to go \() -> "🔥" |> String.reverse |> Expect.equal "🔥" @@ -157,45 +156,45 @@ testTests = [ test "fails with empty list" <| \() -> describe "x" [] - |> expectTestToFail + |> Helpers.expectTestToFail , test "fails with empty description" <| \() -> - describe "" [ test "x" expectPass ] - |> expectTestToFail + describe "" [ test "x" Helpers.expectPass ] + |> Helpers.expectTestToFail ] , describe "test" [ test "fails with empty name" <| \() -> - test "" expectPass - |> expectTestToFail + test "" Helpers.expectPass + |> Helpers.expectTestToFail ] , describe "fuzz" [ test "fails with empty name" <| \() -> - fuzz Fuzz.bool "" expectPass - |> expectTestToFail + fuzz Fuzz.bool "" Helpers.expectPass + |> Helpers.expectTestToFail ] , describe "fuzzWith" [ test "fails with fewer than 1 run" <| \() -> - fuzzWith { runs = 0, coverage = noCoverage } + fuzzWith { runs = 0, coverage = Test.noCoverage } Fuzz.bool "nonpositive" - expectPass - |> expectTestToFail + Helpers.expectPass + |> Helpers.expectTestToFail , test "fails with empty name" <| \() -> - fuzzWith { runs = 1, coverage = noCoverage } + fuzzWith { runs = 1, coverage = Test.noCoverage } Fuzz.bool "" - expectPass - |> expectTestToFail + Helpers.expectPass + |> Helpers.expectTestToFail ] , describe "Test.todo" [ test "causes test failure" <| \() -> todo "a TODO test fails" - |> expectTestToFail + |> Helpers.expectTestToFail , test "Passes are not TODO" (\_ -> Expect.pass |> Test.Runner.isTodo |> Expect.equal False) , test "Simple failures are not TODO" <| @@ -212,47 +211,47 @@ identicalNamesAreRejectedTests = [ test "a describe with two identically named children" <| \() -> describe "x" - [ test "foo" expectPass - , test "foo" expectPass + [ test "foo" Helpers.expectPass + , test "foo" Helpers.expectPass ] - |> expectTestToFail + |> Helpers.expectTestToFail , test "a describe with the same name as a child test" <| \() -> describe "A" - [ test "A" expectPass ] - |> expectTestToFail + [ test "A" Helpers.expectPass ] + |> Helpers.expectTestToFail , test "a describe with the same name as a child describe fails" <| \() -> describe "A" [ describe "A" - [ test "x" expectPass ] + [ test "x" Helpers.expectPass ] ] - |> expectTestToFail + |> Helpers.expectTestToFail , test "a describe with the same name as a sibling describe fails" <| \() -> Test.concat - [ describe "A" [ test "x" expectPass ] - , describe "A" [ test "y" expectPass ] + [ describe "A" [ test "x" Helpers.expectPass ] + , describe "A" [ test "y" Helpers.expectPass ] ] - |> expectTestToFail + |> Helpers.expectTestToFail , test "a describe with the same name as a de facto sibling describe fails" <| \() -> Test.concat [ Test.concat - [ describe "A" [ test "x" expectPass ] + [ describe "A" [ test "x" Helpers.expectPass ] ] - , describe "A" [ test "y" expectPass ] + , describe "A" [ test "y" Helpers.expectPass ] ] - |> expectTestToFail + |> Helpers.expectTestToFail , test "a describe with the same name as a de facto sibling describe fails (2)" <| \() -> Test.concat [ Test.concat - [ describe "A" [ test "x" expectPass ] + [ describe "A" [ test "x" Helpers.expectPass ] ] , Test.concat - [ describe "A" [ test "y" expectPass ] + [ describe "A" [ test "y" Helpers.expectPass ] ] ] - |> expectTestToFail + |> Helpers.expectTestToFail ] From fbe7a1cb3f8c89a2e6f8c74dfdfb8818a12dedf0 Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Tue, 4 Oct 2022 01:24:21 +0200 Subject: [PATCH 2/5] Fix elm.json --- tests/elm.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/elm.json b/tests/elm.json index 172fef81..c8258397 100644 --- a/tests/elm.json +++ b/tests/elm.json @@ -15,7 +15,10 @@ "elm-explorations/webgl": "1.1.2", "jinjor/elm-diff": "1.0.6" }, - "indirect": {} + "indirect": { + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.3" + } }, "test-dependencies": { "direct": {}, From 0cdfa9c21e84d4c8ec3753d56bde169516870a50 Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Tue, 4 Oct 2022 01:24:37 +0200 Subject: [PATCH 3/5] Add package.json changes --- tests/package.json | 9 + tests/yarn.lock | 841 +++++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 841 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1691 insertions(+) create mode 100644 tests/package.json create mode 100644 tests/yarn.lock create mode 100644 yarn.lock diff --git a/tests/package.json b/tests/package.json new file mode 100644 index 00000000..12eef4ce --- /dev/null +++ b/tests/package.json @@ -0,0 +1,9 @@ +{ + "license": "BSD-3-Clause", + "scripts": { + "review": "elm-review src/" + }, + "devDependencies": { + "elm-review": "^2.7.5" + } +} diff --git a/tests/yarn.lock b/tests/yarn.lock new file mode 100644 index 00000000..19d9d4f1 --- /dev/null +++ b/tests/yarn.lock @@ -0,0 +1,841 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.8.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.1.tgz#33e6759935f7a82821b72fb936e66f6b99a36173" + integrity sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ== + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +elm-review@^2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/elm-review/-/elm-review-2.7.5.tgz#733c77e9acd0b623626ebf10a042a7554d256471" + integrity sha512-i9K8G99fiS4MkU2P3Tjk7BfN2PFPRPFBgcugQODrIDAjm1PtGCueFDkzBpaCDDuqkrC3Dy4KEYrnGPlCCdcO8Q== + dependencies: + chalk "^4.0.0" + chokidar "^3.5.2" + cross-spawn "^7.0.3" + elm-tooling "^1.6.0" + fast-levenshtein "^3.0.0" + find-up "^4.1.0" + folder-hash "^3.3.0" + fs-extra "^9.0.0" + glob "^7.1.4" + got "^11.8.5" + minimist "^1.2.0" + ora "^5.4.0" + path-key "^3.1.1" + prompts "^2.2.1" + strip-ansi "^6.0.0" + temp "^0.9.1" + terminal-link "^2.1.1" + which "^2.0.2" + wrap-ansi "^6.2.0" + +elm-tooling@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/elm-tooling/-/elm-tooling-1.8.0.tgz#366870f95c1eb678f89ac8b7608869c7d3e1d86c" + integrity sha512-IjMvW/VHqxLidlJSAocBGDBmqiZ1NS0lK/UCMRU4ULEEaTVjpSd/9Dv0mH2ok0H0egSTYx19GnrdL4Lq9h+z+A== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +folder-hash@^3.3.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/folder-hash/-/folder-hash-3.3.3.tgz#883c8359d54f91b3f02c1a646c00c30e5831365b" + integrity sha512-SDgHBgV+RCjrYs8aUwCb9rTgbTVuSdzvFmLaChsLre1yf+D64khCW++VYciaByZ8Rm0uKF8R/XEpXuTRSGUM1A== + dependencies: + debug "^4.1.1" + graceful-fs "~4.2.0" + minimatch "~3.0.4" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +got@^11.8.5: + version "11.8.5" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@~4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@~3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0, path-key@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prompts@^2.2.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +temp@^0.9.1: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== + dependencies: + mkdirp "^0.5.1" + rimraf "~2.6.2" + +terminal-link@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..19d9d4f1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,841 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.8.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.1.tgz#33e6759935f7a82821b72fb936e66f6b99a36173" + integrity sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ== + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +elm-review@^2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/elm-review/-/elm-review-2.7.5.tgz#733c77e9acd0b623626ebf10a042a7554d256471" + integrity sha512-i9K8G99fiS4MkU2P3Tjk7BfN2PFPRPFBgcugQODrIDAjm1PtGCueFDkzBpaCDDuqkrC3Dy4KEYrnGPlCCdcO8Q== + dependencies: + chalk "^4.0.0" + chokidar "^3.5.2" + cross-spawn "^7.0.3" + elm-tooling "^1.6.0" + fast-levenshtein "^3.0.0" + find-up "^4.1.0" + folder-hash "^3.3.0" + fs-extra "^9.0.0" + glob "^7.1.4" + got "^11.8.5" + minimist "^1.2.0" + ora "^5.4.0" + path-key "^3.1.1" + prompts "^2.2.1" + strip-ansi "^6.0.0" + temp "^0.9.1" + terminal-link "^2.1.1" + which "^2.0.2" + wrap-ansi "^6.2.0" + +elm-tooling@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/elm-tooling/-/elm-tooling-1.8.0.tgz#366870f95c1eb678f89ac8b7608869c7d3e1d86c" + integrity sha512-IjMvW/VHqxLidlJSAocBGDBmqiZ1NS0lK/UCMRU4ULEEaTVjpSd/9Dv0mH2ok0H0egSTYx19GnrdL4Lq9h+z+A== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +folder-hash@^3.3.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/folder-hash/-/folder-hash-3.3.3.tgz#883c8359d54f91b3f02c1a646c00c30e5831365b" + integrity sha512-SDgHBgV+RCjrYs8aUwCb9rTgbTVuSdzvFmLaChsLre1yf+D64khCW++VYciaByZ8Rm0uKF8R/XEpXuTRSGUM1A== + dependencies: + debug "^4.1.1" + graceful-fs "~4.2.0" + minimatch "~3.0.4" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +got@^11.8.5: + version "11.8.5" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@~4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@~3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0, path-key@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prompts@^2.2.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +temp@^0.9.1: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== + dependencies: + mkdirp "^0.5.1" + rimraf "~2.6.2" + +terminal-link@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== From e365a1f54a468809d11baedcf2d0b9998922421b Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Tue, 4 Oct 2022 01:33:34 +0200 Subject: [PATCH 4/5] Revert elm.json changes --- review/elm.json | 6 ++---- review/src/ReviewConfig.elm | 2 -- tests/elm.json | 14 +++++++++----- tests/review/elm.json | 6 ++---- tests/review/src/ReviewConfig.elm | 2 -- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/review/elm.json b/review/elm.json index a68c1cd4..e2bbaacf 100644 --- a/review/elm.json +++ b/review/elm.json @@ -34,9 +34,7 @@ } }, "test-dependencies": { - "direct": { - "elm-explorations/test": "1.2.2" - }, + "direct": {}, "indirect": {} } -} \ No newline at end of file +} diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm index e812503b..bd93d522 100644 --- a/review/src/ReviewConfig.elm +++ b/review/src/ReviewConfig.elm @@ -26,7 +26,6 @@ import NoPrematureLetComputation import NoSimpleLetBody import NoUnused.CustomTypeConstructorArgs import NoUnused.CustomTypeConstructors -import NoUnused.Dependencies import NoUnused.Exports import NoUnused.Modules import NoUnused.Parameters @@ -54,7 +53,6 @@ config = |> Rule.ignoreErrorsForFiles [ "src/Test/Html/Internal/ElmHtml/InternalTypes.elm" ] , NoUnused.CustomTypeConstructorArgs.rule |> Rule.ignoreErrorsForFiles [ "src/Test/Html/Internal/ElmHtml/InternalTypes.elm" ] - , NoUnused.Dependencies.rule , NoUnused.Exports.rule |> Rule.ignoreErrorsForFiles [ "src/Test/Html/Internal/ElmHtml/ToString.elm" diff --git a/tests/elm.json b/tests/elm.json index c8258397..3ed63d50 100644 --- a/tests/elm.json +++ b/tests/elm.json @@ -6,19 +6,23 @@ "elm-version": "0.19.1", "dependencies": { "direct": { + "elm/browser": "1.0.2", + "elm/bytes": "1.0.8", "elm/core": "1.0.5", "elm/html": "1.0.0", "elm/json": "1.1.3", "elm/random": "1.0.0", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2", + "elm-explorations/linear-algebra": "1.0.3", "elm-explorations/markdown": "1.0.0", "elm-explorations/test": "1.2.2", "elm-explorations/webgl": "1.1.2", - "jinjor/elm-diff": "1.0.6" + "jinjor/elm-diff": "1.0.6", + "turboMaCk/queue": "1.0.2" }, - "indirect": { - "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.3" - } + "indirect": {} }, "test-dependencies": { "direct": {}, diff --git a/tests/review/elm.json b/tests/review/elm.json index a68c1cd4..e2bbaacf 100644 --- a/tests/review/elm.json +++ b/tests/review/elm.json @@ -34,9 +34,7 @@ } }, "test-dependencies": { - "direct": { - "elm-explorations/test": "1.2.2" - }, + "direct": {}, "indirect": {} } -} \ No newline at end of file +} diff --git a/tests/review/src/ReviewConfig.elm b/tests/review/src/ReviewConfig.elm index a2838e6f..ee56af7e 100644 --- a/tests/review/src/ReviewConfig.elm +++ b/tests/review/src/ReviewConfig.elm @@ -26,7 +26,6 @@ import NoPrematureLetComputation import NoSimpleLetBody import NoUnused.CustomTypeConstructorArgs import NoUnused.CustomTypeConstructors -import NoUnused.Dependencies import NoUnused.Exports import NoUnused.Modules import NoUnused.Parameters @@ -47,7 +46,6 @@ config = , NoUnused.CustomTypeConstructors.rule [] , NoUnused.CustomTypeConstructorArgs.rule |> Rule.ignoreErrorsForFiles [ "src/Test/Html/EventTests.elm" ] - , NoUnused.Dependencies.rule , NoUnused.Exports.rule |> Rule.ignoreErrorsForFiles [ "src/Runner/Log.elm" ] , NoUnused.Modules.rule From b795470caf35c2f3f4f9388479972982830d463f Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Tue, 4 Oct 2022 01:37:31 +0200 Subject: [PATCH 5/5] Code style --- tests/src/Tests.elm | 69 ++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/tests/src/Tests.elm b/tests/src/Tests.elm index 0ac84462..b0397c6b 100644 --- a/tests/src/Tests.elm +++ b/tests/src/Tests.elm @@ -5,6 +5,11 @@ import FloatWithinTests exposing (floatWithinTests) import Fuzz import FuzzerTests exposing (fuzzerTests) import Helpers + exposing + ( expectPass + , expectTestToFail + , expectToFail + ) import RunnerTests import ShrinkingChallengeTests exposing (shrinkingChallenges) import Test exposing (Test, describe, fuzz, fuzzWith, test, todo) @@ -83,21 +88,21 @@ expectationTests = \_ -> Ok 12 |> Expect.err - |> Helpers.expectToFail + |> expectToFail ] , describe "Expect.all" [ test "fails with empty list" <| \_ -> "dummy subject" |> Expect.all [] - |> Helpers.expectToFail + |> expectToFail ] , describe "Expect.equal" [ test "fails when equating two floats (see #230)" <| \_ -> 1.41 |> Expect.equal 1.41 - |> Helpers.expectToFail + |> expectToFail , test "succeeds when equating two ints" <| \_ -> 141 |> Expect.equal 141 ] @@ -135,7 +140,7 @@ regressions = fuzz (Fuzz.intRange 1 8) "fuzz tests run 100 times" (Expect.notEqual 5) - |> Helpers.expectTestToFail + |> expectTestToFail , test "the String.reverse bug that prevented us from releasing unicode string fuzzers in August 2017 is now fixed" <| -- if characters that span more than one utf-16 character work, this version of the unicode string fuzzer is good to go \() -> "🔥" |> String.reverse |> Expect.equal "🔥" @@ -156,23 +161,23 @@ testTests = [ test "fails with empty list" <| \() -> describe "x" [] - |> Helpers.expectTestToFail + |> expectTestToFail , test "fails with empty description" <| \() -> - describe "" [ test "x" Helpers.expectPass ] - |> Helpers.expectTestToFail + describe "" [ test "x" expectPass ] + |> expectTestToFail ] , describe "test" [ test "fails with empty name" <| \() -> - test "" Helpers.expectPass - |> Helpers.expectTestToFail + test "" expectPass + |> expectTestToFail ] , describe "fuzz" [ test "fails with empty name" <| \() -> - fuzz Fuzz.bool "" Helpers.expectPass - |> Helpers.expectTestToFail + fuzz Fuzz.bool "" expectPass + |> expectTestToFail ] , describe "fuzzWith" [ test "fails with fewer than 1 run" <| @@ -180,21 +185,21 @@ testTests = fuzzWith { runs = 0, coverage = Test.noCoverage } Fuzz.bool "nonpositive" - Helpers.expectPass - |> Helpers.expectTestToFail + expectPass + |> expectTestToFail , test "fails with empty name" <| \() -> fuzzWith { runs = 1, coverage = Test.noCoverage } Fuzz.bool "" - Helpers.expectPass - |> Helpers.expectTestToFail + expectPass + |> expectTestToFail ] , describe "Test.todo" [ test "causes test failure" <| \() -> todo "a TODO test fails" - |> Helpers.expectTestToFail + |> expectTestToFail , test "Passes are not TODO" (\_ -> Expect.pass |> Test.Runner.isTodo |> Expect.equal False) , test "Simple failures are not TODO" <| @@ -211,47 +216,47 @@ identicalNamesAreRejectedTests = [ test "a describe with two identically named children" <| \() -> describe "x" - [ test "foo" Helpers.expectPass - , test "foo" Helpers.expectPass + [ test "foo" expectPass + , test "foo" expectPass ] - |> Helpers.expectTestToFail + |> expectTestToFail , test "a describe with the same name as a child test" <| \() -> describe "A" - [ test "A" Helpers.expectPass ] - |> Helpers.expectTestToFail + [ test "A" expectPass ] + |> expectTestToFail , test "a describe with the same name as a child describe fails" <| \() -> describe "A" [ describe "A" - [ test "x" Helpers.expectPass ] + [ test "x" expectPass ] ] - |> Helpers.expectTestToFail + |> expectTestToFail , test "a describe with the same name as a sibling describe fails" <| \() -> Test.concat - [ describe "A" [ test "x" Helpers.expectPass ] - , describe "A" [ test "y" Helpers.expectPass ] + [ describe "A" [ test "x" expectPass ] + , describe "A" [ test "y" expectPass ] ] - |> Helpers.expectTestToFail + |> expectTestToFail , test "a describe with the same name as a de facto sibling describe fails" <| \() -> Test.concat [ Test.concat - [ describe "A" [ test "x" Helpers.expectPass ] + [ describe "A" [ test "x" expectPass ] ] - , describe "A" [ test "y" Helpers.expectPass ] + , describe "A" [ test "y" expectPass ] ] - |> Helpers.expectTestToFail + |> expectTestToFail , test "a describe with the same name as a de facto sibling describe fails (2)" <| \() -> Test.concat [ Test.concat - [ describe "A" [ test "x" Helpers.expectPass ] + [ describe "A" [ test "x" expectPass ] ] , Test.concat - [ describe "A" [ test "y" Helpers.expectPass ] + [ describe "A" [ test "y" expectPass ] ] ] - |> Helpers.expectTestToFail + |> expectTestToFail ]