diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 668103b8..2267fc96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,17 +1,10 @@ name: "Build" on: pull_request: - branches: ['**'] + branches: ["**"] push: - branches: ['**'] - tags: ['**'] - workflow_dispatch: - inputs: - publishExtension: - description: 'Publish Extension' - required: true - default: false - type: boolean + branches: ["**"] + tags: ["**"] concurrency: group: ci-${{ github.ref }} @@ -27,51 +20,40 @@ jobs: build: name: "Build" runs-on: ubuntu-20.04 - timeout-minutes: 30 + timeout-minutes: 10 steps: - - - uses: actions/checkout@v3.5.3 - - - uses: cachix/install-nix-action@v22 - - - uses: cachix/cachix-action@v12 - with: - name: kubukoz - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - - name: Cache sbt - uses: actions/cache@v3.3.1 - with: - path: | - ~/.sbt - ~/.ivy2/local - ~/.ivy2/cache - ~/.coursier/cache/v1 - ~/.cache/coursier/v1 - ~/AppData/Local/Coursier/Cache/v1 - ~/Library/Caches/Coursier/v1 - key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - - # This step isn't strictly necessary, but separating it means we can inspect its run time more easily. - - name: Setup environment - run: nix develop --command echo Environment ready - - - name: Server tests - run: nix develop --command sbt ci - - - name: VS Code extension tests - run: nix develop --command bash -c 'cd vscode-extension && yarn && SERVER_VERSION=$(cat ../.version) xvfb-run --auto-servernum yarn test' - - - name: Show extension test logs - if: job.status == 'failure' - run: cat vscode-extension/fixture/smithyql-log.txt | tail --lines 1000 - - - name: release - if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - run: nix develop --command sbt ci-release - - - name: release plugin - if: github.event.inputs.publishExtension - run: nix develop --command ./release-plugin.sh - env: - VSCE_PAT: ${{ secrets.VSCE_TOKEN }} + - uses: actions/checkout@v4.1.1 + + - uses: cachix/install-nix-action@v23 + + - uses: cachix/cachix-action@v12 + with: + name: kubukoz + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: Cache sbt + uses: actions/cache@v3.3.2 + with: + path: | + ~/.sbt + ~/.ivy2/local + ~/.ivy2/cache + ~/.coursier/cache/v1 + ~/.cache/coursier/v1 + ~/AppData/Local/Coursier/Cache/v1 + ~/Library/Caches/Coursier/v1 + key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} + + # This step isn't strictly necessary, but separating it means we can inspect its run time more easily. + - name: Setup environment + run: nix develop --command echo Environment ready + + - name: Server tests + run: nix develop --command sbt ci + + - name: VS Code extension tests + run: nix develop --command bash -c 'cd vscode-extension && yarn && SERVER_VERSION=$(cat ../.version) xvfb-run --auto-servernum yarn test' + + - name: Show extension test logs + if: job.status == 'failure' + run: cat vscode-extension/fixture/smithyql-log.txt | tail --lines 1000 diff --git a/.github/workflows/dependency-graph.yml b/.github/workflows/dependency-graph.yml index 6cd06289..aa55dcd1 100644 --- a/.github/workflows/dependency-graph.yml +++ b/.github/workflows/dependency-graph.yml @@ -10,5 +10,5 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v3.5.3 + - uses: actions/checkout@v4.1.1 - uses: scalacenter/sbt-dependency-submission@v2 diff --git a/.github/workflows/plugin.yml b/.github/workflows/plugin.yml new file mode 100644 index 00000000..2cbad709 --- /dev/null +++ b/.github/workflows/plugin.yml @@ -0,0 +1,23 @@ +name: "Release plugin" +on: + workflow_dispatch: + +jobs: + build: + name: "Release plugin" + runs-on: ubuntu-20.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4.1.1 + + - uses: cachix/install-nix-action@v23 + + - uses: cachix/cachix-action@v12 + with: + name: kubukoz + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: release plugin + run: nix develop --command ./release-plugin.sh + env: + VSCE_PAT: ${{ secrets.VSCE_TOKEN }} diff --git a/.scalafmt.conf b/.scalafmt.conf index 92af2b24..2a7079ed 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,5 +1,9 @@ -runner.dialect=scala213source3 -version = 3.7.2 +version = 3.8.3 + +runner.dialect=scala3 +runner.dialectOverride.allowSignificantIndentation = false +runner.dialectOverride.allowQuietSyntax = true + maxColumn = 100 align.preset = some @@ -17,6 +21,10 @@ assumeStandardLibraryStripMargin = true trailingCommas = "multiple" +project { + git = true +} + rewrite.rules = [ RedundantBraces, RedundantParens, @@ -43,3 +51,12 @@ rewrite { sort = ascii } } + +fileOverride { + "glob:**.sbt" { + runner.dialect = sbt1 + } + "glob:**/project/**" { + runner.dialect = scala212 + } +} diff --git a/build.sbt b/build.sbt index daaa7ab2..59df191b 100644 --- a/build.sbt +++ b/build.sbt @@ -14,7 +14,13 @@ inThisBuild( ) ) -import scala.sys.process._ +val ScalaLTS = "3.3.4" +val ScalaNext = "3.5.2" + +ThisBuild / scalaVersion := ScalaNext +ThisBuild / versionScheme := Some("early-semver") + +import scala.sys.process.* def crossPlugin( x: sbt.librarymanagement.ModuleID @@ -27,35 +33,45 @@ val compilerPlugins = Nil else List( - crossPlugin("org.typelevel" % "kind-projector" % "0.13.2") + crossPlugin("org.typelevel" % "kind-projector" % "0.13.3") )) -ThisBuild / versionScheme := Some("early-semver") - -Global / onChangedBuildSource := ReloadOnSourceChanges - -ThisBuild / scalaVersion := "2.13.11" -ThisBuild / crossScalaVersions := Seq("2.13.11") - // For coursier's "latest.integration" ThisBuild / dynverSeparator := "-" val commonSettings = Seq( organization := "com.kubukoz.playground", libraryDependencies ++= Seq( - "org.typelevel" %% "cats-core" % "2.10.0", - "org.typelevel" %% "cats-mtl" % "1.3.1", - "com.disneystreaming" %% "weaver-cats" % "0.8.3" % Test, - "com.disneystreaming" %% "weaver-discipline" % "0.8.3" % Test, - "com.disneystreaming" %% "weaver-scalacheck" % "0.8.3" % Test, + "org.typelevel" %% "cats-core" % "2.12.0", + "org.typelevel" %% "cats-mtl" % "1.5.0", + "com.disneystreaming" %% "weaver-cats" % "0.8.4" % Test, + "com.disneystreaming" %% "weaver-discipline" % "0.8.4" % Test, + "com.disneystreaming" %% "weaver-scalacheck" % "0.8.4" % Test, "com.softwaremill.diffx" %% "diffx-core" % "0.9.0" % Test, "com.softwaremill.diffx" %% "diffx-cats" % "0.9.0" % Test, ), compilerPlugins, scalacOptions -= "-Xfatal-warnings", scalacOptions -= "-Vtype-diffs", - scalacOptions += "-Wnonunit-statement", - scalacOptions ++= Seq("-Xsource:3.0"), + scalacOptions -= "-language:existentials", + // https://github.com/lampepfl/dotty/issues/18674 + Test / scalacOptions -= "-Wunused:implicits", + Test / scalacOptions -= "-Wunused:explicits", + Test / scalacOptions -= "-Wunused:imports", + Test / scalacOptions -= "-Wunused:locals", + Test / scalacOptions -= "-Wunused:params", + Test / scalacOptions -= "-Wunused:privates", + // + scalacOptions += "-no-indent", + scalacOptions ++= { + if (scalaVersion.value.startsWith("3.5")) + Seq( + // for cats-tagless macros + "-experimental" + ) + else + Nil + }, Test / scalacOptions += "-Wconf:cat=deprecation:silent,msg=Specify both message and version:silent", scalacOptions ++= Seq("-release", "11"), mimaFailOnNoPrevious := false, @@ -73,8 +89,9 @@ lazy val pluginCore = module("plugin-core").settings( libraryDependencies ++= Seq( "com.disneystreaming.smithy4s" %% "smithy4s-http4s" % smithy4sVersion.value ), - // mimaPreviousArtifacts := Set(organization.value %% name.value % "0.3.0"), + // mimaPreviousArtifacts := Set(organization.value %% name.value % "0.7.0"), mimaPreviousArtifacts := Set.empty, + scalaVersion := ScalaLTS, ) lazy val pluginSample = module("plugin-sample") @@ -95,10 +112,10 @@ lazy val source = module("source") lazy val parser = module("parser") .settings( libraryDependencies ++= Seq( - "org.typelevel" %% "cats-parse" % "0.3.10", - "io.circe" %% "circe-generic" % "0.14.6" % Test, - "io.circe" %% "circe-parser" % "0.14.6" % Test, - "co.fs2" %% "fs2-io" % "3.9.2" % Test, + "org.typelevel" %% "cats-parse" % "1.0.0", + "io.circe" %% "circe-generic" % "0.14.10" % Test, + "io.circe" %% "circe-parser" % "0.14.10" % Test, + "co.fs2" %% "fs2-io" % "3.11.0" % Test, ) ) .dependsOn( @@ -110,7 +127,7 @@ lazy val parser = module("parser") lazy val formatter = module("formatter") .settings( libraryDependencies ++= Seq( - "org.typelevel" %% "paiges-cats" % "0.4.3" + "org.typelevel" %% "paiges-cats" % "0.4.4" ) ) .dependsOn( @@ -124,15 +141,16 @@ lazy val formatter = module("formatter") lazy val core = module("core") .settings( libraryDependencies ++= Seq( - "org.typelevel" %% "cats-effect" % "3.5.2", - "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.24.1", + "org.typelevel" %% "cats-effect" % "3.5.5", + "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.31.1", "com.disneystreaming.smithy4s" %% "smithy4s-dynamic" % smithy4sVersion.value, "com.disneystreaming.smithy4s" %% "smithy4s-http4s" % smithy4sVersion.value, "com.disneystreaming.smithy4s" %% "smithy4s-aws-http4s" % smithy4sVersion.value, "com.disneystreaming.smithy4s" % "smithy4s-protocol" % smithy4sVersion.value % Test, - "com.disneystreaming.alloy" % "alloy-core" % "0.2.8" % Test, - "software.amazon.smithy" % "smithy-aws-traits" % "1.39.1" % Test, + "com.disneystreaming.alloy" % "alloy-core" % "0.3.14" % Test, + "software.amazon.smithy" % "smithy-aws-traits" % "1.52.1" % Test, ), + // todo: move this to a separate module like "examples" Smithy4sCodegenPlugin.defaultSettings(Test), ) .enablePlugins(Smithy4sCodegenPlugin) @@ -152,12 +170,15 @@ lazy val languageSupport = module("language-support") lazy val lsp = module("lsp") .settings( libraryDependencies ++= Seq( - "org.eclipse.lsp4j" % "org.eclipse.lsp4j" % "0.21.1", - "io.circe" %% "circe-core" % "0.14.6", - "org.http4s" %% "http4s-ember-client" % "0.23.23", - "org.http4s" %% "http4s-ember-server" % "0.23.23" % Test, - "io.get-coursier" %% "coursier" % "2.1.7", - "org.typelevel" %% "cats-tagless-core" % "0.15.0", + "org.eclipse.lsp4j" % "org.eclipse.lsp4j" % "0.23.1", + "io.circe" %% "circe-core" % "0.14.10", + "org.http4s" %% "http4s-ember-client" % "0.23.29", + "org.http4s" %% "http4s-ember-server" % "0.23.29" % Test, + ("io.get-coursier" % "coursier" % "2.1.14") + .cross(CrossVersion.for3Use2_13) + .exclude("org.scala-lang.modules", "scala-collection-compat_2.13") + .exclude("com.github.plokhotnyuk.jsoniter-scala", "jsoniter-scala-core_2.13"), + "org.typelevel" %% "cats-tagless-core" % "0.16.2", ), buildInfoPackage := "playground.lsp.buildinfo", buildInfoKeys ++= Seq(version, scalaBinaryVersion), diff --git a/flake.lock b/flake.lock index a8c3a9a2..1c25de58 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,15 @@ { "nodes": { "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1659877975, - "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -17,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1665856037, - "narHash": "sha256-/RvIWnGKdTSoIq5Xc2HwPIL0TzRslzU6Rqk4Img6UNg=", + "lastModified": 1713905099, + "narHash": "sha256-6+M6qG/7PmDxYeXdutxS6gcS2MQR50ilEaIcNwnAmto=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c95ebc5125ffffcd431df0ad8620f0926b8125b8", + "rev": "0e7e9561350c68125627534b7c0f2d3cd5d32151", "type": "github" }, "original": { @@ -35,6 +38,21 @@ "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c70a0ebb..9afa5030 100644 --- a/flake.nix +++ b/flake.nix @@ -24,7 +24,7 @@ devShell = pkgs.mkShell { buildInputs = [ pkgs.yarn - pkgs.nodejs-14_x + pkgs.nodejs pkgs.sbt pkgs.jless pkgs.gnupg diff --git a/modules/ast/src/main/scala/playground/smithyql/AST.scala b/modules/ast/src/main/scala/playground/smithyql/AST.scala index 3adc2baf..a542a1c7 100644 --- a/modules/ast/src/main/scala/playground/smithyql/AST.scala +++ b/modules/ast/src/main/scala/playground/smithyql/AST.scala @@ -5,9 +5,9 @@ import cats.Functor import cats.Id import cats.Show import cats.data.NonEmptyList -import cats.implicits._ import cats.kernel.Eq import cats.kernel.Order +import cats.syntax.all.* import cats.~> /** The main type for AST nodes of SmithyQL. The type parameter `F[_]` is a type constructor that @@ -166,8 +166,7 @@ object QualifiedIdentifier { implicit val show: Show[QualifiedIdentifier] = Show.fromToString - implicit val ord: Order[QualifiedIdentifier] = Order.by(unapply(_).get) - + implicit val ord: Order[QualifiedIdentifier] = Order.by(Tuple.fromProductTyped) } // the keywords of the clause are captured in the Prelude's useClauses list. @@ -240,7 +239,7 @@ final case class Binding[F[_]]( final case class Identifier( text: String -) extends AnyVal +) object Struct { diff --git a/modules/ast/src/main/scala/playground/smithyql/DSL.scala b/modules/ast/src/main/scala/playground/smithyql/DSL.scala index 25808edc..0c6fa6e5 100644 --- a/modules/ast/src/main/scala/playground/smithyql/DSL.scala +++ b/modules/ast/src/main/scala/playground/smithyql/DSL.scala @@ -1,12 +1,12 @@ package playground.smithyql import cats.Id -import cats.implicits._ +import cats.syntax.all.* object DSL { implicit class StringDSLOps( - val s: String + private val s: String ) extends AnyVal { def call( @@ -16,7 +16,7 @@ object DSL { )* ): Query[Id] = Query[Id]( operationName = QueryOperationName[Id](None, OperationName(s)), - input = struct(args: _*), + input = struct(args*), ) } diff --git a/modules/ast/src/test/scala/playground/Assertions.scala b/modules/ast/src/test/scala/playground/Assertions.scala index 23207841..ea0f7ddd 100644 --- a/modules/ast/src/test/scala/playground/Assertions.scala +++ b/modules/ast/src/test/scala/playground/Assertions.scala @@ -1,10 +1,10 @@ package playground import cats.Id -import cats.implicits._ +import cats.syntax.all.* import com.softwaremill.diffx.Diff import com.softwaremill.diffx.ShowConfig -import playground.smithyql._ +import playground.smithyql.* import weaver.Expectations import weaver.SourceLocation diff --git a/modules/core/src/main/scala/playground/CompilationError.scala b/modules/core/src/main/scala/playground/CompilationError.scala index 3b3b620a..ce14976f 100644 --- a/modules/core/src/main/scala/playground/CompilationError.scala +++ b/modules/core/src/main/scala/playground/CompilationError.scala @@ -3,10 +3,11 @@ package playground import cats.Id import cats.data.IorNel import cats.data.NonEmptyList -import cats.implicits._ import cats.kernel.Eq -import playground.CompilationErrorDetails._ -import playground.smithyql._ +import cats.kernel.Order.catsKernelOrderingForOrder +import cats.syntax.all.* +import playground.CompilationErrorDetails.* +import playground.smithyql.* import playground.smithyql.format.Formatter import smithy.api.TimestampFormat import smithy4s.ShapeId @@ -110,8 +111,8 @@ sealed trait CompilationErrorDetails extends Product with Serializable { s"""Matching enums by value is deprecated and may be removed in the future. Use $enumName instead.""".stripMargin case DuplicateItem => "Duplicate item - some entries will be dropped to fit in a set shape." case AmbiguousService(workspaceServices) => - s"""Couldn't determine service for this operation. Add a use clause, or use an explicit reference to specify the service you want to use. - |Available services:""".stripMargin + workspaceServices + """Couldn't determine service for this operation. Add a use clause, or use an explicit reference to specify the service you want to use. + |Available services:""".stripMargin + workspaceServices .sorted .map(UseClause[Id](_).mapK(WithSource.liftId)) .map(Formatter.useClauseFormatter.format(_, Int.MaxValue)) diff --git a/modules/core/src/main/scala/playground/DynamicServiceProxy.scala b/modules/core/src/main/scala/playground/DynamicServiceProxy.scala index b5e15479..5f7b24fd 100644 --- a/modules/core/src/main/scala/playground/DynamicServiceProxy.scala +++ b/modules/core/src/main/scala/playground/DynamicServiceProxy.scala @@ -1,11 +1,11 @@ package playground import cats.MonadThrow -import cats.implicits._ +import cats.syntax.all.* import smithy4s.Document import smithy4s.Endpoint import smithy4s.Service -import smithy4s.kinds._ +import smithy4s.kinds.* import smithy4s.schema.Schema class DynamicServiceProxy[Alg[_[_, _, _, _, _]], Op[_, _, _, _, _]]( @@ -26,8 +26,6 @@ class DynamicServiceProxy[Alg[_[_, _, _, _, _]], Op[_, _, _, _, _]]( ): FunctorInterpreter[Op, F] = { val grp = serviceStatic.endpoints.groupBy(_.id).fmap(_.head) - type Proxy[I, E, O, SE, EO] = I => F[O] - def makeProxy[A, B]( schemaIn: Schema[A], schemaOut: Schema[B], @@ -39,7 +37,7 @@ class DynamicServiceProxy[Alg[_[_, _, _, _, _]], Op[_, _, _, _, _]]( } val endpointMapping = - new smithy4s.kinds.PolyFunction5[Endpoint[Op, *, *, *, *, *], Proxy] { + new service.FunctorEndpointCompiler[F] { private val trans = serviceStatic.toPolyFunction(interp) private def applyWithStatic[I, E, O, SI, SO, STI, STE, STO, STSI, STSO]( diff --git a/modules/core/src/main/scala/playground/FileCompiler.scala b/modules/core/src/main/scala/playground/FileCompiler.scala index 105b45c9..d800b60b 100644 --- a/modules/core/src/main/scala/playground/FileCompiler.scala +++ b/modules/core/src/main/scala/playground/FileCompiler.scala @@ -1,10 +1,8 @@ package playground import cats.Parallel -import cats.effect.implicits._ -import cats.implicits._ +import cats.syntax.all.* import cats.~> -import playground._ import playground.smithyql.SourceFile import playground.smithyql.WithSource diff --git a/modules/core/src/main/scala/playground/FileRunner.scala b/modules/core/src/main/scala/playground/FileRunner.scala index 35738bb7..991ab6e2 100644 --- a/modules/core/src/main/scala/playground/FileRunner.scala +++ b/modules/core/src/main/scala/playground/FileRunner.scala @@ -1,9 +1,7 @@ package playground import cats.data.NonEmptyList -import cats.effect.implicits._ -import cats.implicits._ -import playground._ +import cats.syntax.all.* import playground.smithyql.SourceFile import playground.smithyql.SourceRange import playground.smithyql.WithSource diff --git a/modules/core/src/main/scala/playground/IorUtils.scala b/modules/core/src/main/scala/playground/IorUtils.scala index 351b379f..3d677dc2 100644 --- a/modules/core/src/main/scala/playground/IorUtils.scala +++ b/modules/core/src/main/scala/playground/IorUtils.scala @@ -4,8 +4,8 @@ import cats.data.Ior import cats.data.Ior.Both import cats.data.Ior.Left import cats.data.Ior.Right -import cats.implicits._ import cats.kernel.Semigroup +import cats.syntax.all.* object IorUtils { diff --git a/modules/core/src/main/scala/playground/MultiServiceResolver.scala b/modules/core/src/main/scala/playground/MultiServiceResolver.scala index f81a664b..15c5fc7c 100644 --- a/modules/core/src/main/scala/playground/MultiServiceResolver.scala +++ b/modules/core/src/main/scala/playground/MultiServiceResolver.scala @@ -1,7 +1,7 @@ package playground import cats.data.EitherNel -import cats.implicits._ +import cats.syntax.all.* import playground.smithyql.OperationName import playground.smithyql.QualifiedIdentifier import playground.smithyql.QueryOperationName diff --git a/modules/core/src/main/scala/playground/NodeEncoderVisitor.scala b/modules/core/src/main/scala/playground/NodeEncoderVisitor.scala index 5039de12..ede62fd3 100644 --- a/modules/core/src/main/scala/playground/NodeEncoderVisitor.scala +++ b/modules/core/src/main/scala/playground/NodeEncoderVisitor.scala @@ -2,7 +2,7 @@ package playground import cats.Contravariant import cats.Id -import cats.implicits._ +import cats.syntax.all.* import playground.smithyql.Binding import playground.smithyql.BooleanLiteral import playground.smithyql.Identifier @@ -27,16 +27,12 @@ import smithy4s.ShapeId import smithy4s.capability.EncoderK import smithy4s.schema.Alt import smithy4s.schema.CollectionTag -import smithy4s.schema.CollectionTag.IndexedSeqTag -import smithy4s.schema.CollectionTag.ListTag -import smithy4s.schema.CollectionTag.SetTag -import smithy4s.schema.CollectionTag.VectorTag import smithy4s.schema.EnumTag import smithy4s.schema.EnumTag._ import smithy4s.schema.EnumValue import smithy4s.schema.Field import smithy4s.schema.Primitive -import smithy4s.schema.Primitive._ +import smithy4s.schema.Primitive.* import smithy4s.schema.Schema import smithy4s.schema.SchemaVisitor @@ -134,11 +130,7 @@ object NodeEncoderVisitor extends SchemaVisitor[NodeEncoder] { self => hints: Hints, tag: CollectionTag[C], member: Schema[A], - ): NodeEncoder[C[A]] = - tag match { - case ListTag => listOf(member) - case IndexedSeqTag | SetTag | VectorTag => listOf(member).contramap(_.toList) - } + ): NodeEncoder[C[A]] = listOf(member).contramap(tag.iterator(_).toList) private def listOf[A]( member: Schema[A] @@ -183,7 +175,7 @@ object NodeEncoderVisitor extends SchemaVisitor[NodeEncoder] { self => def struct[S]( shapeId: ShapeId, hints: Hints, - fieldsRaw: Vector[Field[S, _]], + fieldsRaw: Vector[Field[S, ?]], make: IndexedSeq[Any] => S, ): NodeEncoder[S] = { @@ -206,7 +198,7 @@ object NodeEncoderVisitor extends SchemaVisitor[NodeEncoder] { self => def union[U]( shapeId: ShapeId, hints: Hints, - alternatives: Vector[Alt[U, _]], + alternatives: Vector[Alt[U, ?]], dispatcher: Alt.Dispatcher[U], ): NodeEncoder[U] = dispatcher.compile(new Alt.Precompiler[NodeEncoder] { diff --git a/modules/core/src/main/scala/playground/OperationCompiler.scala b/modules/core/src/main/scala/playground/OperationCompiler.scala index 631d34a8..664f9c6e 100644 --- a/modules/core/src/main/scala/playground/OperationCompiler.scala +++ b/modules/core/src/main/scala/playground/OperationCompiler.scala @@ -5,29 +5,33 @@ import cats.data.Ior import cats.data.IorNel import cats.data.Kleisli import cats.data.NonEmptyList -import cats.implicits._ +import cats.syntax.all.* import cats.~> -import playground._ +import playground.* import playground.smithyql.Prelude import playground.smithyql.QualifiedIdentifier import playground.smithyql.Query import playground.smithyql.WithSource import smithy.api import smithy4s.Endpoint +import smithy4s.Hints import smithy4s.Service import smithy4s.dynamic.DynamicSchemaIndex -import smithyql.syntax._ -import types._ -import util.chaining._ +import smithyql.syntax.* +import types.* +import util.chaining.* trait CompiledInput { type _Op[_, _, _, _, _] + type I type E type O + type SI + type SO def catchError: Throwable => Option[E] def writeError: Option[NodeEncoder[E]] def writeOutput: NodeEncoder[O] - def op: _Op[_, E, O, _, _] + def op: _Op[I, E, O, SI, SO] } object CompiledInput { @@ -149,8 +153,8 @@ private class ServiceCompiler[Alg[_[_, _, _, _, _]]]( service: Service[Alg] ) extends OperationCompiler[IorNel[CompilationError, *]] { - private def compileEndpoint[In, Err, Out]( - e: Endpoint[service.Operation, In, Err, Out, _, _] + private def compileEndpoint[In, Err, Out, SIn, SOut]( + e: Endpoint[service.Operation, In, Err, Out, SIn, SOut] ): QueryCompiler[CompiledInput] = { val inputCompiler = e.input.compile(QueryCompilerVisitor.full) val outputEncoder = NodeEncoder.derive(e.output) @@ -162,10 +166,13 @@ private class ServiceCompiler[Alg[_[_, _, _, _, _]]]( .map { compiled => new CompiledInput { type _Op[_I, _E, _O, _SE, _SO] = service.Operation[_I, _E, _O, _SE, _SO] + type I = In type E = Err type O = Out + type SI = SIn + type SO = SOut - val op: _Op[_, Err, Out, _, _] = e.wrap(compiled) + val op: _Op[I, E, O, SI, SO] = e.wrap(compiled) val writeOutput: NodeEncoder[Out] = outputEncoder val writeError: Option[NodeEncoder[Err]] = errorEncoder val catchError: Throwable => Option[Err] = e.Error.unapply(_).map(_._2) @@ -174,12 +181,12 @@ private class ServiceCompiler[Alg[_[_, _, _, _, _]]]( } // https://github.com/kubukoz/smithy-playground/issues/154 - // map of endpoint names to (endpoint, input compiler) + // map of endpoint names to (endpoint hints, input compiler) private val endpoints = service .endpoints .toList .groupByNel(_.name) - .map(_.map(_.head).map(e => (e, compileEndpoint(e)))) + .map(_.map(_.head).map(e => (e.hints, compileEndpoint(e)))) // Checks the explicit service reference (if any). // Note that the reference should be valid thanks to MultiServiceResolver's checks. @@ -201,10 +208,9 @@ private class ServiceCompiler[Alg[_[_, _, _, _, _]]]( private def deprecatedOperationCheck( q: Query[WithSource], - endpoint: Endpoint[service.Operation, _, _, _, _, _], + endpointHints: Hints, ): IorNel[CompilationError, Unit] = - endpoint - .hints + endpointHints .get(api.Deprecated) .map { info => CompilationError.deprecation( diff --git a/modules/core/src/main/scala/playground/OperationRunner.scala b/modules/core/src/main/scala/playground/OperationRunner.scala index ed018e0c..f7b79102 100644 --- a/modules/core/src/main/scala/playground/OperationRunner.scala +++ b/modules/core/src/main/scala/playground/OperationRunner.scala @@ -13,13 +13,12 @@ import cats.data.NonEmptyList import cats.effect.Async import cats.effect.MonadCancelThrow import cats.effect.Resource -import cats.effect.implicits._ +import cats.effect.implicits.* import cats.effect.std -import cats.implicits._ +import cats.syntax.all.* import fs2.compression.Compression import org.http4s.Uri import org.http4s.client.Client -import playground._ import playground.plugins.PlaygroundPlugin import playground.plugins.SimpleHttpBuilder import playground.smithyql.InputNode @@ -36,9 +35,9 @@ import smithy4s.aws.AwsClient import smithy4s.aws.AwsEnvironment import smithy4s.dynamic.DynamicSchemaIndex import smithy4s.http4s.SimpleRestJsonBuilder -import smithy4s.kinds._ +import smithy4s.kinds.* import smithy4s.schema.Schema -import smithyql.syntax._ +import smithyql.syntax.* trait OperationRunner[F[_]] { @@ -157,7 +156,7 @@ object OperationRunner { def forServices[F[_]: StdlibRuntime: Async: Compression: std.Console]( services: List[DynamicSchemaIndex.ServiceWrapper], - getSchema: ShapeId => Option[Schema[_]], + getSchema: ShapeId => Option[Schema[?]], client: Client[F], baseUri: F[Uri], awsEnv: Resource[F, AwsEnvironment[F]], @@ -204,7 +203,7 @@ object OperationRunner { client: Client[F], baseUri: F[Uri], awsEnv: Resource[F, AwsEnvironment[F]], - schemaIndex: ShapeId => Option[Schema[_]], + schemaIndex: ShapeId => Option[Schema[?]], plugins: List[PlaygroundPlugin], ): Resolver[F] = new Resolver[F] { diff --git a/modules/core/src/main/scala/playground/PlaygroundConfig.scala b/modules/core/src/main/scala/playground/PlaygroundConfig.scala index f37dfb23..28d1037a 100644 --- a/modules/core/src/main/scala/playground/PlaygroundConfig.scala +++ b/modules/core/src/main/scala/playground/PlaygroundConfig.scala @@ -1,12 +1,12 @@ package playground -import cats.implicits._ import cats.kernel.Eq -import com.github.plokhotnyuk.jsoniter_scala.core.JsonValueCodec +import cats.syntax.all.* import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker final case class PlaygroundConfig( imports: List[String], + sources: List[String], dependencies: List[String], repositories: List[String], extensions: List[String], @@ -18,6 +18,7 @@ object PlaygroundConfig { val empty: PlaygroundConfig = PlaygroundConfig( imports = Nil, + sources = Nil, dependencies = Nil, repositories = Nil, extensions = Nil, @@ -29,12 +30,14 @@ object PlaygroundConfig { mavenDependencies: List[String] = Nil, mavenRepositories: List[String] = Nil, imports: List[String] = Nil, + sources: List[String] = Nil, maven: Option[MavenConfig] = None, smithyPlayground: Option[SmithyPlaygroundPluginConfig] = None, ) { def toPlaygroundConfig: PlaygroundConfig = PlaygroundConfig( imports = imports, + sources = sources, dependencies = mavenDependencies ++ maven.foldMap(_.dependencies), repositories = mavenRepositories ++ maven.foldMap(_.repositories).map(_.url), extensions = smithyPlayground.foldMap(_.extensions), @@ -43,7 +46,9 @@ object PlaygroundConfig { } object BuildConfig { - implicit val c: JsonValueCodec[BuildConfig] = JsonCodecMaker.make + // note: this is flagged as an unused import if imported + implicit val c: com.github.plokhotnyuk.jsoniter_scala.core.JsonValueCodec[BuildConfig] = + JsonCodecMaker.make def fromPlaygroundConfig( c: PlaygroundConfig @@ -51,6 +56,7 @@ object PlaygroundConfig { mavenDependencies = c.dependencies, mavenRepositories = c.repositories, imports = c.imports, + sources = c.sources, smithyPlayground = c.extensions.toNel.map { e => SmithyPlaygroundPluginConfig(extensions = e.toList) }, @@ -73,7 +79,7 @@ object PlaygroundConfig { } - import com.github.plokhotnyuk.jsoniter_scala.core._ + import com.github.plokhotnyuk.jsoniter_scala.core.* val decode: Array[Byte] => Either[Throwable, PlaygroundConfig] = bytes => diff --git a/modules/core/src/main/scala/playground/PreludeCompiler.scala b/modules/core/src/main/scala/playground/PreludeCompiler.scala index b98e6e61..6bfbc511 100644 --- a/modules/core/src/main/scala/playground/PreludeCompiler.scala +++ b/modules/core/src/main/scala/playground/PreludeCompiler.scala @@ -3,11 +3,10 @@ package playground import cats.Applicative import cats.Parallel import cats.data.NonEmptyList -import cats.effect.implicits._ -import cats.implicits._ import cats.mtl.Chronicle -import cats.mtl.implicits._ -import playground._ +import cats.mtl.implicits.* +import cats.syntax.all.* +import playground.* import playground.smithyql.Prelude import playground.smithyql.WithSource diff --git a/modules/core/src/main/scala/playground/QueryCompiler.scala b/modules/core/src/main/scala/playground/QueryCompiler.scala index bdbaa400..ec5e2b1f 100644 --- a/modules/core/src/main/scala/playground/QueryCompiler.scala +++ b/modules/core/src/main/scala/playground/QueryCompiler.scala @@ -3,9 +3,9 @@ package playground import cats.Apply import cats.data.IorNec import cats.data.NonEmptyChain -import cats.implicits._ -import playground.CompilationErrorDetails._ -import playground.smithyql._ +import cats.syntax.all.* +import playground.CompilationErrorDetails.* +import playground.smithyql.* import QueryCompiler.WAST diff --git a/modules/core/src/main/scala/playground/QueryCompilerVisitor.scala b/modules/core/src/main/scala/playground/QueryCompilerVisitor.scala index fe35dac1..af8eae81 100644 --- a/modules/core/src/main/scala/playground/QueryCompilerVisitor.scala +++ b/modules/core/src/main/scala/playground/QueryCompilerVisitor.scala @@ -4,10 +4,10 @@ import cats.Id import cats.data.Ior import cats.data.NonEmptyChain import cats.data.NonEmptyList -import cats.implicits._ -import playground.CompilationErrorDetails._ -import playground.smithyql._ -import playground.smithyutil._ +import cats.syntax.all.* +import playground.CompilationErrorDetails.* +import playground.smithyql.* +import playground.smithyutil.* import smithy.api import smithy.api.TimestampFormat import smithy4s.Bijection @@ -20,10 +20,6 @@ import smithy4s.ShapeId import smithy4s.Timestamp import smithy4s.schema.Alt import smithy4s.schema.CollectionTag -import smithy4s.schema.CollectionTag.IndexedSeqTag -import smithy4s.schema.CollectionTag.ListTag -import smithy4s.schema.CollectionTag.SetTag -import smithy4s.schema.CollectionTag.VectorTag import smithy4s.schema.EnumTag import smithy4s.schema.EnumTag.OpenIntEnum import smithy4s.schema.EnumTag.OpenStringEnum @@ -47,8 +43,8 @@ import smithy4s.schema.Primitive.PUUID import smithy4s.schema.Schema import smithy4s.schema.SchemaVisitor import smithy4s.~> -import types._ -import util.chaining._ +import types.* +import util.chaining.* import java.util.Base64 import java.util.UUID @@ -56,7 +52,7 @@ import scala.collection.immutable.ListMap object QueryCompilerVisitor { val full: Schema ~> QueryCompiler = - new TransitiveCompiler(AddDynamicRefinements) andThen QueryCompilerVisitorInternal + Schema.transformTransitivelyK(AddDynamicRefinements) andThen QueryCompilerVisitorInternal } object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { @@ -154,12 +150,9 @@ object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { else listOf(member) - tag match { - case ListTag => base - case SetTag => base.map(_.toSet) - case IndexedSeqTag => base.map(_.toIndexedSeq) - case VectorTag => base.map(_.toVector) - } + base + .map(_.iterator) + .map(tag.fromIterator(_)) } private def uniqueListOf[A]( @@ -228,7 +221,7 @@ object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { private object FieldCompiler { def compile[A]( - field: Field[_, A] + field: Field[?, A] ): FieldCompiler[A] = new FieldCompiler[A] { override val compiler: QueryCompiler[A] = field.schema.compile(QueryCompilerVisitorInternal) @@ -242,7 +235,7 @@ object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { def struct[S]( shapeId: ShapeId, hints: Hints, - fieldsRaw: Vector[Field[S, _]], + fieldsRaw: Vector[Field[S, ?]], make: IndexedSeq[Any] => S, ): QueryCompiler[S] = { val fields = fieldsRaw @@ -327,7 +320,7 @@ object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { def union[U]( shapeId: ShapeId, hints: Hints, - alternatives: Vector[Alt[U, _]], + alternatives: Vector[Alt[U, ?]], dispatcher: Alt.Dispatcher[U], ): QueryCompiler[U] = { def handleAlt[A]( @@ -454,7 +447,7 @@ object QueryCompilerVisitorInternal extends SchemaVisitor[QueryCompiler] { .parTraverse { binding => document.compile(binding.value).tupleLeft(binding.identifier.value.text) } - .map(Document.obj(_: _*)) + .map(Document.obj(_*)) case NullLiteral() => Document.nullDoc.rightIor } diff --git a/modules/core/src/main/scala/playground/ServiceIndex.scala b/modules/core/src/main/scala/playground/ServiceIndex.scala index 7074e0af..f3f54713 100644 --- a/modules/core/src/main/scala/playground/ServiceIndex.scala +++ b/modules/core/src/main/scala/playground/ServiceIndex.scala @@ -1,12 +1,12 @@ package playground import cats.Id -import cats.implicits._ +import cats.syntax.all.* import playground.smithyql.OperationName import playground.smithyql.QualifiedIdentifier import smithy.api import smithy4s.dynamic.DynamicSchemaIndex -import smithyql.syntax._ +import smithyql.syntax.* // Abstraction for service metadata. Can be used by multi-service compilers/runners/completion providers etc. trait ServiceIndex { diff --git a/modules/core/src/main/scala/playground/ServiceNameExtractor.scala b/modules/core/src/main/scala/playground/ServiceNameExtractor.scala index 43418105..3ed3f0c3 100644 --- a/modules/core/src/main/scala/playground/ServiceNameExtractor.scala +++ b/modules/core/src/main/scala/playground/ServiceNameExtractor.scala @@ -3,14 +3,22 @@ package playground import aws.api import playground.smithyql.QualifiedIdentifier import smithy4s.Service -import smithyql.syntax._ +import smithyql.syntax.* object ServiceNameExtractor { def fromService[Alg[_[_, _, _, _, _]]]( service: Service[Alg] ): QualifiedIdentifier = QualifiedIdentifier.fromShapeId( - service.id.copy(name = service.hints.get(api.Service).map(_.sdkId).getOrElse(service.id.name)) + service + .id + .copy(name = + service + .hints + .get(api.Service) + .map(_.sdkId.replaceAll("\\s+", "")) + .getOrElse(service.id.name) + ) ) } diff --git a/modules/core/src/main/scala/playground/smithyql/NodeContext.scala b/modules/core/src/main/scala/playground/smithyql/NodeContext.scala index d77f0274..47441ff0 100644 --- a/modules/core/src/main/scala/playground/smithyql/NodeContext.scala +++ b/modules/core/src/main/scala/playground/smithyql/NodeContext.scala @@ -2,7 +2,7 @@ package playground.smithyql import cats.data.Chain import cats.data.Chain.==: -import cats.implicits._ +import cats.syntax.all.* // The path to a position in the parsed source sealed trait NodeContext extends Product with Serializable with NodeContext.PathEntry.TraversalOps { @@ -10,7 +10,7 @@ sealed trait NodeContext extends Product with Serializable with NodeContext.Path def render: String = this match { case NodeContext.Impl(context) => - import NodeContext.PathEntry._ + import NodeContext.PathEntry.* context .map { diff --git a/modules/core/src/main/scala/playground/smithyql/RangeIndex.scala b/modules/core/src/main/scala/playground/smithyql/RangeIndex.scala index 7c750e77..e651290c 100644 --- a/modules/core/src/main/scala/playground/smithyql/RangeIndex.scala +++ b/modules/core/src/main/scala/playground/smithyql/RangeIndex.scala @@ -1,6 +1,6 @@ package playground.smithyql -import cats.implicits._ +import cats.syntax.all.* trait RangeIndex { @@ -111,15 +111,14 @@ object RangeIndex { .fold( listed = l => entireNode(ctx) :: findInList(l, ctx), struct = s => entireNode(ctx) :: findInStruct(s, ctx.inStructBody), - string = - _ => { - val inQuotes = ContextRange( - node.range.shrink1, - ctx.inQuotes, - ) - - inQuotes :: entireNode(ctx) :: Nil - }, + string = { _ => + val inQuotes = ContextRange( + node.range.shrink1, + ctx.inQuotes, + ) + + inQuotes :: entireNode(ctx) :: Nil + }, int = default, bool = default, nul = default, @@ -150,19 +149,18 @@ object RangeIndex { private def findInStruct( struct: Struct[WithSource], ctx: NodeContext, - ): List[ContextRange] = + ): List[ContextRange] = { // Struct fields that allow nesting in them - { - val inFields = struct - .fields - .value - .value - .flatMap { binding => - findInNode(binding.value, ctx.inStructValue(binding.identifier.value.text)) - } + val inFields = struct + .fields + .value + .value + .flatMap { binding => + findInNode(binding.value, ctx.inStructValue(binding.identifier.value.text)) + } - ContextRange(struct.fields.range, ctx) :: inFields - } + ContextRange(struct.fields.range, ctx) :: inFields + } } diff --git a/modules/core/src/main/scala/playground/smithyql/syntax.scala b/modules/core/src/main/scala/playground/smithyql/syntax.scala index 24782e6f..86681df2 100644 --- a/modules/core/src/main/scala/playground/smithyql/syntax.scala +++ b/modules/core/src/main/scala/playground/smithyql/syntax.scala @@ -1,6 +1,6 @@ package playground.smithyql -import cats.implicits._ +import cats.syntax.all.* import playground.ServiceNameExtractor import smithy4s.Service import smithy4s.ShapeId diff --git a/modules/core/src/main/scala/playground/smithyutil/AddDynamicRefinements.scala b/modules/core/src/main/scala/playground/smithyutil/AddDynamicRefinements.scala index e5817182..6b59b234 100644 --- a/modules/core/src/main/scala/playground/smithyutil/AddDynamicRefinements.scala +++ b/modules/core/src/main/scala/playground/smithyutil/AddDynamicRefinements.scala @@ -1,25 +1,27 @@ package playground.smithyutil -import cats.implicits._ +import cats.syntax.all.* import smithy.api +import smithy.api.Length import smithy4s.Refinement import smithy4s.RefinementProvider import smithy4s.Surjection -import smithy4s.schema.CollectionTag._ -import smithy4s.schema.Primitive._ +import smithy4s.schema.Primitive.* import smithy4s.schema.Schema -import smithy4s.schema.Schema._ +import smithy4s.schema.Schema.* import smithy4s.~> +import RefinementProvider.given + /** Reifies refinement hints into the schema. * * Notably, this does NOT recurse! In order to traverse an entire schema recursively, this has to - * be wrapped in TransitiveCompiler. This is done for separation of concerns. + * be wrapped in transformTransitivelyK. This is done for separation of concerns. */ object AddDynamicRefinements extends (Schema ~> Schema) { private def void[C, A]( - underlying: RefinementProvider[C, A, _] + underlying: RefinementProvider[C, A, ?] ): RefinementProvider.Simple[C, A] = Refinement .drivenBy[C] @@ -32,47 +34,58 @@ object AddDynamicRefinements extends (Schema ~> Schema) { ) { def reifyHint[B]( - implicit rp: RefinementProvider[B, A, _] + using rp: RefinementProvider.Simple[B, A] ): Schema[A] = schema.hints.get(rp.tag).fold(schema)(schema.validated(_)(void(rp))) } private def collection[C[_], A]( schema: Schema.CollectionSchema[C, A] - ): Schema[C[A]] = - schema.tag match { - case ListTag => schema.reifyHint(RefinementProvider.iterableLengthConstraint[List, A]) - case VectorTag => schema.reifyHint(RefinementProvider.iterableLengthConstraint[Vector, A]) - case SetTag => schema.reifyHint(RefinementProvider.iterableLengthConstraint[Set, A]) - case IndexedSeqTag => - schema.reifyHint(RefinementProvider.iterableLengthConstraint[IndexedSeq, A]) - } + ): Schema[C[A]] = schema.reifyHint( + using RefinementProvider.lengthConstraint(schema.tag.iterator(_).size) + ) + + private def enumSchema[A]( + schema: Schema.EnumerationSchema[A] + ): Schema[A] = schema + .reifyHint[Length]( + using RefinementProvider.lengthConstraint(schema.total(_).stringValue.size) + ) + .reifyHint( + using RefinementProvider.rangeConstraint[A, Int](schema.total(_).intValue) + ) + .reifyHint( + using RefinementProvider.patternConstraint(schema.total(_).stringValue) + ) def apply[A]( schema: Schema[A] ): Schema[A] = schema match { - case PrimitiveSchema(_, _, tag) => - tag match { - case PString => schema.reifyHint[api.Length].reifyHint[api.Pattern] - case PByte => schema.reifyHint[api.Range] - case PShort => schema.reifyHint[api.Range] - case PInt => schema.reifyHint[api.Range] - case PLong => schema.reifyHint[api.Range] - case PFloat => schema.reifyHint[api.Range] - case PDouble => schema.reifyHint[api.Range] - case PBigInt => schema.reifyHint[api.Range] - case PBigDecimal => schema.reifyHint[api.Range] + case p: PrimitiveSchema[?] => + p.tag match { + case PString => + schema + .reifyHint[api.Length] + .reifyHint[api.Pattern] + case PByte => (schema: Schema[Byte]).reifyHint[api.Range] + case PShort => (schema: Schema[Short]).reifyHint[api.Range] + case PInt => (schema: Schema[Int]).reifyHint[api.Range] + case PLong => (schema: Schema[Long]).reifyHint[api.Range] + case PFloat => (schema: Schema[Float]).reifyHint[api.Range] + case PDouble => (schema: Schema[Double]).reifyHint[api.Range] + case PBigInt => (schema: Schema[BigInt]).reifyHint[api.Range] + case PBigDecimal => (schema: Schema[BigDecimal]).reifyHint[api.Range] case PBlob => schema.reifyHint[api.Length] case PTimestamp | PDocument | PBoolean | PUUID => schema } - case c: CollectionSchema[_, _] => collection(c) + case c: CollectionSchema[a, f] => collection[a, f](c) case m: MapSchema[_, _] => m.reifyHint[api.Length] - // explicitly handling each remaining case, in order to get a "mising match" warning if the schema model changes + case e: EnumerationSchema[_] => enumSchema(e) + // explicitly handling each remaining case, in order to get a "missing match" warning if the schema model changes case b: BijectionSchema[_, _] => b case r: RefinementSchema[_, _] => r - case e: EnumerationSchema[_] => e case s: StructSchema[_] => s case l: LazySchema[_] => l case u: UnionSchema[_] => u diff --git a/modules/core/src/main/scala/playground/smithyutil/TransitiveCompiler.scala b/modules/core/src/main/scala/playground/smithyutil/TransitiveCompiler.scala deleted file mode 100644 index f61baf0f..00000000 --- a/modules/core/src/main/scala/playground/smithyutil/TransitiveCompiler.scala +++ /dev/null @@ -1,48 +0,0 @@ -package playground.smithyutil - -import smithy4s.schema.Alt -import smithy4s.schema.Field -import smithy4s.schema.Schema -import smithy4s.schema.Schema.BijectionSchema -import smithy4s.schema.Schema.CollectionSchema -import smithy4s.schema.Schema.EnumerationSchema -import smithy4s.schema.Schema.LazySchema -import smithy4s.schema.Schema.MapSchema -import smithy4s.schema.Schema.OptionSchema -import smithy4s.schema.Schema.PrimitiveSchema -import smithy4s.schema.Schema.RefinementSchema -import smithy4s.schema.Schema.StructSchema -import smithy4s.schema.Schema.UnionSchema -import smithy4s.~> - -/** Applies the underlying transformation on each node of the schema. */ -final class TransitiveCompiler( - underlying: Schema ~> Schema -) extends (Schema ~> Schema) { - - def apply[A]( - fa: Schema[A] - ): Schema[A] = - fa match { - case e @ EnumerationSchema(_, _, _, _, _) => underlying(e) - case p @ PrimitiveSchema(_, _, _) => underlying(p) - case u @ UnionSchema(_, _, _, _) => - underlying(u.copy(alternatives = u.alternatives.map(handleAlt(_)))) - case BijectionSchema(s, bijection) => underlying(BijectionSchema(this(s), bijection)) - case LazySchema(suspend) => underlying(LazySchema(suspend.map(this.apply))) - case RefinementSchema(s, refinement) => underlying(RefinementSchema(this(s), refinement)) - case c @ CollectionSchema(_, _, _, _) => underlying(c.copy(member = this(c.member))) - case m @ MapSchema(_, _, _, _) => underlying(m.copy(key = this(m.key), value = this(m.value))) - case s @ StructSchema(_, _, _, _) => underlying(s.copy(fields = s.fields.map(handleField(_)))) - case n @ OptionSchema(_) => underlying(n.copy(underlying = this(n.underlying))) - } - - private def handleField[S, A]( - field: Field[S, A] - ): Field[S, A] = field.copy(schema = this(field.schema)) - - private def handleAlt[S, A]( - alt: Alt[S, A] - ): Alt[S, A] = alt.copy(schema = this(alt.schema)) - -} diff --git a/modules/core/src/main/scala/playground/std/StdlibRuntime.scala b/modules/core/src/main/scala/playground/std/StdlibRuntime.scala index c59b2470..e01f11a2 100644 --- a/modules/core/src/main/scala/playground/std/StdlibRuntime.scala +++ b/modules/core/src/main/scala/playground/std/StdlibRuntime.scala @@ -2,7 +2,7 @@ package playground.std import cats.Functor import cats.effect.std.UUIDGen -import cats.implicits._ +import cats.syntax.all.* import smithy4s.Timestamp trait StdlibRuntime[F[_]] { @@ -21,8 +21,14 @@ object StdlibRuntime { val random: Random[F] = new playground.std.Random[F] { + def nextUUID( - ): F[NextUUIDOutput] = UUIDGen[F].randomUUID.map(_.toString).map(NextUUIDOutput(_)) + ): F[NextUUIDOutput] = UUIDGen[F] + .randomUUID + .map(_.toString()) + .map(UUID(_)) + .map(NextUUIDOutput(_)) + } val clock: Clock[F] = diff --git a/modules/core/src/main/smithy/std.smithy b/modules/core/src/main/smithy/std.smithy index fdcc425c..59a721de 100644 --- a/modules/core/src/main/smithy/std.smithy +++ b/modules/core/src/main/smithy/std.smithy @@ -11,7 +11,9 @@ string UUID @stdlib @documentation("A standard library service providing random generators of data.") service Random { - operations: [NextUUID] + operations: [ + NextUUID + ] } @documentation("Generates a new UUID.") @@ -25,7 +27,9 @@ operation NextUUID { @stdlib @documentation("A standard library service providing time operations.") service Clock { - operations: [CurrentTimestamp] + operations: [ + CurrentTimestamp + ] } @documentation("Provides the current time as a Timestamp.") diff --git a/modules/core/src/test/scala/playground/Diffs.scala b/modules/core/src/test/scala/playground/Diffs.scala index da60e236..361795f7 100644 --- a/modules/core/src/test/scala/playground/Diffs.scala +++ b/modules/core/src/test/scala/playground/Diffs.scala @@ -2,32 +2,41 @@ package playground import cats.data.Ior import playground.smithyql.ContextRange +import playground.smithyql.Diffs.given import playground.smithyql.NodeContext +import smithy.api.TimestampFormat import smithy4s.Blob +import smithy4s.ShapeId import scala.annotation.nowarn object Diffs { - import com.softwaremill.diffx._ - import com.softwaremill.diffx.cats._ - import com.softwaremill.diffx.generic.auto._ + import com.softwaremill.diffx.* + import com.softwaremill.diffx.cats.* - implicit val diffNodeContext: Diff[NodeContext] = Diff.derivedDiff - implicit val diffContextRange: Diff[ContextRange] = Diff.derivedDiff - implicit val diffDiagnosticDetails: Diff[CompilationErrorDetails] = Diff.derivedDiff - implicit val diffDiagnostic: Diff[CompilationError] = Diff.derivedDiff + given Diff[ShapeId] = Diff.derived - implicit val diffUnit: Diff[Unit] = + given Diff[NodeContext.PathEntry] = Diff.derived + given Diff[NodeContext] = Diff[List[NodeContext.PathEntry]].contramap(_.toList) + given Diff[ContextRange] = Diff.derived + given Diff[TimestampFormat] = Diff.derived + given Diff[DiagnosticTag] = Diff.derived + given Diff[DiagnosticSeverity] = Diff.derived + given Diff[DeprecatedInfo] = Diff.derived + given Diff[CompilationErrorDetails] = Diff.derived + given Diff[CompilationError] = Diff.derived + + given Diff[Unit] = ( _, _, _, ) => IdenticalValue("unit") - @nowarn("cat=unused") - implicit def diffForIor[E: Diff, A: Diff]: Diff[Ior[E, A]] = Diff.derivedDiff + @nowarn("msg=unused") + given [E: Diff, A: Diff]: Diff[Ior[E, A]] = Diff.derived - implicit val diffByteArray: Diff[Blob] = Diff[String].contramap(_.toString()) - implicit val diffDocument: Diff[smithy4s.Document] = Diff.derivedDiff - implicit val diffTimestamp: Diff[smithy4s.Timestamp] = Diff[String].contramap(_.toString()) + given Diff[Blob] = Diff[String].contramap(_.toUTF8String) + given Diff[smithy4s.Document] = Diff.derived + given Diff[smithy4s.Timestamp] = Diff[String].contramap(_.toString()) } diff --git a/modules/core/src/test/scala/playground/IorUtilsTests.scala b/modules/core/src/test/scala/playground/IorUtilsTests.scala index 1d1cb067..37e28cc9 100644 --- a/modules/core/src/test/scala/playground/IorUtilsTests.scala +++ b/modules/core/src/test/scala/playground/IorUtilsTests.scala @@ -1,8 +1,8 @@ package playground import cats.data.Ior -import cats.implicits._ -import weaver._ +import cats.syntax.all.* +import weaver.* object IorUtilsTests extends FunSuite { diff --git a/modules/core/src/test/scala/playground/MultiServiceResolverTests.scala b/modules/core/src/test/scala/playground/MultiServiceResolverTests.scala index 016ae2ab..84fc8997 100644 --- a/modules/core/src/test/scala/playground/MultiServiceResolverTests.scala +++ b/modules/core/src/test/scala/playground/MultiServiceResolverTests.scala @@ -1,20 +1,20 @@ package playground import cats.Id -import cats.implicits._ -import com.softwaremill.diffx.cats._ -import playground.Diffs._ -import playground.smithyql.Diffs._ +import cats.syntax.all.* +import com.softwaremill.diffx.cats.* +import playground.Diffs.given +import playground.smithyql.Diffs.given import playground.smithyql.OperationName import playground.smithyql.Prelude import playground.smithyql.QualifiedIdentifier import playground.smithyql.QueryOperationName import playground.smithyql.SourceRange -import playground.smithyql.StringRangeUtils._ +import playground.smithyql.StringRangeUtils.* import playground.smithyql.parser.SourceParser -import weaver._ +import weaver.* -import Assertions._ +import Assertions.* import ServiceIndex.ServiceMetadata object MultiServiceResolverTests extends FunSuite { diff --git a/modules/core/src/test/scala/playground/NodeEncoderTests.scala b/modules/core/src/test/scala/playground/NodeEncoderTests.scala index aa14e71f..960049ac 100644 --- a/modules/core/src/test/scala/playground/NodeEncoderTests.scala +++ b/modules/core/src/test/scala/playground/NodeEncoderTests.scala @@ -8,7 +8,7 @@ import demo.smithy.Power import demo.smithy.SampleSparseList import playground.NodeEncoder import playground.smithyql.AST -import playground.smithyql.DSL._ +import playground.smithyql.DSL.* import playground.smithyql.Listed import playground.smithyql.NullLiteral import playground.smithyql.StringLiteral @@ -17,7 +17,7 @@ import smithy4s.Blob import smithy4s.Document import smithy4s.Timestamp import smithy4s.schema.Schema -import weaver._ +import weaver.* object NodeEncoderTests extends FunSuite { diff --git a/modules/core/src/test/scala/playground/PreludeCompilerTests.scala b/modules/core/src/test/scala/playground/PreludeCompilerTests.scala index 4b0a7896..1acfc46d 100644 --- a/modules/core/src/test/scala/playground/PreludeCompilerTests.scala +++ b/modules/core/src/test/scala/playground/PreludeCompilerTests.scala @@ -4,17 +4,17 @@ import cats.Id import cats.data.Ior import cats.data.IorNel import cats.data.NonEmptyList -import cats.implicits._ -import com.softwaremill.diffx.cats._ +import cats.syntax.all.* +import com.softwaremill.diffx.cats.* import playground.smithyql.OperationName import playground.smithyql.Prelude import playground.smithyql.QualifiedIdentifier -import playground.smithyql.StringRangeUtils._ +import playground.smithyql.StringRangeUtils.* import playground.smithyql.parser.SourceParser -import weaver._ +import weaver.* -import Assertions._ -import Diffs._ +import Assertions.* +import Diffs.given object PreludeCompilerTests extends FunSuite { diff --git a/modules/core/src/test/scala/playground/ServiceNameExtractorTests.scala b/modules/core/src/test/scala/playground/ServiceNameExtractorTests.scala index a34db28e..4749d192 100644 --- a/modules/core/src/test/scala/playground/ServiceNameExtractorTests.scala +++ b/modules/core/src/test/scala/playground/ServiceNameExtractorTests.scala @@ -1,11 +1,12 @@ package playground import cats.data.NonEmptyList +import demo.fake_aws.MyGoodThing import demo.fake_aws.MyThing import demo.smithy.DemoServiceGen import playground.smithyql.QualifiedIdentifier import smithy4s.ShapeId -import weaver._ +import weaver.* object ServiceNameExtractorTests extends FunSuite { test("extract name of service with an AWS hint") { @@ -15,6 +16,13 @@ object ServiceNameExtractorTests extends FunSuite { ) } + test("extract name of service with an AWS hint and whitespace") { + assert.eql( + ServiceNameExtractor.fromService(MyGoodThing.service), + QualifiedIdentifier(NonEmptyList.of("demo", "fake_aws"), "MyGoodThing"), + ) + } + test("aws hint dynamic") { val dsi = DynamicModel.discover() diff --git a/modules/core/src/test/scala/playground/smithyql/AtPositionTests.scala b/modules/core/src/test/scala/playground/smithyql/AtPositionTests.scala index ef34be43..1c335c7d 100644 --- a/modules/core/src/test/scala/playground/smithyql/AtPositionTests.scala +++ b/modules/core/src/test/scala/playground/smithyql/AtPositionTests.scala @@ -1,9 +1,9 @@ package playground.smithyql -import playground.Assertions._ -import playground.Diffs._ +import playground.Assertions.* +import playground.Diffs.given import playground.smithyql.parser.SourceParser -import weaver._ +import weaver.* object AtPositionTests extends FunSuite { diff --git a/modules/core/src/test/scala/playground/smithyql/CompilationTests.scala b/modules/core/src/test/scala/playground/smithyql/CompilationTests.scala index 3a1d880a..df270c1b 100644 --- a/modules/core/src/test/scala/playground/smithyql/CompilationTests.scala +++ b/modules/core/src/test/scala/playground/smithyql/CompilationTests.scala @@ -6,11 +6,12 @@ import cats.data.Chain import cats.data.Ior import cats.data.NonEmptyChain import cats.data.NonEmptyList -import cats.implicits._ +import cats.syntax.all.* import com.softwaremill.diffx.Diff -import com.softwaremill.diffx.cats._ +import com.softwaremill.diffx.cats.* import demo.smithy.Bad import demo.smithy.DeprecatedServiceGen +import demo.smithy.EnumStruct import demo.smithy.FriendSet import demo.smithy.Good import demo.smithy.HasConstraintFields @@ -26,7 +27,7 @@ import demo.smithy.Power import demo.smithy.SampleSparseList import demo.smithy.StringWithLength import org.scalacheck.Arbitrary -import playground.Assertions._ +import playground.Assertions.* import playground.CompilationError import playground.CompilationErrorDetails import playground.CompilationFailed @@ -34,16 +35,16 @@ import playground.CompiledInput import playground.DeprecatedInfo import playground.DiagnosticSeverity import playground.DiagnosticTag -import playground.Diffs._ +import playground.Diffs.given import playground.DynamicModel import playground.OperationCompiler import playground.PreludeCompiler import playground.QueryCompiler import playground.QueryCompilerVisitor import playground.ServiceIndex -import playground.ServiceUtils._ +import playground.ServiceUtils.* import playground.smithyql.parser.SourceParser -import playground.smithyql.syntax._ +import playground.smithyql.syntax.* import playground.std.ClockGen import playground.std.RandomGen import playground.types.IorThrow @@ -57,18 +58,18 @@ import smithy4s.ShapeTag import smithy4s.Timestamp import smithy4s.dynamic.DynamicSchemaIndex import smithy4s.schema.Schema -import weaver._ +import weaver.* import weaver.scalacheck.Checkers import java.time import java.util.UUID -import Arbitraries._ -import StringRangeUtils._ +import Arbitraries.* +import StringRangeUtils.* object CompilationTests extends SimpleIOSuite with Checkers { - import DSL._ + import DSL.* private def compile[A: smithy4s.Schema]( in: QueryCompiler.WAST @@ -153,7 +154,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(struct().mapK(WithSource.liftId)) - }(Schema.unit).isRight + }( + using Schema.unit + ).isRight ) } @@ -161,7 +164,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId("test".mapK(WithSource.liftId)) - }(Schema.unit).isLeft + }( + using Schema.unit + ).isLeft ) } @@ -169,7 +174,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(struct("test" -> 42).mapK(WithSource.liftId)) - }(Schema.unit).isBoth + }( + using Schema.unit + ).isBoth ) } @@ -177,7 +184,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId("foo".mapK(WithSource.liftId)) - }(Schema.string) == Ior.right("foo") + }( + using Schema.string + ) == Ior.right("foo") ) } @@ -194,7 +203,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { val result = compile { WithSource.liftId("".mapK(WithSource.liftId)) - }(dynamicStringSchema) + }( + using dynamicStringSchema + ) .leftMap(_.map(_.err.asInstanceOf[CompilationErrorDetails.RefinementFailure])) assert( @@ -207,7 +218,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { val result = compile { WithSource.liftId(struct("minLength" -> "").mapK(WithSource.liftId)) - }(dynamicStringSchema) + }( + using dynamicStringSchema + ) .leftMap(_.map(_.err.asInstanceOf[CompilationErrorDetails.RefinementFailure])) assert( @@ -219,7 +232,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(42.mapK(WithSource.liftId)) - }(Schema.string) == Ior.left( + }( + using Schema.string + ) == Ior.left( NonEmptyChain.of( CompilationError.error( CompilationErrorDetails.TypeMismatch( @@ -237,7 +252,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(Long.MaxValue.mapK(WithSource.liftId)) - }(Schema.long), + }( + using Schema.long + ), Ior.right(Long.MaxValue), ) } @@ -246,7 +263,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId((BigInt(Long.MaxValue) + 1).mapK(WithSource.liftId)) - }(Schema.long).isLeft + }( + using Schema.long + ).isLeft ) } @@ -254,7 +273,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(42.mapK(WithSource.liftId)) - }(Schema.int), + }( + using Schema.int + ), Ior.right(42), ) } @@ -263,7 +284,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId((Int.MaxValue.toLong + 1L).mapK(WithSource.liftId)) - }(Schema.int).isLeft + }( + using Schema.int + ).isLeft ) } @@ -271,7 +294,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("1e2").mapK(WithSource.liftId)) - }(Schema.int), + }( + using Schema.int + ), Ior.right(100), ) } @@ -280,7 +305,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(IntLiteral("10.1e0").mapK(WithSource.liftId)) - }(Schema.int).isLeft + }( + using Schema.int + ).isLeft ) } @@ -288,7 +315,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(42.mapK(WithSource.liftId)) - }(Schema.short), + }( + using Schema.short + ), Ior.right(42.toShort), ) } @@ -297,7 +326,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId((Short.MaxValue + 1).mapK(WithSource.liftId)) - }(Schema.short).isLeft + }( + using Schema.short + ).isLeft ) } @@ -305,7 +336,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("1e2").mapK(WithSource.liftId)) - }(Schema.short), + }( + using Schema.short + ), Ior.right(100.toShort), ) } @@ -314,7 +347,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(Byte.MaxValue.mapK(WithSource.liftId)) - }(Schema.byte), + }( + using Schema.byte + ), Ior.right(127.toByte), ) } @@ -323,7 +358,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId((Byte.MaxValue + 1).mapK(WithSource.liftId)) - }(Schema.byte).isLeft + }( + using Schema.byte + ).isLeft ) } @@ -331,7 +368,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("1e2").mapK(WithSource.liftId)) - }(Schema.byte), + }( + using Schema.byte + ), Ior.right(100.toByte), ) } @@ -340,7 +379,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert.same( compile { WithSource.liftId(Float.MaxValue.mapK(WithSource.liftId)) - }(Schema.float), + }( + using Schema.float + ), Ior.right(Float.MaxValue), ) } @@ -349,7 +390,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(Double.MaxValue.toString.mapK(WithSource.liftId)) - }(Schema.float).isLeft + }( + using Schema.float + ).isLeft ) } @@ -357,7 +400,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("0.1e0").mapK(WithSource.liftId)) - }(Schema.float), + }( + using Schema.float + ), Ior.right(0.1f), ) } @@ -366,7 +411,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(Double.MaxValue.mapK(WithSource.liftId)) - }(Schema.double), + }( + using Schema.double + ), Ior.right(Double.MaxValue), ) } @@ -375,7 +422,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId((BigDecimal(Double.MaxValue) + 1).mapK(WithSource.liftId)) - }(Schema.double), + }( + using Schema.double + ), Ior.right(Double.MaxValue), ) } @@ -384,7 +433,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("0.1e0").mapK(WithSource.liftId)) - }(Schema.double), + }( + using Schema.double + ), Ior.right(0.1), ) } @@ -394,7 +445,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(bi.mapK(WithSource.liftId)) - }(Schema.bigint), + }( + using Schema.bigint + ), Ior.right(bi), ) } @@ -404,7 +457,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId("40.50".mapK(WithSource.liftId)) - }(Schema.bigint).isLeft + }( + using Schema.bigint + ).isLeft ) } @@ -412,7 +467,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("1e2").mapK(WithSource.liftId)) - }(Schema.bigint), + }( + using Schema.bigint + ), Ior.right(BigInt(100)), ) } @@ -422,7 +479,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(bd.mapK(WithSource.liftId)) - }(Schema.bigdecimal), + }( + using Schema.bigdecimal + ), Ior.right(bd), ) } @@ -432,7 +491,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId("AAAA".mapK(WithSource.liftId)) - }(Schema.bigdecimal).isLeft + }( + using Schema.bigdecimal + ).isLeft ) } @@ -440,7 +501,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(IntLiteral("1e2").mapK(WithSource.liftId)) - }(Schema.bigdecimal), + }( + using Schema.bigdecimal + ), Ior.right(BigDecimal(100)), ) } @@ -449,7 +512,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(true.mapK(WithSource.liftId)) - }(Schema.boolean), + }( + using Schema.boolean + ), Ior.right(true), ) } @@ -458,7 +523,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId(NullLiteral[WithSource]()) - }(Schema.document), + }( + using Schema.document + ), Ior.right(Document.nullDoc), ) } @@ -467,7 +534,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId(NullLiteral[WithSource]()) - }(Schema.string).isLeft + }( + using Schema.string + ).isLeft ) } @@ -475,7 +544,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assertNoDiff( compile { WithSource.liftId("dGVzdA==".mapK(WithSource.liftId)) - }(Schema.bytes), + }( + using Schema.bytes + ), Ior.right(Blob("test".getBytes())), ) } @@ -484,7 +555,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert( compile { WithSource.liftId("XYI519274n91lasdf/a'\'...,,".mapK(WithSource.liftId)) - }(Schema.bytes).isLeft + }( + using Schema.bytes + ).isLeft ) } @@ -541,7 +614,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { pureTest("dynamic struct with default field") { val result = compile(WithSource.liftId(struct().mapK(WithSource.liftId)))( - dynamicSchemaFor[HasDefault] + using dynamicSchemaFor[HasDefault] ) // Object is empty here, but the server shall deserialize it providing the default @@ -597,7 +670,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { WithSource.liftId { struct("name" -> "foo").mapK(WithSource.liftId) } - }(dynamicSchemaFor[HasMixin]).void + }( + using dynamicSchemaFor[HasMixin] + ).void val expected = Ior.left( NonEmptyChain.of( @@ -673,7 +748,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { pureTest("timestamp - OK") { val result = compile(WithSource.liftId("2022-07-11T17:42:28.000Z".mapK(WithSource.liftId)))( - Schema.timestamp + using Schema.timestamp ) val expected = Timestamp.parse("2022-07-11T17:42:28.000Z", TimestampFormat.DATE_TIME).get @@ -686,7 +761,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { pureTest("timestamp - ignores format") { val result = compile(WithSource.liftId("2022-07-11T17:42:28.000Z".mapK(WithSource.liftId)))( - Schema.timestamp.addHints(TimestampFormat.EPOCH_SECONDS: TimestampFormat) + using Schema.timestamp.addHints(TimestampFormat.EPOCH_SECONDS: TimestampFormat) ) val expected = Timestamp.parse("2022-07-11T17:42:28.000Z", TimestampFormat.DATE_TIME).get @@ -699,7 +774,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { pureTest("timestamp - fails when the format is invalid") { val result = compile(WithSource.liftId("not-a-timestamp".mapK(WithSource.liftId)))( - Schema.timestamp + using Schema.timestamp ).leftMap(_.map(_.err)) assertNoDiff( @@ -715,7 +790,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { compile( WithSource.liftId("9c8f8f8f-8f8f-8f8f-8f8f-8f8f8f8f8f8f".mapK(WithSource.liftId)) )( - Schema.uuid + using Schema.uuid ) assertNoDiff( @@ -732,6 +807,69 @@ object CompilationTests extends SimpleIOSuite with Checkers { ) } + pureTest("enum - length validation (dynamic, OK)") { + assert.same( + Ior.right(Document.obj("enumWithLength" -> Document.fromString("AB"))), + compile( + WithSource.liftId(struct("enumWithLength" -> "AB").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ), + ) + } + + pureTest("enum - length validation (dynamic, fail)") { + assert( + compile( + WithSource.liftId(struct("enumWithLength" -> "ABC").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ).isLeft + ) + } + + pureTest("enum - range validation (dynamic, OK)") { + assert.same( + Ior.right(Document.obj("intEnumWithRange" -> Document.fromInt(2))), + compile( + WithSource.liftId(struct("intEnumWithRange" -> "QUEEN").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ), + ) + } + + pureTest("enum - range validation (dynamic, fail)") { + assert( + compile( + WithSource.liftId(struct("intEnumWithRange" -> "KING").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ).isLeft + ) + } + + pureTest("enum - pattern validation (dynamic, OK)") { + assert.same( + Ior.right(Document.obj("enumWithPattern" -> Document.fromString("AB"))), + compile( + WithSource.liftId(struct("enumWithPattern" -> "AB").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ), + ) + } + + pureTest("enum - pattern validation (dynamic, fail)") { + assert( + compile( + WithSource.liftId(struct("enumWithPattern" -> "ABC").mapK(WithSource.liftId)) + )( + using dynamicSchemaFor[EnumStruct] + ).isLeft + ) + } + pureTest("enum - fallback to string value") { implicit val diffPower: Diff[Power] = Diff.derived @@ -765,7 +903,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { CompilationError.error( CompilationErrorDetails.UnknownEnumValue( "POISON", - List("FIRE", "LIGHTNING", "WIND", "ICE"), + List("ICE", "FIRE", "LIGHTNING", "WIND"), ), SourceRange(Position(0), Position(0)), ) @@ -799,7 +937,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { assert.same( compile( WithSource.liftId(List[InputNode[Id]](1, NullLiteral(), 3).mapK(WithSource.liftId)) - )(dynamicSchemaFor[SampleSparseList]).leftMap(_.map(_.err)), + )( + using dynamicSchemaFor[SampleSparseList] + ).leftMap(_.map(_.err)), Ior.right( Document.array( List( @@ -879,7 +1019,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { ) ) ) - )(dynamicSchemaFor[IntSet]) + )( + using dynamicSchemaFor[IntSet] + ) assert( actual == Ior.both( @@ -930,7 +1072,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { item, ).mapK(WithSource.liftId) ) - )(dynamicSchemaFor[FriendSet]) + )( + using dynamicSchemaFor[FriendSet] + ) .leftMap(_.map(_.err)) assertNoDiff( @@ -952,7 +1096,7 @@ object CompilationTests extends SimpleIOSuite with Checkers { ).mapK(WithSource.liftId) ) )( - Schema.set(dynamicSchemaFor[Person]) + using Schema.set(dynamicSchemaFor[Person]) ) val expected = Set( @@ -995,7 +1139,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { test("anything to document matches") { forall((wast: QueryCompiler.WAST) => assert( - compile[Document](wast)(Schema.document).isRight + compile[Document](wast)( + using Schema.document + ).isRight ) ) } @@ -1009,7 +1155,9 @@ object CompilationTests extends SimpleIOSuite with Checkers { struct("name" -> "aaa"), ).mapK(WithSource.liftId) ) - )(Schema.document), + )( + using Schema.document + ), Ior.right( Document.array( Document.obj( diff --git a/modules/core/src/test/smithy/demo.smithy b/modules/core/src/test/smithy/demo.smithy index 8eefde07..5dc63131 100644 --- a/modules/core/src/test/smithy/demo.smithy +++ b/modules/core/src/test/smithy/demo.smithy @@ -230,6 +230,31 @@ string MyString @length(min: 1) string StringWithLength +structure EnumStruct { + @length(max: 2) + enumWithLength: EnumABC + + @pattern("^.{0,2}$") + enumWithPattern: EnumABC + + @range(max: 2) + intEnumWithRange: FaceCard +} + +enum EnumABC { + A, + AB, + ABC +} + +intEnum FaceCard { + JACK = 1 + QUEEN = 2 + KING = 3 + ACE = 4 + JOKER = 5 +} + structure HasConstraintFields { @required minLength: StringWithLength diff --git a/modules/core/src/test/smithy/fake_aws.smithy b/modules/core/src/test/smithy/fake_aws.smithy index 3f13f908..87994591 100644 --- a/modules/core/src/test/smithy/fake_aws.smithy +++ b/modules/core/src/test/smithy/fake_aws.smithy @@ -10,3 +10,8 @@ service MyAwsService { operation MyAwsOp { } + +@aws.api#service(sdkId: "My Good Thing", endpointPrefix: "mygoodthing") +service MyAwsService2 { + operations: [MyAwsOp] +} diff --git a/modules/e2e/src/test/scala/playground/e2e/E2ETests.scala b/modules/e2e/src/test/scala/playground/e2e/E2ETests.scala index 7ca8f8c7..e4440b0a 100644 --- a/modules/e2e/src/test/scala/playground/e2e/E2ETests.scala +++ b/modules/e2e/src/test/scala/playground/e2e/E2ETests.scala @@ -3,8 +3,8 @@ package playground.e2e import buildinfo.BuildInfo import cats.effect.IO import cats.effect.kernel.Resource -import cats.effect.unsafe.implicits._ -import cats.implicits._ +import cats.effect.unsafe.implicits.* +import cats.syntax.all.* import fs2.io.file import org.eclipse.lsp4j.InitializeParams import org.eclipse.lsp4j.InitializeResult @@ -16,14 +16,15 @@ import org.eclipse.lsp4j.WorkspaceFolder import org.eclipse.lsp4j.launch.LSPLauncher import org.eclipse.lsp4j.services.LanguageServer import playground.lsp.PlaygroundLanguageClient -import weaver._ +import weaver.* import java.io.PrintWriter import java.lang.ProcessBuilder.Redirect import java.util.concurrent.CompletableFuture -import scala.concurrent.duration._ -import scala.jdk.CollectionConverters._ -import scala.util.chaining._ +import scala.annotation.nowarn +import scala.concurrent.duration.* +import scala.jdk.CollectionConverters.* +import scala.util.chaining.* object E2ETests extends SimpleIOSuite { @@ -93,7 +94,9 @@ object E2ETests extends SimpleIOSuite { .create() Resource - .make(IO(launcher.startListening()).timeout(5.seconds))(f => IO(f.cancel(true): Unit)) + .make(IO(launcher.startListening()).timeout(5.seconds))(f => + IO(f.cancel(true): @nowarn("msg=discarded non-Unit")) + ) .as(new LanguageServerAdapter(launcher.getRemoteProxy())) } } @@ -103,9 +106,12 @@ object E2ETests extends SimpleIOSuite { ): InitializeParams = new InitializeParams() .tap( _.setWorkspaceFolders( - workspaceFolders.map { path => - new WorkspaceFolder(path.toNioPath.toUri().toString()) - }.asJava + workspaceFolders + .zipWithIndex + .map { case (path, i) => + new WorkspaceFolder(path.toNioPath.toUri().toString(), s"test-workspace-$i") + } + .asJava ) ) diff --git a/modules/formatter/src/main/scala/playground/smithyql/format/Formatter.scala b/modules/formatter/src/main/scala/playground/smithyql/format/Formatter.scala index 3a71f518..0cf1ae1f 100644 --- a/modules/formatter/src/main/scala/playground/smithyql/format/Formatter.scala +++ b/modules/formatter/src/main/scala/playground/smithyql/format/Formatter.scala @@ -1,9 +1,10 @@ package playground.smithyql.format -import cats.implicits._ +import cats.kernel.Order.catsKernelOrderingForOrder +import cats.syntax.all.* import org.typelevel.paiges.Doc -import org.typelevel.paiges.instances._ -import playground.smithyql._ +import org.typelevel.paiges.instances.* +import playground.smithyql.* trait Formatter[-Alg[_[_]]] { diff --git a/modules/formatter/src/test/scala/playground/smithyql/format/FormattingTests.scala b/modules/formatter/src/test/scala/playground/smithyql/format/FormattingTests.scala index 7c819b78..794126d1 100644 --- a/modules/formatter/src/test/scala/playground/smithyql/format/FormattingTests.scala +++ b/modules/formatter/src/test/scala/playground/smithyql/format/FormattingTests.scala @@ -1,17 +1,17 @@ package playground.smithyql.format -import cats.implicits._ -import playground.Assertions._ -import playground.smithyql._ +import cats.syntax.all.* +import playground.Assertions.* +import playground.smithyql.* import playground.smithyql.format.Formatter import playground.smithyql.parser.Examples import playground.smithyql.parser.ParserSuite import playground.smithyql.parser.SourceParser -import util.chaining._ -import weaver._ +import util.chaining.* +import weaver.* import weaver.scalacheck.Checkers -import Diffs._ +import Diffs.given object FormattingTests extends SimpleIOSuite with Checkers { diff --git a/modules/language-support/src/main/scala/playground/language/CodeLensProvider.scala b/modules/language-support/src/main/scala/playground/language/CodeLensProvider.scala index a9b28c89..d7d62c0b 100644 --- a/modules/language-support/src/main/scala/playground/language/CodeLensProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/CodeLensProvider.scala @@ -1,13 +1,13 @@ package playground.language -import cats.implicits._ +import cats.syntax.all.* import playground.FileCompiler import playground.FileRunner import playground.smithyql.SourceFile import playground.smithyql.SourceRange import playground.smithyql.WithSource import playground.smithyql.parser.SourceParser -import playground.types._ +import playground.types.* trait CodeLensProvider[F[_]] { diff --git a/modules/language-support/src/main/scala/playground/language/CommandProvider.scala b/modules/language-support/src/main/scala/playground/language/CommandProvider.scala index 06411661..b909a90e 100644 --- a/modules/language-support/src/main/scala/playground/language/CommandProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/CommandProvider.scala @@ -1,9 +1,10 @@ package playground.language +import cats.Applicative import cats.Id import cats.MonadThrow import cats.data.NonEmptyList -import cats.implicits._ +import cats.syntax.all.* import playground.CompilationFailed import playground.CompiledInput import playground.FileCompiler @@ -28,33 +29,13 @@ trait CommandProvider[F[_]] { object CommandProvider { - def instance[F[_]: MonadThrow: TextDocumentProvider: CommandResultReporter]( + def instance[F[_]: MonadThrow: TextDocumentProvider]( compiler: FileCompiler[F], runner: FileRunner.Resolver[F], + )( + using reporter: CommandResultReporter[F] ): CommandProvider[F] = new CommandProvider[F] { - private val reporter = CommandResultReporter[F] - - private case class RunnerBuildErrors( - issues: NonEmptyList[OperationRunner.Issue.Squashed] - ) extends Exception { - - def report: F[Unit] = { - val (protocolIssues, otherIssues) = issues.toList.partitionMap { - case p: OperationRunner.Issue.Squashed.ProtocolIssues => p.asLeft - - case p: OperationRunner.Issue.Squashed.OtherIssues => p.asRight - } - - CommandResultReporter[F] - .onUnsupportedProtocol - .whenA(protocolIssues.nonEmpty) *> - otherIssues.traverse_ { case OperationRunner.Issue.Squashed.OtherIssues(others) => - CommandResultReporter[F].onIssues(others) - } - } - - } private case class QueryError( e: Throwable, @@ -134,4 +115,25 @@ object CommandProvider { } + private case class RunnerBuildErrors( + issues: NonEmptyList[OperationRunner.Issue.Squashed] + ) extends Exception { + + def report[F[_]: CommandResultReporter: Applicative]: F[Unit] = { + val (protocolIssues, otherIssues) = issues.toList.partitionMap { + case p: OperationRunner.Issue.Squashed.ProtocolIssues => p.asLeft + + case p: OperationRunner.Issue.Squashed.OtherIssues => p.asRight + } + + CommandResultReporter[F] + .onUnsupportedProtocol + .whenA(protocolIssues.nonEmpty) *> + otherIssues.traverse_ { case OperationRunner.Issue.Squashed.OtherIssues(others) => + CommandResultReporter[F].onIssues(others) + } + } + + } + } diff --git a/modules/language-support/src/main/scala/playground/language/CommandResultReporter.scala b/modules/language-support/src/main/scala/playground/language/CommandResultReporter.scala index 16afb7c4..88097436 100644 --- a/modules/language-support/src/main/scala/playground/language/CommandResultReporter.scala +++ b/modules/language-support/src/main/scala/playground/language/CommandResultReporter.scala @@ -4,7 +4,7 @@ import cats.Id import cats.Monad import cats.data.NonEmptyList import cats.effect.kernel.Ref -import cats.implicits._ +import cats.syntax.all.* import playground.CompiledInput import playground.smithyql.InputNode import playground.smithyql.Query diff --git a/modules/language-support/src/main/scala/playground/language/CompletionProvider.scala b/modules/language-support/src/main/scala/playground/language/CompletionProvider.scala index 8740b3d2..58c99f4e 100644 --- a/modules/language-support/src/main/scala/playground/language/CompletionProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/CompletionProvider.scala @@ -1,7 +1,8 @@ package playground.language import cats.Id -import cats.implicits._ +import cats.kernel.Order.catsKernelOrderingForOrder +import cats.syntax.all.* import playground.MultiServiceResolver import playground.ServiceIndex import playground.smithyql.NodeContext @@ -15,7 +16,7 @@ import playground.smithyql.RangeIndex import playground.smithyql.SourceFile import playground.smithyql.WithSource import playground.smithyql.parser.SourceParser -import playground.smithyql.syntax._ +import playground.smithyql.syntax.* import smithy4s.dynamic.DynamicSchemaIndex trait CompletionProvider { diff --git a/modules/language-support/src/main/scala/playground/language/CompletionVisitor.scala b/modules/language-support/src/main/scala/playground/language/CompletionVisitor.scala index da58e78d..783cc16e 100644 --- a/modules/language-support/src/main/scala/playground/language/CompletionVisitor.scala +++ b/modules/language-support/src/main/scala/playground/language/CompletionVisitor.scala @@ -1,8 +1,8 @@ package playground.language import cats.Id -import cats.implicits._ import cats.kernel.Eq +import cats.syntax.all.* import playground.ServiceNameExtractor import playground.TextUtils import playground.language.CompletionItem.InsertUseClause.NotRequired @@ -38,7 +38,7 @@ import smithy4s.schema.EnumValue import smithy4s.schema.Field import smithy4s.schema.Primitive import smithy4s.schema.Schema -import smithy4s.schema.Schema._ +import smithy4s.schema.Schema.* import smithy4s.schema.SchemaVisitor import java.util.UUID @@ -127,7 +127,7 @@ object CompletionItem { ).copy(detail = describeService(service)) def fromField( - field: Field[_, _] + field: Field[?, ?] ): CompletionItem = fromHints( kind = CompletionItemKind.Field, label = field.label, @@ -136,7 +136,7 @@ object CompletionItem { ) def fromAlt( - alt: Alt[_, _] + alt: Alt[?, ?] ): CompletionItem = fromHints( kind = CompletionItemKind.UnionMember, label = alt.label, @@ -156,7 +156,7 @@ object CompletionItem { kind: CompletionItemKind, label: String, insertText: InsertText, - schema: Schema[_], + schema: Schema[?], ): CompletionItem = { val isField = kind === CompletionItemKind.Field @@ -188,7 +188,7 @@ object CompletionItem { def describeType( isField: Boolean, - schema: Schema[_], + schema: Schema[?], ): String = { val isOptional = isField && !isRequiredField(schema) @@ -201,11 +201,11 @@ object CompletionItem { } private def isRequiredField( - schema: Schema[_] + schema: Schema[?] ): Boolean = schema.hints.has(smithy.api.Required) - private val describePrimitive: Primitive[_] => String = { - import smithy4s.schema.Primitive._ + private val describePrimitive: Primitive[?] => String = { + import smithy4s.schema.Primitive.* { case PString => "string" @@ -225,22 +225,12 @@ object CompletionItem { } } - private def describeCollection[C[_]]( - tag: CollectionTag[C], - hints: Hints, - ): String = { - import smithy4s.schema.CollectionTag._ - - val base = - tag match { - case ListTag => "list" - case SetTag => "set" - case IndexedSeqTag => "@indexedSeq list" - case VectorTag => "@vector list" - } - - sparseTraitDescription(hints).foldMap(_ + " ") + base - } + private def describeCollection( + hints: Hints + ): String = + sparseTraitDescription(hints).foldMap(_ + " ") + + uniqueItemsTraitDescription(hints).foldMap(_ + " ") + + "list" def describeService( service: DynamicSchemaIndex.ServiceWrapper @@ -248,7 +238,7 @@ object CompletionItem { // nice to have: precompile this? caching? def describeSchema( - schema: Schema[_] + schema: Schema[?] ): ( ) => String = schema match { @@ -256,7 +246,7 @@ object CompletionItem { case Schema.CollectionSchema(shapeId, hints, tag, member) => now( - s"${describeCollection(tag, hints)} ${shapeId.name} { member: ${describeSchema(member)()} }" + s"${describeCollection(hints)} ${shapeId.name} { member: ${describeSchema(member)()} }" ) case e @ EnumerationSchema(_, _, _, _, _) => @@ -295,6 +285,10 @@ object CompletionItem { hints: Hints ): Option[String] = hints.get(api.Sparse).as("@sparse") + private def uniqueItemsTraitDescription( + hints: Hints + ): Option[String] = hints.get(api.UniqueItems).as("@uniqueItems") + private def now( s: String ): ( @@ -318,7 +312,7 @@ object CompletionItem { def forOperation[Op[_, _, _, _, _]]( insertUseClause: InsertUseClause, - endpoint: Endpoint[Op, _, _, _, _, _], + endpoint: Endpoint[Op, ?, ?, ?, ?, ?], serviceId: QualifiedIdentifier, insertBodyStruct: InsertBodyStruct, ): CompletionItem = { @@ -575,7 +569,7 @@ object CompletionVisitor extends SchemaVisitor[CompletionResolver] { override def struct[S]( shapeId: ShapeId, hints: Hints, - fields: Vector[Field[S, _]], + fields: Vector[Field[S, ?]], make: IndexedSeq[Any] => S, ): CompletionResolver[S] = { val compiledFields = fields.map(field => (field, field.schema.compile(this))) @@ -584,7 +578,7 @@ object CompletionVisitor extends SchemaVisitor[CompletionResolver] { inBody = fields // todo: filter out present fields - .sortBy(field => (field.isStrictlyRequired, field.label)) + .sortBy(field => (field.isRequired && !field.hasDefaultValue, field.label)) .map(CompletionItem.fromField) .toList, inValue = @@ -603,7 +597,7 @@ object CompletionVisitor extends SchemaVisitor[CompletionResolver] { override def union[U]( shapeId: ShapeId, hints: Hints, - alternatives: Vector[Alt[U, _]], + alternatives: Vector[Alt[U, ?]], dispatcher: Alt.Dispatcher[U], ): CompletionResolver[U] = { val compiledAlts = alternatives.map { alt => diff --git a/modules/language-support/src/main/scala/playground/language/DiagnosticProvider.scala b/modules/language-support/src/main/scala/playground/language/DiagnosticProvider.scala index 3793adaf..85ee13ae 100644 --- a/modules/language-support/src/main/scala/playground/language/DiagnosticProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/DiagnosticProvider.scala @@ -3,7 +3,7 @@ package playground.language import cats.data.Ior import cats.data.IorNel import cats.data.NonEmptyList -import cats.implicits._ +import cats.syntax.all.* import playground.CompilationError import playground.CompilationErrorDetails import playground.CompilationFailed @@ -17,7 +17,7 @@ import playground.smithyql.SourceRange import playground.smithyql.WithSource import playground.smithyql.parser.ParsingFailure import playground.smithyql.parser.SourceParser -import playground.types._ +import playground.types.* trait DiagnosticProvider[F[_]] { diff --git a/modules/language-support/src/main/scala/playground/language/DocumentSymbolProvider.scala b/modules/language-support/src/main/scala/playground/language/DocumentSymbolProvider.scala index f25d4e48..57d8c7b3 100644 --- a/modules/language-support/src/main/scala/playground/language/DocumentSymbolProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/DocumentSymbolProvider.scala @@ -1,6 +1,6 @@ package playground.language -import cats.implicits._ +import cats.syntax.all.* import playground.smithyql.InputNode import playground.smithyql.Listed import playground.smithyql.Prelude diff --git a/modules/language-support/src/main/scala/playground/language/FormattingProvider.scala b/modules/language-support/src/main/scala/playground/language/FormattingProvider.scala index 893267cd..154a20c3 100644 --- a/modules/language-support/src/main/scala/playground/language/FormattingProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/FormattingProvider.scala @@ -1,7 +1,7 @@ package playground.language import cats.FlatMap -import cats.implicits._ +import cats.syntax.all.* import playground.smithyql.SourceFile import playground.smithyql.SourceRange import playground.smithyql.format.Formatter diff --git a/modules/language-support/src/main/scala/playground/language/TextDocumentProvider.scala b/modules/language-support/src/main/scala/playground/language/TextDocumentProvider.scala index 4d103721..655061b1 100644 --- a/modules/language-support/src/main/scala/playground/language/TextDocumentProvider.scala +++ b/modules/language-support/src/main/scala/playground/language/TextDocumentProvider.scala @@ -1,7 +1,7 @@ package playground.language import cats.Applicative -import cats.implicits._ +import cats.syntax.all.* trait TextDocumentProvider[F[_]] { diff --git a/modules/language-support/src/main/scala/playground/language/Uri.scala b/modules/language-support/src/main/scala/playground/language/Uri.scala index c7895bc8..1abbbe30 100644 --- a/modules/language-support/src/main/scala/playground/language/Uri.scala +++ b/modules/language-support/src/main/scala/playground/language/Uri.scala @@ -5,7 +5,10 @@ import fs2.io.file.Path import java.net.URI import java.nio.file.Paths -final case class Uri private ( +// not making constructor private because +// "access modifiers from `copy` method are copied from the case class constructor" +// cannot nicely be silenced in scala 2 +final case class Uri /* private */ ( value: String ) extends AnyVal { def toPath: Path = Path.fromNioPath(Paths.get(new URI(value))) diff --git a/modules/language-support/src/test/scala/playground/language/CodeLensProviderTests.scala b/modules/language-support/src/test/scala/playground/language/CodeLensProviderTests.scala index e60c3970..7407fdd4 100644 --- a/modules/language-support/src/test/scala/playground/language/CodeLensProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/CodeLensProviderTests.scala @@ -1,8 +1,8 @@ package playground.language import cats.effect.IO -import cats.implicits._ -import playground.Assertions._ +import cats.syntax.all.* +import playground.Assertions.* import playground.CompilationError import playground.CompilationFailed import playground.FileCompiler @@ -11,11 +11,11 @@ import playground.OperationCompiler import playground.OperationRunner import playground.PreludeCompiler import playground.ServiceIndex -import playground.ServiceUtils._ -import playground.language.Diffs._ -import playground.smithyql.StringRangeUtils._ +import playground.ServiceUtils.* +import playground.language.Diffs.given +import playground.smithyql.StringRangeUtils.* import playground.std.RandomGen -import weaver._ +import weaver.* object CodeLensProviderTests extends FunSuite { diff --git a/modules/language-support/src/test/scala/playground/language/CompletionItemTests.scala b/modules/language-support/src/test/scala/playground/language/CompletionItemTests.scala index bd40a413..b9457c47 100644 --- a/modules/language-support/src/test/scala/playground/language/CompletionItemTests.scala +++ b/modules/language-support/src/test/scala/playground/language/CompletionItemTests.scala @@ -2,16 +2,16 @@ package playground.language import demo.smithy.Hero import demo.smithy.Subscription -import playground.Assertions._ +import playground.Assertions.* import playground.smithyql.Position import playground.smithyql.QualifiedIdentifier -import playground.smithyql.syntax._ +import playground.smithyql.syntax.* import playground.std.ClockGen import playground.std.ClockOperation import smithy4s.schema.Schema -import weaver._ +import weaver.* -import Diffs._ +import Diffs.given object CompletionItemTests extends FunSuite { test("CompletionItem.fromField: required field") { diff --git a/modules/language-support/src/test/scala/playground/language/CompletionProviderTests.scala b/modules/language-support/src/test/scala/playground/language/CompletionProviderTests.scala index 53c4fdc7..e5e7c594 100644 --- a/modules/language-support/src/test/scala/playground/language/CompletionProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/CompletionProviderTests.scala @@ -2,18 +2,18 @@ package playground.language import demo.smithy.DemoServiceGen import demo.smithy.DeprecatedServiceGen -import playground.Assertions._ -import playground.ServiceUtils._ -import playground.language.Diffs._ +import playground.Assertions.* +import playground.ServiceUtils.* +import playground.language.Diffs.given import playground.smithyql.Position import playground.smithyql.QualifiedIdentifier -import playground.smithyql.StringRangeUtils._ -import playground.smithyql.syntax._ +import playground.smithyql.StringRangeUtils.* +import playground.smithyql.syntax.* import playground.std.ClockGen import playground.std.ClockOperation import playground.std.RandomGen import playground.std.RandomOperation -import weaver._ +import weaver.* object CompletionProviderTests extends SimpleIOSuite { @@ -150,11 +150,9 @@ object CompletionProviderTests extends SimpleIOSuite { } locally { - // for some reason, this can't be defined within the test body. - // https://github.com/disneystreaming/smithy4s/issues/537 - val provider = CompletionProvider.forServices(List(wrapService(DeprecatedServiceGen))) - pureTest("completing empty file - one (deprecated) service exists") { + val provider = CompletionProvider.forServices(List(wrapService(DeprecatedServiceGen))) + val result = provider .provide( "", @@ -166,6 +164,8 @@ object CompletionProviderTests extends SimpleIOSuite { } pureTest("completing use clause - one (deprecated) service exists") { + val provider = CompletionProvider.forServices(List(wrapService(DeprecatedServiceGen))) + val result = provider .provide( "use service a#B\nhello {}", diff --git a/modules/language-support/src/test/scala/playground/language/CompletionTests.scala b/modules/language-support/src/test/scala/playground/language/CompletionTests.scala index 2a4b5d84..65ac32c0 100644 --- a/modules/language-support/src/test/scala/playground/language/CompletionTests.scala +++ b/modules/language-support/src/test/scala/playground/language/CompletionTests.scala @@ -1,6 +1,6 @@ package playground.language -import cats.implicits._ +import cats.syntax.all.* import demo.smithy.Good import demo.smithy.HasDeprecations import demo.smithy.HasNewtypes @@ -15,22 +15,22 @@ import demo.smithy.PowerMap import demo.smithy.PrivacyTier import demo.smithy.SampleSparseList import demo.smithy.SampleSparseMap -import playground.Assertions._ -import playground.language.Diffs._ +import playground.Assertions.* +import playground.language.Diffs.given import playground.smithyql.NodeContext -import playground.smithyql.NodeContext.PathEntry._ +import playground.smithyql.NodeContext.PathEntry.* import smithy.api.TimestampFormat import smithy4s.Hints import smithy4s.Timestamp import smithy4s.schema.Schema -import weaver._ +import weaver.* import java.util.UUID object CompletionTests extends FunSuite { def getCompletions( - schema: Schema[_], + schema: Schema[?], ctx: NodeContext, ): List[CompletionItem] = schema.compile(CompletionVisitor).getCompletions(ctx) @@ -175,7 +175,7 @@ object CompletionTests extends FunSuite { val completions = getCompletions(Power.schema, NodeContext.EmptyPath) val inserts = completions.map(_.insertText) - val expectedInserts = List("FIRE", "LIGHTNING", "WIND", "ICE") + val expectedInserts = List("ICE", "FIRE", "LIGHTNING", "WIND") .map(s => s"\"$s\"") .map(InsertText.JustString(_)) @@ -187,7 +187,7 @@ object CompletionTests extends FunSuite { val completions = getCompletions(Power.schema, NodeContext.EmptyPath.inQuotes) val inserts = completions.map(_.insertText) - val expectedInserts = List("FIRE", "LIGHTNING", "WIND", "ICE") + val expectedInserts = List("ICE", "FIRE", "LIGHTNING", "WIND") .map(InsertText.JustString(_)) assert(completions.map(_.kind).forall(_ == CompletionItemKind.EnumMember)) && @@ -207,7 +207,7 @@ object CompletionTests extends FunSuite { val inserts = completions.map(_.insertText) - val expectedInserts = List("FIRE", "LIGHTNING", "WIND", "ICE") + val expectedInserts = List("ICE", "FIRE", "LIGHTNING", "WIND") .map(_ + " = ") .map(InsertText.JustString(_)) @@ -300,14 +300,14 @@ object CompletionTests extends FunSuite { test("describe indexed seq") { assert.eql( CompletionItem.describeSchema(Ints.schema)(), - "@indexedSeq list Ints { member: integer Integer }", + "list Ints { member: integer Integer }", ) } test("describe set of ints") { assert.eql( CompletionItem.describeSchema(IntSet.schema)(), - "set IntSet { member: integer Integer }", + "@uniqueItems list IntSet { member: integer Integer }", ) } diff --git a/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala b/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala index d3e791f2..fcf19a40 100644 --- a/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala @@ -14,29 +14,29 @@ import demo.smithy.DemoServiceGen import noop.NoRunnerServiceGen import org.http4s.HttpApp import org.http4s.client.Client -import playground.Assertions._ +import playground.Assertions.* import playground.CompilationError import playground.CompilationErrorDetails import playground.CompilationFailed import playground.DiagnosticSeverity -import playground.Diffs._ +import playground.Diffs.given import playground.FileCompiler import playground.FileRunner import playground.OperationCompiler import playground.OperationRunner import playground.PreludeCompiler import playground.ServiceIndex -import playground.ServiceUtils._ +import playground.ServiceUtils.* import playground.smithyql.QualifiedIdentifier import playground.smithyql.SourceRange -import playground.smithyql.StringRangeUtils._ +import playground.smithyql.StringRangeUtils.* import playground.std.ClockGen import playground.std.RandomGen import playground.std.Stdlib import playground.std.StdlibRuntime import smithy4s.HasId import smithy4s.aws.AwsEnvironment -import weaver._ +import weaver.* object DiagnosticProviderTests extends SimpleIOSuite { diff --git a/modules/language-support/src/test/scala/playground/language/Diffs.scala b/modules/language-support/src/test/scala/playground/language/Diffs.scala index a06d1cec..ee6bc615 100644 --- a/modules/language-support/src/test/scala/playground/language/Diffs.scala +++ b/modules/language-support/src/test/scala/playground/language/Diffs.scala @@ -1,10 +1,15 @@ package playground.language import com.softwaremill.diffx.Diff +import playground.smithyql.Diffs.given object Diffs { - import com.softwaremill.diffx.generic.auto._ - implicit val diffCompletionItem: Diff[CompletionItem] = Diff.derivedDiff - implicit lazy val diffDocumentSymbol: Diff[DocumentSymbol] = Diff.derivedDiff - implicit lazy val diffCodeLens: Diff[CodeLens] = Diff.derivedDiff + given Diff[CompletionItemKind] = Diff.derived + given Diff[TextEdit] = Diff.derived + given Diff[InsertText] = Diff.derived + given Diff[CompletionItem] = Diff.derived + given Diff[SymbolKind] = Diff.derived + given Diff[DocumentSymbol] = Diff.derived + given Diff[Command] = Diff.derived + given Diff[CodeLens] = Diff.derived } diff --git a/modules/language-support/src/test/scala/playground/language/DocumentSymbolProviderTests.scala b/modules/language-support/src/test/scala/playground/language/DocumentSymbolProviderTests.scala index 08868c1b..53e938ba 100644 --- a/modules/language-support/src/test/scala/playground/language/DocumentSymbolProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/DocumentSymbolProviderTests.scala @@ -1,10 +1,10 @@ package playground.language -import playground.Assertions._ -import playground.language.Diffs._ +import playground.Assertions.* +import playground.language.Diffs.given import playground.smithyql.Position import playground.smithyql.SourceRange -import weaver._ +import weaver.* object DocumentSymbolProviderTests extends FunSuite { diff --git a/modules/language-support/src/test/scala/playground/language/FormattingProviderTests.scala b/modules/language-support/src/test/scala/playground/language/FormattingProviderTests.scala index fcbd4b46..5e2c0d47 100644 --- a/modules/language-support/src/test/scala/playground/language/FormattingProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/FormattingProviderTests.scala @@ -1,11 +1,10 @@ package playground.language import cats.Id -import cats.implicits._ import fs2.io.file.Path import playground.smithyql.Position import playground.smithyql.SourceRange -import weaver._ +import weaver.* object FormattingProviderTests extends FunSuite { private val anyUri = Uri.fromPath(Path("file.smithyql")) diff --git a/modules/lsp/src/main/scala/playground/lsp/BuildLoader.scala b/modules/lsp/src/main/scala/playground/lsp/BuildLoader.scala index e58f8f65..e619f14a 100644 --- a/modules/lsp/src/main/scala/playground/lsp/BuildLoader.scala +++ b/modules/lsp/src/main/scala/playground/lsp/BuildLoader.scala @@ -1,7 +1,7 @@ package playground.lsp import cats.effect.kernel.Sync -import cats.implicits._ +import cats.syntax.all.* import fs2.io.file.Files import fs2.io.file.Path import playground.PlaygroundConfig @@ -95,7 +95,11 @@ object BuildLoader { .getOrElse(sys.error("impossible - no parent for " + loaded.configFilePath)) // "raw" means these can be directories etc., just like in the config file. - val rawImportPaths = loaded.config.imports.map(workspaceBase.resolve).toSet + val rawImportPaths = + ( + loaded.config.imports ++ + loaded.config.sources + ).map(workspaceBase.resolve).toSet for { specs <- filterImports(rawImportPaths) diff --git a/modules/lsp/src/main/scala/playground/lsp/ConfigurationValue.scala b/modules/lsp/src/main/scala/playground/lsp/ConfigurationValue.scala index 810455b1..880cd73b 100644 --- a/modules/lsp/src/main/scala/playground/lsp/ConfigurationValue.scala +++ b/modules/lsp/src/main/scala/playground/lsp/ConfigurationValue.scala @@ -1,6 +1,6 @@ package playground.lsp -import cats.implicits._ +import cats.syntax.all.* import io.circe.Codec import io.circe.Decoder import io.circe.Encoder diff --git a/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala b/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala index 06a86299..4c3a9625 100644 --- a/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala +++ b/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala @@ -1,8 +1,14 @@ package playground.lsp import cats.FlatMap +import cats.data.Kleisli import cats.effect.kernel.Async -import cats.implicits._ +import cats.syntax.all.* +import cats.tagless.Derive +import cats.tagless.FunctorK +import cats.tagless.catsTaglessApplyKForIdK +import cats.tagless.implicits.* +import cats.~> import com.google.gson.JsonElement import org.eclipse.lsp4j.ConfigurationItem import org.eclipse.lsp4j.ConfigurationParams @@ -11,8 +17,8 @@ import org.eclipse.lsp4j.MessageType import playground.language.Feedback import java.util.concurrent.CompletableFuture -import scala.jdk.CollectionConverters._ -import scala.util.chaining._ +import scala.jdk.CollectionConverters.* +import scala.util.chaining.* trait LanguageClient[F[_]] extends Feedback[F] { @@ -101,33 +107,19 @@ object LanguageClient { def refreshDiagnostics: F[Unit] = withClientF(_.refreshDiagnostics()).void } - // courtesy of github copilot - // workaround for https://github.com/typelevel/cats-tagless/pull/401 + implicit val functorK: FunctorK[LanguageClient] = Derive.functorK[LanguageClient] + def defer[F[_]: FlatMap]( fa: F[LanguageClient[F]] - ): LanguageClient[F] = - new LanguageClient[F] { + ): LanguageClient[F] = Derive + .readerT[LanguageClient, F] + .mapK(new (Kleisli[F, LanguageClient[F], *] ~> F) { - override def configuration[A]( - v: ConfigurationValue[A] - ): F[A] = fa.flatMap(_.configuration(v)) - - override def showMessage( - tpe: MessageType, - msg: String, - ): F[Unit] = fa.flatMap(_.showMessage(tpe, msg)) + def apply[A]( + k: Kleisli[F, LanguageClient[F], A] + ): F[A] = fa.flatMap(k.run) - override def refreshDiagnostics: F[Unit] = fa.flatMap(_.refreshDiagnostics) - - override def refreshCodeLenses: F[Unit] = fa.flatMap(_.refreshCodeLenses) - - override def showOutputPanel: F[Unit] = fa.flatMap(_.showOutputPanel) - - override def logOutput( - msg: String - ): F[Unit] = fa.flatMap(_.logOutput(msg)) - - } + }) val NoChangeDetected: String = "No change detected, not rebuilding server" } diff --git a/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala b/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala index b2e2881f..5109ba22 100644 --- a/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala +++ b/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala @@ -3,16 +3,20 @@ package playground.lsp import cats.Applicative import cats.FlatMap import cats.MonadThrow -import cats.effect.implicits._ +import cats.data.Kleisli import cats.effect.kernel.Async -import cats.implicits._ import cats.parse.LocationMap +import cats.syntax.all.* +import cats.tagless.Derive +import cats.tagless.FunctorK +import cats.tagless.catsTaglessApplyKForIdK +import cats.tagless.implicits.* import cats.~> import com.google.gson.JsonElement import com.google.gson.JsonPrimitive +import org.eclipse.lsp4j.* import org.eclipse.lsp4j.ServerCapabilities import org.eclipse.lsp4j.TextDocumentSyncKind -import org.eclipse.lsp4j._ import playground.CompilationError import playground.CompilationFailed import playground.FileCompiler @@ -28,17 +32,18 @@ import playground.language.CommandResultReporter import playground.language.CompletionProvider import playground.language.DiagnosticProvider import playground.language.DocumentSymbolProvider +import playground.language.Feedback import playground.language.FormattingProvider import playground.language.TextDocumentProvider import playground.language.Uri import playground.lsp.buildinfo.BuildInfo -import playground.types._ +import playground.types.* import smithy4s.dynamic.DynamicSchemaIndex -import scala.jdk.CollectionConverters._ -import scala.util.chaining._ +import scala.jdk.CollectionConverters.* +import scala.util.chaining.* -import ToUriOps._ +import ToUriOps.* trait LanguageServer[F[_]] { @@ -169,13 +174,15 @@ object LanguageServer { .toList .map(_.toUri) - LanguageClient[F] - .showInfoMessage(s"Hello from Smithy Playground v${BuildInfo.version}") *> + Feedback[F] + .showInfoMessage( + s"Hello from Smithy Playground v${BuildInfo.version}! Loading project..." + ) *> ServerLoader[F] .prepare(wsf.some) .flatMap { prepped => ServerLoader[F].perform(prepped.params).flatTap { stats => - LanguageClient[F] + Feedback[F] .showInfoMessage( s"Loaded Smithy Playground server with ${stats.render}" ) @@ -303,11 +310,11 @@ object LanguageServer { .prepare(workspaceFolders = None) .flatMap { case prepared if !prepared.isChanged => - LanguageClient[F].showInfoMessage( + Feedback[F].showInfoMessage( LanguageClient.NoChangeDetected ) case prepared => - LanguageClient[F].showInfoMessage("Detected changes, will try to rebuild server...") *> + Feedback[F].showInfoMessage("Detected changes, will try to rebuild server...") *> ServerLoader[F] .perform(prepared.params) .onError { case e => @@ -318,7 +325,7 @@ object LanguageServer { .flatMap { stats => LanguageClient[F].refreshDiagnostics *> LanguageClient[F].refreshCodeLenses *> - LanguageClient[F].showInfoMessage( + Feedback[F].showInfoMessage( s"Reloaded Smithy Playground server with ${stats.render}" ) } @@ -352,72 +359,18 @@ object LanguageServer { def exit: F[Unit] = Applicative[F].unit } - // courtesy of github copilot - // workaround for https://github.com/typelevel/cats-tagless/pull/401 + implicit val functorK: FunctorK[LanguageServer] = Derive.functorK[LanguageServer] + def defer[F[_]: FlatMap]( fa: F[LanguageServer[F]] - ): LanguageServer[F] = - new LanguageServer[F] { - - override def initialize( - params: InitializeParams - ): F[InitializeResult] = fa.flatMap(_.initialize(params)); - - override def initialized( - params: InitializedParams - ): F[Unit] = fa.flatMap(_.initialized(params)); - - override def didChange( - params: DidChangeTextDocumentParams - ): F[Unit] = fa.flatMap(_.didChange(params)); - - override def didOpen( - params: DidOpenTextDocumentParams - ): F[Unit] = fa.flatMap(_.didOpen(params)); - - override def didSave( - params: DidSaveTextDocumentParams - ): F[Unit] = fa.flatMap(_.didSave(params)); - - override def didClose( - params: DidCloseTextDocumentParams - ): F[Unit] = fa.flatMap(_.didClose(params)); - - override def formatting( - params: DocumentFormattingParams - ): F[List[TextEdit]] = fa.flatMap(_.formatting(params)); - - override def completion( - position: CompletionParams - ): F[Either[List[CompletionItem], CompletionList]] = fa.flatMap(_.completion(position)); - - override def diagnostic( - params: DocumentDiagnosticParams - ): F[DocumentDiagnosticReport] = fa.flatMap(_.diagnostic(params)); - - override def codeLens( - params: CodeLensParams - ): F[List[CodeLens]] = fa.flatMap(_.codeLens(params)); - - override def documentSymbol( - params: DocumentSymbolParams - ): F[List[DocumentSymbol]] = fa.flatMap(_.documentSymbol(params)); - - override def didChangeWatchedFiles( - params: DidChangeWatchedFilesParams - ): F[Unit] = fa.flatMap(_.didChangeWatchedFiles(params)); - - override def executeCommand( - params: ExecuteCommandParams - ): F[Unit] = fa.flatMap(_.executeCommand(params)); - - override def runFile( - params: RunFileParams - ): F[Unit] = fa.flatMap(_.runFile(params)); + ): LanguageServer[F] = Derive + .readerT[LanguageServer, F] + .mapK(new (Kleisli[F, LanguageServer[F], *] ~> F) { - override def shutdown: F[Unit] = fa.flatMap(_.shutdown); + def apply[A]( + k: Kleisli[F, LanguageServer[F], A] + ): F[A] = fa.flatMap(k.run) - override def exit: F[Unit] = fa.flatMap(_.exit) - } + }) } diff --git a/modules/lsp/src/main/scala/playground/lsp/Main.scala b/modules/lsp/src/main/scala/playground/lsp/Main.scala index d7c98024..78df39f5 100644 --- a/modules/lsp/src/main/scala/playground/lsp/Main.scala +++ b/modules/lsp/src/main/scala/playground/lsp/Main.scala @@ -5,7 +5,7 @@ import cats.effect.IOApp import cats.effect.kernel.Deferred import cats.effect.kernel.Resource import cats.effect.std.Dispatcher -import cats.implicits._ +import cats.syntax.all.* import org.eclipse.lsp4j.jsonrpc.Launcher import org.eclipse.lsp4j.launch.LSPLauncher diff --git a/modules/lsp/src/main/scala/playground/lsp/MainServer.scala b/modules/lsp/src/main/scala/playground/lsp/MainServer.scala index a122d857..dc9bac1d 100644 --- a/modules/lsp/src/main/scala/playground/lsp/MainServer.scala +++ b/modules/lsp/src/main/scala/playground/lsp/MainServer.scala @@ -1,6 +1,6 @@ package playground.lsp -import cats.effect.implicits._ +import cats.effect.implicits.* import cats.effect.kernel.Async import cats.effect.kernel.Resource import cats.effect.std diff --git a/modules/lsp/src/main/scala/playground/lsp/ModelLoader.scala b/modules/lsp/src/main/scala/playground/lsp/ModelLoader.scala index e8946bdc..cf456ab8 100644 --- a/modules/lsp/src/main/scala/playground/lsp/ModelLoader.scala +++ b/modules/lsp/src/main/scala/playground/lsp/ModelLoader.scala @@ -1,6 +1,6 @@ package playground.lsp -import coursier._ +import coursier.* import coursier.cache.FileCache import coursier.parse.DependencyParser import coursier.parse.RepositoryParser @@ -17,10 +17,10 @@ import java.net.URL import java.net.URLClassLoader import java.nio.file.FileSystems import java.nio.file.Files -import scala.concurrent.duration._ -import scala.jdk.CollectionConverters._ +import scala.concurrent.duration.* +import scala.jdk.CollectionConverters.* import scala.util.Using -import scala.util.chaining._ +import scala.util.chaining.* // NOTE: methods in this object are mostly side effecting and blocking. object ModelLoader { @@ -96,22 +96,20 @@ object ModelLoader { private def addFileImports( imports: Iterable[File] - ): ModelAssembler => ModelAssembler = - assembler => { - imports.foreach(f => assembler.addImport(f.toPath())) - assembler - } + ): ModelAssembler => ModelAssembler = { assembler => + imports.foreach(f => assembler.addImport(f.toPath())) + assembler + } private def addPlaygroundModels( classLoader: ClassLoader - ): ModelAssembler => ModelAssembler = - assembler => { - List( - "META-INF/smithy/std.smithy" - ).map(classLoader.getResource).foreach(assembler.addImport) + ): ModelAssembler => ModelAssembler = { assembler => + List( + "META-INF/smithy/std.smithy" + ).map(classLoader.getResource).foreach(assembler.addImport) - assembler - } + assembler + } def resolveModelDependencies( config: PlaygroundConfig @@ -150,8 +148,8 @@ object ModelLoader { } Fetch(FileCache[Task]().withTtl(1.hour)) - .addRepositories(repos: _*) - .addDependencies(deps: _*) + .addRepositories(repos*) + .addDependencies(deps*) .run() .toList } diff --git a/modules/lsp/src/main/scala/playground/lsp/PlaygroundLanguageServerAdapter.scala b/modules/lsp/src/main/scala/playground/lsp/PlaygroundLanguageServerAdapter.scala index 9c7f4b3c..0695da52 100644 --- a/modules/lsp/src/main/scala/playground/lsp/PlaygroundLanguageServerAdapter.scala +++ b/modules/lsp/src/main/scala/playground/lsp/PlaygroundLanguageServerAdapter.scala @@ -2,8 +2,8 @@ package playground.lsp import cats.Functor import cats.effect.std.Dispatcher -import cats.implicits._ -import org.eclipse.lsp4j._ +import cats.syntax.all.* +import org.eclipse.lsp4j.* import org.eclipse.lsp4j.adapters.DocumentSymbolResponseAdapter import org.eclipse.lsp4j.jsonrpc.json.ResponseJsonAdapter import org.eclipse.lsp4j.jsonrpc.messages @@ -11,7 +11,7 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonNotification import org.eclipse.lsp4j.jsonrpc.services.JsonRequest import java.util.concurrent.CompletableFuture -import scala.jdk.CollectionConverters._ +import scala.jdk.CollectionConverters.* final class PlaygroundLanguageServerAdapter[F[_]: Functor]( impl: LanguageServer[F] @@ -97,12 +97,9 @@ final class PlaygroundLanguageServerAdapter[F[_]: Functor]( @JsonRequest("workspace/executeCommand") def executeCommand( params: ExecuteCommandParams - ): CompletableFuture[Object] = d - .unsafeToCompletableFuture( - impl - .executeCommand(params) - .as(null: Object) - ) + ): CompletableFuture[Object] = d.unsafeToCompletableFuture( + impl.executeCommand(params).as(null: Object) + ) @JsonNotification("workspace/didChangeWatchedFiles") def didChangeWatchedFiles( @@ -121,8 +118,7 @@ final class PlaygroundLanguageServerAdapter[F[_]: Functor]( @JsonRequest("smithyql/runQuery") def runQuery( params: RunFileParams - ): CompletableFuture[Object] = d - .unsafeToCompletableFuture(impl.runFile(params).as(null: Object)) + ): CompletableFuture[Object] = d.unsafeToCompletableFuture(impl.runFile(params).as(null: Object)) @JsonRequest("exit") def exit( diff --git a/modules/lsp/src/main/scala/playground/lsp/PluginResolver.scala b/modules/lsp/src/main/scala/playground/lsp/PluginResolver.scala index ea252816..5a171fb3 100644 --- a/modules/lsp/src/main/scala/playground/lsp/PluginResolver.scala +++ b/modules/lsp/src/main/scala/playground/lsp/PluginResolver.scala @@ -1,7 +1,7 @@ package playground.lsp import cats.effect.kernel.Sync -import cats.implicits._ +import cats.syntax.all.* import playground.PlaygroundConfig import playground.plugins.PlaygroundPlugin diff --git a/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala b/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala index 914a15ae..b7a4f935 100644 --- a/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala +++ b/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala @@ -1,10 +1,10 @@ package playground.lsp -import cats.effect.implicits._ +import cats.effect.implicits.* import cats.effect.kernel.Async import cats.effect.kernel.Resource import cats.effect.std -import cats.implicits._ +import cats.syntax.all.* import fs2.compression.Compression import fs2.io.file.Files import fs2.io.net.Network diff --git a/modules/lsp/src/main/scala/playground/lsp/ServerLoader.scala b/modules/lsp/src/main/scala/playground/lsp/ServerLoader.scala index b51a62da..53d51eef 100644 --- a/modules/lsp/src/main/scala/playground/lsp/ServerLoader.scala +++ b/modules/lsp/src/main/scala/playground/lsp/ServerLoader.scala @@ -2,7 +2,7 @@ package playground.lsp import cats.MonadThrow import cats.effect.kernel.Ref -import cats.implicits._ +import cats.syntax.all.* import playground.PlaygroundConfig import playground.language.Uri @@ -34,21 +34,23 @@ object ServerLoader { ) case class WorkspaceStats( + sourceCount: Int, importCount: Int, dependencyCount: Int, pluginCount: Int, ) { def render: String = - s"$importCount imports, $dependencyCount dependencies and $pluginCount plugins" + s"$sourceCount source entries, $importCount imports, $dependencyCount dependencies and $pluginCount plugins" } object WorkspaceStats { - def fromBuildConfig( + def fromPlaygroundConfig( bc: PlaygroundConfig ): WorkspaceStats = WorkspaceStats( + sourceCount = bc.sources.size, importCount = bc.imports.size, dependencyCount = bc.dependencies.size, pluginCount = bc.extensions.size, @@ -107,7 +109,7 @@ object ServerLoader { .build(params, this) .map(server => State(server, Some(params))) .flatMap(stateRef.set) - .as(WorkspaceStats.fromBuildConfig(params.config)) + .as(WorkspaceStats.fromPlaygroundConfig(params.config)) val server: LanguageServer[F] = LanguageServer.defer(stateRef.get.map(_.currentServer)) } diff --git a/modules/lsp/src/main/scala/playground/lsp/TextDocumentManager.scala b/modules/lsp/src/main/scala/playground/lsp/TextDocumentManager.scala index 10e4f0b6..66b14d14 100644 --- a/modules/lsp/src/main/scala/playground/lsp/TextDocumentManager.scala +++ b/modules/lsp/src/main/scala/playground/lsp/TextDocumentManager.scala @@ -3,7 +3,7 @@ package playground import cats.data.OptionT import cats.effect.Concurrent import cats.effect.kernel.Ref -import cats.implicits._ +import cats.syntax.all.* import fs2.io.file.Files import playground.language.TextDocumentProvider import playground.language.Uri diff --git a/modules/lsp/src/main/scala/playground/lsp/converters.scala b/modules/lsp/src/main/scala/playground/lsp/converters.scala index fad723f6..93bde8d6 100644 --- a/modules/lsp/src/main/scala/playground/lsp/converters.scala +++ b/modules/lsp/src/main/scala/playground/lsp/converters.scala @@ -1,7 +1,7 @@ package playground.lsp -import cats.implicits._ import cats.parse.LocationMap +import cats.syntax.all.* import com.google.gson.JsonElement import io.circe.Json import io.circe.JsonNumber @@ -19,8 +19,8 @@ import playground.language.TextEdit import playground.smithyql.Position import playground.smithyql.SourceRange -import scala.jdk.CollectionConverters._ -import scala.util.chaining._ +import scala.jdk.CollectionConverters.* +import scala.util.chaining.* object converters { diff --git a/modules/lsp/src/main/scala/playground/lsp/util/KleisliOps.scala b/modules/lsp/src/main/scala/playground/lsp/util/KleisliOps.scala index fef2b7a0..a9e85393 100644 --- a/modules/lsp/src/main/scala/playground/lsp/util/KleisliOps.scala +++ b/modules/lsp/src/main/scala/playground/lsp/util/KleisliOps.scala @@ -2,7 +2,7 @@ package playground.lsp.util import cats.FlatMap import cats.data.Kleisli -import cats.implicits._ +import cats.syntax.all.* import cats.~> object KleisliOps { diff --git a/modules/lsp/src/test/resources/test-workspaces/default/smithy-build.json b/modules/lsp/src/test/resources/test-workspaces/default/smithy-build.json index a2102f0d..3498da9e 100644 --- a/modules/lsp/src/test/resources/test-workspaces/default/smithy-build.json +++ b/modules/lsp/src/test/resources/test-workspaces/default/smithy-build.json @@ -1,7 +1,7 @@ { - "imports": ["./weather.smithy", "./no-runner.smithy"], + "sources": ["./weather.smithy", "./no-runner.smithy"], "mavenDependencies": [ - "com.disneystreaming.alloy:alloy-core:0.2.8", - "com.disneystreaming.smithy4s:smithy4s-protocol:0.17.6" + "com.disneystreaming.alloy:alloy-core:0.3.14", + "com.disneystreaming.smithy4s:smithy4s-protocol:0.18.25" ] } diff --git a/modules/lsp/src/test/scala/playground/lsp/EmptyConfigTests.scala b/modules/lsp/src/test/scala/playground/lsp/EmptyConfigTests.scala index eb04a45f..e791ad6b 100644 --- a/modules/lsp/src/test/scala/playground/lsp/EmptyConfigTests.scala +++ b/modules/lsp/src/test/scala/playground/lsp/EmptyConfigTests.scala @@ -6,7 +6,7 @@ import org.eclipse.lsp4j.DidChangeWatchedFilesParams import org.eclipse.lsp4j.MessageType import playground.lsp.harness.LanguageServerIntegrationTests import playground.lsp.harness.TestClient -import weaver._ +import weaver.* object EmptyConfigTests extends IOSuite with LanguageServerIntegrationTests { diff --git a/modules/lsp/src/test/scala/playground/lsp/LanguageServerIntegrationTestSharedServer.scala b/modules/lsp/src/test/scala/playground/lsp/LanguageServerIntegrationTestSharedServer.scala index b0f4a819..a85b39e2 100644 --- a/modules/lsp/src/test/scala/playground/lsp/LanguageServerIntegrationTestSharedServer.scala +++ b/modules/lsp/src/test/scala/playground/lsp/LanguageServerIntegrationTestSharedServer.scala @@ -2,7 +2,7 @@ package playground.lsp import cats.effect.IO import cats.effect.Resource -import com.comcast.ip4s._ +import com.comcast.ip4s.* import org.eclipse.lsp4j.CodeLensParams import org.eclipse.lsp4j.Command import org.eclipse.lsp4j.CompletionParams @@ -14,47 +14,27 @@ import org.eclipse.lsp4j.Position import org.eclipse.lsp4j.TextDocumentIdentifier import org.http4s.HttpRoutes import org.http4s.ember.server.EmberServerBuilder -import org.http4s.implicits._ +import org.http4s.implicits.* import org.http4s.server.Server import playground.language.Uri import playground.lsp.buildinfo.BuildInfo import playground.lsp.harness.LanguageServerIntegrationTests import playground.lsp.harness.TestClient -import weaver._ +import weaver.* -import scala.concurrent.duration._ -import scala.jdk.CollectionConverters._ +import scala.concurrent.duration.* +import scala.jdk.CollectionConverters.* object LanguageServerIntegrationTestSharedServer extends IOSuite with LanguageServerIntegrationTests { + override protected def checkStartupLogs: Boolean = true + type Res = Fixture def sharedResource: Resource[IO, Res] = makeServer(testWorkspacesBase / "default") - test("server init produces logs consistent with the workspace folder") { f => - val initLogs = List( - TestClient - .MessageLog( - MessageType.Info, - s"Hello from Smithy Playground v${BuildInfo.version}", - ), - TestClient.MessageLog( - MessageType.Info, - "Loaded Smithy Playground server with 2 imports, 2 dependencies and 0 plugins", - ), - ) - - // logs produced during an implicit initialization in the resource setup - f.client.getEvents.map { events => - assert.same( - events, - initLogs, - ) - } - } - test("completions").apply { f => f.server .completion( @@ -94,7 +74,7 @@ object LanguageServerIntegrationTestSharedServer report.getRelatedFullDocumentDiagnosticReport().getItems().asScala.toList assert(diagnosticItems.size == 1) && - assert(diagnosticItems.head.getSeverity() == DiagnosticSeverity.Error) && + assert.same(diagnosticItems.head.getSeverity(), DiagnosticSeverity.Error) && assert(diagnosticItems.head.getMessage.contains("Parsing failure")) } } @@ -250,7 +230,7 @@ object LanguageServerIntegrationTestSharedServer .withPort(port"0") .withShutdownTimeout(Duration.Zero) .withHttpApp { - import org.http4s.dsl.io._ + import org.http4s.dsl.io.* HttpRoutes .of[IO] { case GET -> Root / "weather" / _ => Ok( @@ -312,7 +292,9 @@ object LanguageServerIntegrationTestSharedServer .map { events => assert.eql(events.length, 4) && assert.same(events(0), TestClient.OutputPanelShow) && - assert(events(1).asInstanceOf[TestClient.OutputLog].text.contains("Calling GetWeather")) && + assert( + events(1).asInstanceOf[TestClient.OutputLog].text.contains("Calling GetWeather") + ) && assert(events(2).asInstanceOf[TestClient.OutputLog].text.contains("// HTTP/1.1 GET")) && assert( events(3) diff --git a/modules/lsp/src/test/scala/playground/lsp/LanguageServerReloadIntegrationTests.scala b/modules/lsp/src/test/scala/playground/lsp/LanguageServerReloadIntegrationTests.scala index 5d5c59a0..6fb3d8d5 100644 --- a/modules/lsp/src/test/scala/playground/lsp/LanguageServerReloadIntegrationTests.scala +++ b/modules/lsp/src/test/scala/playground/lsp/LanguageServerReloadIntegrationTests.scala @@ -1,7 +1,7 @@ package playground.lsp import cats.effect.IO -import cats.implicits._ +import cats.syntax.all.* import fs2.io.file.Files import fs2.io.file.Path import org.eclipse.lsp4j.CodeLensParams @@ -13,9 +13,9 @@ import playground.PlaygroundConfig import playground.language.Uri import playground.lsp.harness.LanguageServerIntegrationTests import playground.lsp.harness.TestClient.MessageLog -import weaver._ +import weaver.* -import scala.jdk.CollectionConverters._ +import scala.jdk.CollectionConverters.* object LanguageServerReloadIntegrationTests extends SimpleIOSuite diff --git a/modules/lsp/src/test/scala/playground/lsp/ModelLoaderTests.scala b/modules/lsp/src/test/scala/playground/lsp/ModelLoaderTests.scala index 1c0e9592..91c841c0 100644 --- a/modules/lsp/src/test/scala/playground/lsp/ModelLoaderTests.scala +++ b/modules/lsp/src/test/scala/playground/lsp/ModelLoaderTests.scala @@ -2,11 +2,11 @@ package playground.lsp import playground.PlaygroundConfig import software.amazon.smithy.model.shapes.ShapeId -import weaver._ +import weaver.* import java.util.stream.Collectors -import scala.jdk.CollectionConverters._ -import scala.jdk.OptionConverters._ +import scala.jdk.CollectionConverters.* +import scala.jdk.OptionConverters.* object ModelLoaderTests extends FunSuite { diff --git a/modules/lsp/src/test/scala/playground/lsp/PluginResolverTests.scala b/modules/lsp/src/test/scala/playground/lsp/PluginResolverTests.scala index 50a704f6..bc05b045 100644 --- a/modules/lsp/src/test/scala/playground/lsp/PluginResolverTests.scala +++ b/modules/lsp/src/test/scala/playground/lsp/PluginResolverTests.scala @@ -2,7 +2,7 @@ package playground.lsp import cats.effect.IO import playground.PlaygroundConfig -import weaver._ +import weaver.* object PluginResolverTests extends SimpleIOSuite { test("Empty plugin resolver finds no plugins") { diff --git a/modules/lsp/src/test/scala/playground/lsp/harness/LanguageServerIntegrationTests.scala b/modules/lsp/src/test/scala/playground/lsp/harness/LanguageServerIntegrationTests.scala index fd6b0607..3a92d570 100644 --- a/modules/lsp/src/test/scala/playground/lsp/harness/LanguageServerIntegrationTests.scala +++ b/modules/lsp/src/test/scala/playground/lsp/harness/LanguageServerIntegrationTests.scala @@ -1,18 +1,25 @@ package playground.lsp.harness import cats.effect.IO +import cats.effect.IOLocal import cats.effect.Resource +import cats.syntax.all.* import org.eclipse.lsp4j.InitializeParams +import org.eclipse.lsp4j.MessageType import org.eclipse.lsp4j.WorkspaceFolder import playground.language.Uri import playground.lsp.LanguageServer import playground.lsp.MainServer +import playground.lsp.buildinfo.BuildInfo +import weaver.SourceLocation -import scala.jdk.CollectionConverters._ -import scala.util.chaining._ +import scala.jdk.CollectionConverters.* +import scala.util.chaining.* trait LanguageServerIntegrationTests { + protected def checkStartupLogs: Boolean = false + case class Fixture( server: LanguageServer[IO], client: TestClient[IO], @@ -24,7 +31,7 @@ trait LanguageServerIntegrationTests { ): InitializeParams = new InitializeParams().tap( _.setWorkspaceFolders( List( - new WorkspaceFolder(workspaceDir.value) + new WorkspaceFolder(workspaceDir.value, "test-workspace") ).asJava ) ) @@ -34,16 +41,56 @@ trait LanguageServerIntegrationTests { ): Resource[IO, Fixture] = TestClient.forIO.toResource.flatMap { implicit client => MainServer .makeServer[IO] - .evalTap(_.initialize(initParams(workspaceDir))) - .map { server => - Fixture( + .evalMap { server => + val result = Fixture( server = server, client = client, workspaceDir = workspaceDir, ) + + server.initialize(initParams(workspaceDir)) *> + assertStartupEvents(client) + .as(result) } } + /* + * Note - this should've been a test (and used to). + * For some reason, it no longer worked because logs produced by the initialize call were suddenly being lost after resource initialization. + * The underlying cause for event loss was broken IOLocal propagation in the event of lifting resources to fs2 streams + * (resulting in the resource being acquired step-by-step with multiple fibers). + * + * If the underlying issue is solved, this can again be turned into a test. + */ + private def assertStartupEvents( + client: TestClient[IO] + ): IO[Unit] = client + .getEvents + .flatMap { events => + val initLogs = List( + TestClient + .MessageLog( + MessageType.Info, + s"Hello from Smithy Playground v${BuildInfo.version}! Loading project...", + ), + TestClient.MessageLog( + MessageType.Info, + "Loaded Smithy Playground server with 2 source entries, 0 imports, 2 dependencies and 0 plugins", + ), + ) + IO { + require( + events.size == initLogs.size, + s"Events emitted at startup should've had size ${initLogs.size}, it was " + events.size + " instead", + ) + require( + events == initLogs, + "Events were not as expected, got: " + events, + ) + } + } + .whenA(checkStartupLogs) + def testWorkspacesBase: Uri = Uri.fromUriString( getClass .getResource("/test-workspaces") diff --git a/modules/lsp/src/test/scala/playground/lsp/harness/TestClient.scala b/modules/lsp/src/test/scala/playground/lsp/harness/TestClient.scala index 12a26d6b..8eecd22b 100644 --- a/modules/lsp/src/test/scala/playground/lsp/harness/TestClient.scala +++ b/modules/lsp/src/test/scala/playground/lsp/harness/TestClient.scala @@ -3,7 +3,7 @@ package playground.lsp.harness import cats.data.Chain import cats.effect.IO import cats.effect.IOLocal -import cats.implicits._ +import cats.syntax.all.* import cats.~> import io.circe.Json import org.eclipse.lsp4j.MessageType @@ -12,10 +12,11 @@ import playground.lsp.LanguageClient trait TestClient[F[_]] extends LanguageClient[F] { def getEvents: F[List[TestClient.Event]] + def scoped: F ~> F def withConfiguration( - v: ConfigurationValue.Applied[_]* + v: ConfigurationValue.Applied[?]* ): F ~> F } @@ -42,7 +43,7 @@ object TestClient { ) { def addConfig( - values: ConfigurationValue.Applied[_]* + values: ConfigurationValue.Applied[?]* ): State = copy(configuration = configuration ++ values.map { v => v.cv.key -> v.encoded @@ -115,7 +116,7 @@ object TestClient { } def withConfiguration( - v: ConfigurationValue.Applied[_]* + v: ConfigurationValue.Applied[?]* ): IO ~> IO = new (IO ~> IO) { def apply[T]( @@ -124,7 +125,7 @@ object TestClient { state .modify { old => ( - old.addConfig(v: _*), + old.addConfig(v*), old, ) } diff --git a/modules/parser/src/main/scala/playground/smithyql/parser/Parsers.scala b/modules/parser/src/main/scala/playground/smithyql/parser/Parsers.scala index fd3643c7..1ac00fe7 100644 --- a/modules/parser/src/main/scala/playground/smithyql/parser/Parsers.scala +++ b/modules/parser/src/main/scala/playground/smithyql/parser/Parsers.scala @@ -1,19 +1,19 @@ package playground.smithyql.parser import cats.Defer -import cats.implicits._ import cats.parse.Numbers import cats.parse.Parser import cats.parse.Parser0 import cats.parse.Rfc5234 -import playground.smithyql._ +import cats.syntax.all.* +import playground.smithyql.* object Parsers { type T[+A] = WithSource[A] object tokens { - import Parser._ + import Parser.* val newline: Parser[Unit] = Rfc5234.lf val comment: Parser[Comment] = @@ -155,7 +155,7 @@ object Parsers { object parsers { - import Parser._ + import Parser.* val rawIdent: Parser[String] = tokens.identifier val ident: Parser[T[String]] = tokens.withComments(tokens.identifier) @@ -170,7 +170,7 @@ object Parsers { ( // soft: allows backtracking if hash isn't present (for operation names) - segments.soft ~ (tokens.hash *> tokens.whitespace *> rawIdent), + segments.soft ~ (tokens.hash *> tokens.whitespace *> rawIdent) ).map(QualifiedIdentifier.apply.tupled) }.withContext("qualified_ident") diff --git a/modules/parser/src/main/scala/playground/smithyql/parser/SourceParser.scala b/modules/parser/src/main/scala/playground/smithyql/parser/SourceParser.scala index 7e7d99c2..4ef6a887 100644 --- a/modules/parser/src/main/scala/playground/smithyql/parser/SourceParser.scala +++ b/modules/parser/src/main/scala/playground/smithyql/parser/SourceParser.scala @@ -1,6 +1,5 @@ package playground.smithyql.parser -import cats.implicits._ import cats.kernel.Eq import cats.parse.Parser import cats.parse.Parser.Expectation.EndOfString @@ -8,7 +7,8 @@ import cats.parse.Parser.Expectation.InRange import cats.parse.Parser.Expectation.OneOfStr import cats.parse.Parser.Expectation.WithContext import cats.parse.Parser0 -import playground.smithyql._ +import cats.syntax.all.* +import playground.smithyql.* trait SourceParser[Alg[_[_]]] { diff --git a/modules/parser/src/main/scala/playground/smithyql/parser/v2/scanner.scala b/modules/parser/src/main/scala/playground/smithyql/parser/v2/scanner.scala index 19946228..0f5f9683 100644 --- a/modules/parser/src/main/scala/playground/smithyql/parser/v2/scanner.scala +++ b/modules/parser/src/main/scala/playground/smithyql/parser/v2/scanner.scala @@ -2,7 +2,6 @@ package playground.smithyql.parser.v2.scanner import cats.kernel.Eq import cats.parse.Numbers -import cats.syntax.all.* import scala.annotation.nowarn @@ -135,7 +134,7 @@ object Scanner { // I love this language object jsonNumber { def unapply( - @nowarn("cat=unused") + @nowarn("msg=unused") unused: Unit ): Option[ ( @@ -182,7 +181,7 @@ object Scanner { val eatWhitespace: PartialFunction[Unit, Unit] = { object matches { def unapply( - @nowarn("cat=unused") u: Unit + @nowarn("msg=unused") u: Unit ): Option[ ( String, @@ -240,7 +239,7 @@ object Scanner { readAny .lift(()) .isDefined || - eatErrors(): Unit + eatErrors(): @nowarn("msg=unused value of type Boolean") // last-effort sanity check if (remaining == last) diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/Codecs.scala b/modules/parser/src/test/scala/playground/smithyql/parser/Codecs.scala index 06cdffb8..8c82c7a3 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/Codecs.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/Codecs.scala @@ -1,28 +1,66 @@ package playground.smithyql.parser import io.circe.Codec +import io.circe.Decoder +import io.circe.Encoder +import playground.smithyql.Binding +import playground.smithyql.Comment +import playground.smithyql.Diffs.given +import playground.smithyql.Identifier +import playground.smithyql.InputNode import playground.smithyql.Listed +import playground.smithyql.OperationName +import playground.smithyql.Position import playground.smithyql.Prelude +import playground.smithyql.QualifiedIdentifier import playground.smithyql.Query +import playground.smithyql.QueryOperationName import playground.smithyql.SourceFile +import playground.smithyql.SourceRange +import playground.smithyql.Statement import playground.smithyql.Struct import playground.smithyql.UseClause import playground.smithyql.WithSource object Codecs { - import io.circe.generic.auto._ - import io.circe.generic.semiauto._ + given Codec[Position] = Codec.AsObject.derived + given Codec[Identifier] = Codec.AsObject.derived + given Codec[QualifiedIdentifier] = Codec.AsObject.derived + given Codec[Comment] = Codec.AsObject.derived + given Codec[SourceRange] = Codec.AsObject.derived + given [A: Codec]: Codec[WithSource[A]] = Codec.AsObject.derived - implicit val useClauseWithSourceCodec: Codec[UseClause[WithSource]] = deriveCodec + given Codec[UseClause[WithSource]] = Codec.AsObject.derived - implicit val listedWithSourceCodec: Codec[Listed[WithSource]] = deriveCodec + given Codec[WithSource[InputNode[WithSource]]] = Codec.AsObject.derived - implicit val structWithSourceCodec: Codec[Struct[WithSource]] = deriveCodec + given Codec[InputNode[WithSource]] = Codec.AsObject.derived - implicit val queryWithSourceCodec: Codec[Query[WithSource]] = deriveCodec + // strange thing - somehow doesn't get picked up automatically. + given Codec[List[WithSource[InputNode[WithSource]]]] = Codec.from( + Decoder.decodeList, + Encoder.encodeList, + ) - implicit val preludeWithSourceCodec: Codec[Prelude[WithSource]] = deriveCodec + given Codec[Listed[WithSource]] = Codec.AsObject.derived - implicit val sourceFileWithSourceCodec: Codec[SourceFile[WithSource]] = deriveCodec + given Codec[Binding[WithSource]] = Codec.AsObject.derived + given Codec[Struct.Fields[WithSource]] = Codec.AsObject.derived + + given Codec[Struct[WithSource]] = Codec.AsObject.derived + given Codec[OperationName[WithSource]] = Codec.AsObject.derived + given Codec[QueryOperationName[WithSource]] = Codec.AsObject.derived + given Codec[Query[WithSource]] = Codec.AsObject.derived + + given Codec[Prelude[WithSource]] = Codec.AsObject.derived + + given Codec[Statement[WithSource]] = Codec.AsObject.derived + + given lsw: Codec[List[Statement[WithSource]]] = Codec.from( + Decoder.decodeList, + Encoder.encodeList, + ) + + given Codec[SourceFile[WithSource]] = Codec.AsObject.derived } diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/CommentParsingTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/CommentParsingTests.scala index 97ef3ec1..638fadcf 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/CommentParsingTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/CommentParsingTests.scala @@ -3,7 +3,7 @@ package playground.smithyql.parser import playground.smithyql.Comment import playground.smithyql.SourceFile import playground.smithyql.WithSource -import weaver._ +import weaver.* object CommentParsingTests extends SimpleIOSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/Diffs.scala b/modules/parser/src/test/scala/playground/smithyql/parser/Diffs.scala index 090a1e9a..1367d882 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/Diffs.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/Diffs.scala @@ -1,9 +1,9 @@ package playground.smithyql.parser +import cats.parse.Parser import com.softwaremill.diffx.Diff object Diffs { - import com.softwaremill.diffx.generic.auto._ - - implicit val diffParsingFailure: Diff[ParsingFailure] = Diff.derivedDiff + given Diff[Parser.Error] = Diff.useEquals + given Diff[ParsingFailure] = Diff.derived } diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/ParserSuite.scala b/modules/parser/src/test/scala/playground/smithyql/parser/ParserSuite.scala index 8e65bfc8..95ea1188 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/ParserSuite.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/ParserSuite.scala @@ -1,18 +1,18 @@ package playground.smithyql.parser import cats.effect.IO -import cats.implicits._ +import cats.syntax.all.* import com.softwaremill.diffx.Diff import fs2.io.file.Files import fs2.io.file.Path import io.circe.Codec import io.circe.Decoder -import io.circe.syntax._ -import playground.Assertions._ -import playground.smithyql._ +import io.circe.syntax.* +import playground.Assertions.* +import playground.smithyql.* import playground.smithyql.parser.v2.scanner.Scanner import playground.smithyql.parser.v2.scanner.TokenKind -import weaver._ +import weaver.* import java.nio.file import java.nio.file.NoSuchFileException @@ -120,7 +120,7 @@ trait ParserSuite extends SimpleIOSuite { ): List[TestCase] = { val baseDir = Paths .get(getClass().getResource("/parser-examples").getFile()) - .resolve(file.Path.of(prefix.head, prefix.tail: _*)) + .resolve(file.Path.of(prefix.head, prefix.tail*)) baseDir .toFile diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/ListParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/ListParserTests.scala index bbb62af6..8458527b 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/ListParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/ListParserTests.scala @@ -1,9 +1,10 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite +import playground.smithyql.parser.SourceParser object ListParserTests extends ParserSuite { loadParserTests[Listed]("listed", trimWhitespace = true) diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/PreludeParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/PreludeParserTests.scala index c34b5e54..5f06ffe9 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/PreludeParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/PreludeParserTests.scala @@ -1,8 +1,8 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite object PreludeParserTests extends ParserSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/QueryParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/QueryParserTests.scala index 9b82eae4..f285090c 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/QueryParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/QueryParserTests.scala @@ -1,8 +1,8 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite object QueryParserTests extends ParserSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/SourceFileParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/SourceFileParserTests.scala index 6bb5190e..a812b1bb 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/SourceFileParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/SourceFileParserTests.scala @@ -1,8 +1,8 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite object SourceFileParserTests extends ParserSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/StructParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/StructParserTests.scala index a9ba9005..1eebed2f 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/StructParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/StructParserTests.scala @@ -1,8 +1,8 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite object StructParserTests extends ParserSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/generative/UseServiceParserTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/generative/UseServiceParserTests.scala index ccb8aa67..b463ab0e 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/generative/UseServiceParserTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/generative/UseServiceParserTests.scala @@ -1,8 +1,8 @@ package playground.smithyql.parser.generative -import playground.smithyql.Diffs._ -import playground.smithyql._ -import playground.smithyql.parser.Codecs._ +import playground.smithyql.* +import playground.smithyql.Diffs.given +import playground.smithyql.parser.Codecs.given import playground.smithyql.parser.ParserSuite object UseServiceParserTests extends ParserSuite { diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerExampleTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerExampleTests.scala index d6680264..0b1780d6 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerExampleTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerExampleTests.scala @@ -1,7 +1,7 @@ package playground.smithyql.parser.v2 -import playground.smithyql.parser.v2.scanner.TokenKind._ -import weaver._ +import playground.smithyql.parser.v2.scanner.TokenKind.* +import weaver.* object ScannerExampleTests extends SimpleIOSuite with ScannerSuite { scanTest( diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerSuite.scala b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerSuite.scala index 4c78d373..26862820 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerSuite.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerSuite.scala @@ -1,15 +1,15 @@ package playground.smithyql.parser.v2 import cats.effect.IO -import cats.implicits._ +import cats.syntax.all.* import org.scalacheck.Arbitrary import org.scalacheck.Gen import playground.Assertions import playground.smithyql.parser.v2.scanner.Scanner import playground.smithyql.parser.v2.scanner.Token -import weaver._ +import weaver.* -import Diffs._ +import Diffs.given import Scanner.scan trait ScannerSuite { self: IOSuite => diff --git a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerTests.scala b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerTests.scala index 7b746be0..5766ef72 100644 --- a/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerTests.scala +++ b/modules/parser/src/test/scala/playground/smithyql/parser/v2/ScannerTests.scala @@ -1,23 +1,25 @@ package playground.smithyql.parser.v2 import cats.Show -import cats.implicits._ import cats.parse.Numbers +import cats.syntax.all.* import org.scalacheck.Arbitrary import playground.Assertions import playground.smithyql.parser.v2.scanner.Scanner -import playground.smithyql.parser.v2.scanner.TokenKind._ -import weaver._ +import playground.smithyql.parser.v2.scanner.TokenKind.* +import weaver.* import weaver.scalacheck.Checkers -import Diffs._ +import scala.annotation.nowarn + +import Diffs.given import Scanner.scan object ScannerTests extends SimpleIOSuite with Checkers with ScannerSuite { arbTests("Any string input scans successfully") { implicit arbString => forall { (s: String) => - scan(s): Unit + scan(s): @nowarn("msg=discarded non-Unit value") success } } diff --git a/modules/plugin-core/src/main/scala/playground/plugins/PlaygroundPlugin.scala b/modules/plugin-core/src/main/scala/playground/plugins/PlaygroundPlugin.scala index b192fd6d..22d73a06 100644 --- a/modules/plugin-core/src/main/scala/playground/plugins/PlaygroundPlugin.scala +++ b/modules/plugin-core/src/main/scala/playground/plugins/PlaygroundPlugin.scala @@ -7,7 +7,7 @@ import smithy4s.UnsupportedProtocolError import smithy4s.http4s.SimpleProtocolBuilder import java.util.ServiceLoader -import scala.jdk.CollectionConverters._ +import scala.jdk.CollectionConverters.* trait PlaygroundPlugin { def simpleBuilders: List[SimpleHttpBuilder] @@ -42,7 +42,7 @@ trait SimpleHttpBuilder { object SimpleHttpBuilder { def fromSimpleProtocolBuilder( - builder: SimpleProtocolBuilder[_] + builder: SimpleProtocolBuilder[?] ): SimpleHttpBuilder = new SimpleHttpBuilder { diff --git a/modules/source/src/main/scala/playground/smithyql/StringRangeUtils.scala b/modules/source/src/main/scala/playground/smithyql/StringRangeUtils.scala index 82b26ee2..f628cf2b 100644 --- a/modules/source/src/main/scala/playground/smithyql/StringRangeUtils.scala +++ b/modules/source/src/main/scala/playground/smithyql/StringRangeUtils.scala @@ -1,8 +1,5 @@ package playground.smithyql -import playground.smithyql.Position -import playground.smithyql.SourceRange - // Mostly for testing. object StringRangeUtils { diff --git a/modules/source/src/main/scala/playground/smithyql/WithSource.scala b/modules/source/src/main/scala/playground/smithyql/WithSource.scala index 75a92c41..8004d272 100644 --- a/modules/source/src/main/scala/playground/smithyql/WithSource.scala +++ b/modules/source/src/main/scala/playground/smithyql/WithSource.scala @@ -5,17 +5,15 @@ import cats.Eval import cats.Id import cats.NonEmptyTraverse import cats.Show -import cats.implicits._ import cats.kernel.Eq import cats.kernel.Order +import cats.syntax.all.* import cats.~> -import playground.smithyql.InputNode -import playground.smithyql.Query // todo: multiline final case class Comment( text: String -) extends AnyVal +) object Comment { implicit val eq: Eq[Comment] = Eq.by(_.text) diff --git a/modules/source/src/test/scala/playground/smithyql/Diffs.scala b/modules/source/src/test/scala/playground/smithyql/Diffs.scala index 15a39f50..2807cf5d 100644 --- a/modules/source/src/test/scala/playground/smithyql/Diffs.scala +++ b/modules/source/src/test/scala/playground/smithyql/Diffs.scala @@ -1,27 +1,48 @@ package playground.smithyql +import cats.Id import com.softwaremill.diffx.Diff object Diffs { - import com.softwaremill.diffx.cats._ - import com.softwaremill.diffx.generic.auto._ + import com.softwaremill.diffx.cats.* + import com.softwaremill.diffx.generic.auto.* - implicit val diffSourceRange: Diff[SourceRange] = Diff.derivedDiff + given Diff[Position] = Diff.derived - implicit val diffComment: Diff[Comment] = Diff.derivedDiff + given Diff[SourceRange] = Diff.derived - implicit val diffQualifiedIdentifier: Diff[QualifiedIdentifier] = Diff.derivedDiff + given Diff[Comment] = Diff.derived - implicit val diffUseClause: Diff[UseClause[WithSource]] = Diff.derivedDiff + given Diff[QualifiedIdentifier] = Diff.derived - implicit def diffListedWithSource: Diff[Listed[WithSource]] = Diff.derivedDiff + given [A: Diff]: Diff[WithSource[A]] = Diff.derived - implicit val diffStructWithSource: Diff[Struct[WithSource]] = Diff.derivedDiff + given Diff[UseClause[WithSource]] = Diff.derived - implicit val diffQueryWithSource: Diff[Query[WithSource]] = Diff.derivedDiff + given Diff[InputNode[WithSource]] = Diff.derived - implicit val diffPreludeWithSource: Diff[Prelude[WithSource]] = Diff.derivedDiff + given Diff[Listed[WithSource]] = Diff.derived - implicit val diffSourceFile: Diff[SourceFile[WithSource]] = Diff.derivedDiff + given Diff[NodeKind] = Diff.derived + given Diff[Identifier] = Diff.derived + + given Diff[Binding[WithSource]] = Diff.derived + + given Diff[Struct.Fields[WithSource]] = Diff.derived + + given Diff[Struct[WithSource]] = Diff.derived + + given Diff[OperationName[WithSource]] = Diff.derived + given opNameDiffId: Diff[OperationName[Id]] = Diff.derived + + given Diff[QueryOperationName[WithSource]] = Diff.derived + + given Diff[Query[WithSource]] = Diff.derived + + given Diff[Prelude[WithSource]] = Diff.derived + + given Diff[Statement[WithSource]] = Diff.derived + + given Diff[SourceFile[WithSource]] = Diff.derived } diff --git a/project/build.properties b/project/build.properties index 40b3b8e7..bc739060 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.0 +sbt.version=1.10.3 diff --git a/project/plugins.sbt b/project/plugins.sbt index d88e85f3..816f4c66 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,8 +1,8 @@ addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.11") -addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.4.3") +addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2") // try to keep in sync with smithy-build.json -addSbtPlugin("com.disneystreaming.smithy4s" % "smithy4s-sbt-codegen" % "0.18.1") +addSbtPlugin("com.disneystreaming.smithy4s" % "smithy4s-sbt-codegen" % "0.18.25") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0") addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.1") diff --git a/smithy-build.json b/smithy-build.json index aa1ca5f6..2de3872b 100644 --- a/smithy-build.json +++ b/smithy-build.json @@ -1,8 +1,8 @@ { - "imports": ["modules/core/src/test/smithy"], + "sources": ["modules/core/src/test/smithy"], "mavenDependencies": [ - "com.disneystreaming.alloy:alloy-core:0.2.8", - "com.disneystreaming.smithy4s:smithy4s-protocol:0.18.0", - "software.amazon.smithy:smithy-aws-traits:1.39.1" + "com.disneystreaming.alloy:alloy-core:0.3.14", + "com.disneystreaming.smithy4s:smithy4s-protocol:0.18.25", + "software.amazon.smithy:smithy-aws-traits:1.52.1" ] } diff --git a/vscode-extension/.vscodeignore b/vscode-extension/.vscodeignore index b60188e0..0187dfc7 100644 --- a/vscode-extension/.vscodeignore +++ b/vscode-extension/.vscodeignore @@ -24,3 +24,6 @@ flake.lock .direnv .envrc **/*.d.ts + +fixture +out/test diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 46cdadd8..20751a43 100644 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -2,9 +2,9 @@ "name": "smithy-playground", "displayName": "Smithy Playground", "description": "Experimental integration for queries in the Smithy language.", - "version": "0.2.12", + "version": "0.3.0", "engines": { - "vscode": "^1.69.0" + "vscode": "^1.94.0" }, "publisher": "kubukoz", "repository": { @@ -77,7 +77,7 @@ "smithyql.server.artifact": { "type": "string", "description": "The coordinates to the language server artifact", - "default": "com.kubukoz.playground:lsp_2.13" + "default": "com.kubukoz.playground::lsp" }, "smithyql.server.version": { "type": "string", @@ -105,10 +105,10 @@ "devDependencies": { "@types/mocha": "^10.0.0", "@types/node": "^18.6.2", - "@types/vscode": "^1.69.0", + "@types/vscode": "^1.94.0", "@vscode/test-electron": "^2.2.0", "mocha": "^10.1.0", - "typescript": "^4.7.4", - "vsce": "^2.10.0" + "typescript": "^5.6.3", + "@vscode/vsce": "^3.2.1" } } diff --git a/vscode-extension/project/build.properties b/vscode-extension/project/build.properties deleted file mode 100644 index 563a014d..00000000 --- a/vscode-extension/project/build.properties +++ /dev/null @@ -1 +0,0 @@ -sbt.version=1.7.2 diff --git a/vscode-extension/src/test/suite/index.ts b/vscode-extension/src/test/suite/index.ts index 0d8f00fc..2adbd0f4 100644 --- a/vscode-extension/src/test/suite/index.ts +++ b/vscode-extension/src/test/suite/index.ts @@ -1,6 +1,6 @@ import * as path from "path"; import * as Mocha from "mocha"; -import * as glob from "glob"; +import { glob } from "glob"; export function run(): Promise { // Create the mocha test @@ -14,11 +14,7 @@ export function run(): Promise { const testsRoot = path.resolve(__dirname, ".."); return new Promise((c, e) => { - glob("**/**.test.js", { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - + glob("**/**.test.js", { cwd: testsRoot }).then((files) => { // Add files to the test suite files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); diff --git a/vscode-extension/yarn.lock b/vscode-extension/yarn.lock index c2b234d6..4e604a6f 100644 --- a/vscode-extension/yarn.lock +++ b/vscode-extension/yarn.lock @@ -2,53 +2,266 @@ # yarn lockfile v1 -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@azure/abort-controller@^2.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" + integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== + dependencies: + tslib "^2.6.2" + +"@azure/core-auth@^1.4.0", "@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" + integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.11.0" + tslib "^2.6.2" + +"@azure/core-client@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" + integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "^1.9.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.6.1" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-rest-pipeline@^1.17.0", "@azure/core-rest-pipeline@^1.9.1": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz#55dafa1093553c549ed6d8dbca69aa505c7b3aa3" + integrity sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.8.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.9.0" + "@azure/logger" "^1.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + +"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2" + integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg== + dependencies: + tslib "^2.6.2" + +"@azure/core-util@^1.11.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" + integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g== + dependencies: + "@azure/abort-controller" "^2.0.0" + tslib "^2.6.2" + +"@azure/identity@^4.1.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.5.0.tgz#93ce3757bf761a08cfd05f56ef181435e05b9e1c" + integrity sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.2" + "@azure/core-rest-pipeline" "^1.17.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.11.0" + "@azure/logger" "^1.0.0" + "@azure/msal-browser" "^3.26.1" + "@azure/msal-node" "^2.15.0" + events "^3.0.0" + jws "^4.0.0" + open "^8.0.0" + stoppable "^1.1.0" + tslib "^2.2.0" + +"@azure/logger@^1.0.0": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768" + integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ== + dependencies: + tslib "^2.6.2" + +"@azure/msal-browser@^3.26.1": + version "3.26.1" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.26.1.tgz#2f4368d7997682db30dca52e32fcac363fa0efad" + integrity sha512-y78sr9g61aCAH9fcLO1um+oHFXc1/5Ap88RIsUSuzkm0BHzFnN+PXGaQeuM1h5Qf5dTnWNOd6JqkskkMPAhh7Q== + dependencies: + "@azure/msal-common" "14.15.0" + +"@azure/msal-common@14.15.0": + version "14.15.0" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.15.0.tgz#0e27ac0bb88fe100f4f8d1605b64d5c268636a55" + integrity sha512-ImAQHxmpMneJ/4S8BRFhjt1MZ3bppmpRPYYNyzeQPeFN288YKbb8TmmISQEbtfkQ1BPASvYZU5doIZOPBAqENQ== + +"@azure/msal-node@^2.15.0": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.15.0.tgz#50bf8e692a6656027c073a75d877a8a478aafdfd" + integrity sha512-gVPW8YLz92ZeCibQH2QUw96odJoiM3k/ZPH3f2HxptozmH6+OnyyvKXo/Egg39HAM230akarQKHf0W74UHlh0Q== + dependencies: + "@azure/msal-common" "14.15.0" + jsonwebtoken "^9.0.0" + uuid "^8.3.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@types/mocha@^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" - integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== + version "10.0.9" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.9.tgz#101e9da88d2c02e5ac8952982c23b224524d662a" + integrity sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q== "@types/node@^18.6.2": - version "18.13.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" - integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== + version "18.19.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.60.tgz#3fca49e78e78588ab873af85e2bc2bbb9db8cdc4" + integrity sha512-cYRj7igVqgxhlHFdBHHpU2SNw3+dN2x0VTZJtLYk6y/ieuGN4XiBgtDjYVktM/yk2y/8pKMileNc6IoEzEJnUw== + dependencies: + undici-types "~5.26.4" -"@types/vscode@^1.69.0": - version "1.75.1" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.75.1.tgz#21d16480c04a50a1ceb693ea7577c58f88301579" - integrity sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA== +"@types/vscode@^1.94.0": + version "1.94.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.94.0.tgz#ccd2111b6ecaba6ad4da19c2d524828fa73ae250" + integrity sha512-UyQOIUT0pb14XSqJskYnRwD2aG0QrPVefIfrW1djR+/J4KeFQ0i1+hjZoaAmeNf3Z2jleK+R2hv+EboG/m8ruw== "@vscode/test-electron@^2.2.0": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.2.3.tgz#bf6a77542970b5d34561d0671259900632e5eb94" - integrity sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.4.1.tgz#5c2760640bf692efbdaa18bafcd35fb519688941" + integrity sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ== + dependencies: + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.5" + jszip "^3.10.1" + ora "^7.0.1" + semver "^7.6.2" + +"@vscode/vsce-sign-alpine-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz#4accc485e55aa6ff04b195b47f722ead57daa58e" + integrity sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ== + +"@vscode/vsce-sign-alpine-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz#4a4b7b505b4cc0f58596394897c49a0bce0e540c" + integrity sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw== + +"@vscode/vsce-sign-darwin-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz#10aa69feb7f81a3dc68c242038ca03eaff19c12e" + integrity sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ== + +"@vscode/vsce-sign-darwin-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz#3315528f3ea1007a648b3320bff36a33a9e07aa5" + integrity sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw== + +"@vscode/vsce-sign-linux-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz#ce5c5cfc99e3454b4fb770405812b46bd6dca870" + integrity sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA== + +"@vscode/vsce-sign-linux-arm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz#4142fda83e7130b31aedd8aa81e4daa6334323c2" + integrity sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ== + +"@vscode/vsce-sign-linux-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz#59ab93f322efb3cf49166d4e2e812789c3117428" + integrity sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg== + +"@vscode/vsce-sign-win32-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz#d095704a14b0404c0b6f696e9889e9a51b31a86c" + integrity sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ== + +"@vscode/vsce-sign-win32-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz#294ea72b44fedd694d49f5cef4c55bf3876dc257" + integrity sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg== + +"@vscode/vsce-sign@^2.0.0": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign/-/vsce-sign-2.0.5.tgz#8850036476dc0d4e080d9c2d8325e3e97eff5193" + integrity sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q== + optionalDependencies: + "@vscode/vsce-sign-alpine-arm64" "2.0.2" + "@vscode/vsce-sign-alpine-x64" "2.0.2" + "@vscode/vsce-sign-darwin-arm64" "2.0.2" + "@vscode/vsce-sign-darwin-x64" "2.0.2" + "@vscode/vsce-sign-linux-arm" "2.0.2" + "@vscode/vsce-sign-linux-arm64" "2.0.2" + "@vscode/vsce-sign-linux-x64" "2.0.2" + "@vscode/vsce-sign-win32-arm64" "2.0.2" + "@vscode/vsce-sign-win32-x64" "2.0.2" + +"@vscode/vsce@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-3.2.1.tgz#7bfa869ea43fe7d787f09e164f0f0e239df8fb1d" + integrity sha512-AY9vBjwExakK1c0cI/3NN2Ey0EgiKLBye/fxl/ue+o4q6RZ7N+xzd1jAD6eI6eBeMVANi617+V2rxIAkDPco2Q== dependencies: - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - rimraf "^3.0.2" - unzipper "^0.10.11" + "@azure/identity" "^4.1.0" + "@vscode/vsce-sign" "^2.0.0" + azure-devops-node-api "^12.5.0" + chalk "^2.4.2" + cheerio "^1.0.0-rc.9" + cockatiel "^3.1.2" + commander "^6.2.1" + form-data "^4.0.0" + glob "^11.0.0" + hosted-git-info "^4.0.2" + jsonc-parser "^3.2.0" + leven "^3.1.0" + markdown-it "^14.1.0" + mime "^1.3.4" + minimatch "^3.0.3" + parse-semver "^1.1.1" + read "^1.0.7" + semver "^7.5.2" + tmp "^0.2.3" + typed-rest-client "^1.8.4" + url-join "^4.0.1" + xml2js "^0.5.0" + yauzl "^2.3.1" + yazl "^2.2.2" + optionalDependencies: + keytar "^7.7.0" -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== dependencies: - debug "4" + debug "^4.3.4" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 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-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -63,6 +276,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -76,10 +294,15 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -azure-devops-node-api@^11.0.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz#bf04edbef60313117a0507415eed4790a420ad6b" - integrity sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +azure-devops-node-api@^12.5.0: + version "12.5.0" + resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz#38b9efd7c5ac74354fe4e8dbe42697db0b8e85a5" + integrity sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og== dependencies: tunnel "0.0.6" typed-rest-client "^1.8.4" @@ -94,23 +317,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big-integer@^1.6.17: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - 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== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3: version "4.1.0" @@ -121,10 +331,14 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== +bl@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^3.4.0" boolbase@^1.0.0: version "1.0.0" @@ -147,13 +361,13 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" 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== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -163,10 +377,10 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer@^5.5.0: version "5.7.1" @@ -176,31 +390,30 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -218,6 +431,11 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0, chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + cheerio-select@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" @@ -231,22 +449,26 @@ cheerio-select@^2.1.0: domutils "^3.0.1" cheerio@^1.0.0-rc.9: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + version "1.0.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81" + integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww== dependencies: cheerio-select "^2.1.0" dom-serializer "^2.0.0" domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" + domutils "^3.1.0" + encoding-sniffer "^0.2.0" + htmlparser2 "^9.1.0" + parse5 "^7.1.2" parse5-htmlparser2-tree-adapter "^7.0.0" + parse5-parser-stream "^7.1.2" + undici "^6.19.5" + whatwg-mimetype "^4.0.0" -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -263,6 +485,18 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + +cli-spinners@^2.9.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -272,6 +506,11 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cockatiel@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.2.1.tgz#575f937bc4040a20ae27352a6d07c9c5a741981f" + integrity sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -296,7 +535,14 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^6.1.0: +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -311,6 +557,15 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cross-spawn@^7.0.0: + 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" + css-select@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" @@ -327,12 +582,12 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -debug@4, debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.3.4, debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" @@ -351,15 +606,34 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dom-serializer@^2.0.0: version "2.0.0" @@ -375,34 +649,57 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== +domutils@^3.0.1, domutils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: - readable-stream "^2.0.2" + safe-buffer "^5.0.1" + +emoji-regex@^10.2.1: + version "10.4.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== 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== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding-sniffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5" + integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg== + dependencies: + iconv-lite "^0.6.3" + whatwg-encoding "^3.1.1" + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -410,31 +707,43 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -447,14 +756,14 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -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== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -find-up@5.0.0: +find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -467,6 +776,23 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -478,38 +804,30 @@ fs.realpath@^1.0.0: 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== - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" github-from-package@0.0.0: version "0.0.0" @@ -523,34 +841,35 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" -glob@^7.0.6, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.2.2: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" has-flag@^3.0.0: version "3.0.0" @@ -562,19 +881,31 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" -he@1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -586,38 +917,49 @@ hosted-git-info@^4.0.2: dependencies: lru-cache "^6.0.0" -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== dependencies: domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" + agent-base "^7.1.0" + debug "^4.3.4" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== dependencies: - agent-base "6" + agent-base "^7.0.2" debug "4" -ieee754@^1.1.13: +iconv-lite@0.6.3, iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -626,7 +968,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -643,6 +985,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -660,6 +1007,11 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -675,18 +1027,107 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -js-yaml@4.1.0: +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015" + integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + dependencies: + "@isaacs/cliui" "^8.0.2" + +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" +jsonc-parser@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + +jsonwebtoken@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + keytar@^7.7.0: version "7.9.0" resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb" @@ -700,17 +1141,19 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -linkify-it@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" - integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: - uc.micro "^1.0.1" + immediate "~3.0.5" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" locate-path@^6.0.0: version "6.0.0" @@ -719,7 +1162,42 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -log-symbols@4.1.0: +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +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== @@ -727,6 +1205,19 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-symbols@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== + dependencies: + chalk "^5.0.0" + is-unicode-supported "^1.1.0" + +lru-cache@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.1.tgz#3a732fbfedb82c5ba7bca6564ad3f42afcb6e147" + integrity sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -734,103 +1225,113 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -markdown-it@^12.3.2: - version "12.3.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" - integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== +markdown-it@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== dependencies: argparse "^2.0.1" - entities "~2.1.0" - linkify-it "^3.0.1" - mdurl "^1.0.1" - uc.micro "^1.0.5" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +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@^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@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.3: 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@^5.1.0: +minimatch@^5.0.1, minimatch@^5.1.0, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -"mkdirp@>=0.5 0": - 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" - mocha@^10.1.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -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== - -ms@2.1.3: + version "10.7.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" + integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -840,20 +1341,15 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== node-abi@^3.3.0: - version "3.33.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" - integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== + version "3.71.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.71.0.tgz#52d84bbcd8575efb71468fbaa1f9a49b2c242038" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== dependencies: semver "^7.3.5" @@ -874,10 +1370,10 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -886,6 +1382,37 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: 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" + +open@^8.0.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +ora@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930" + integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw== + dependencies: + chalk "^5.3.0" + cli-cursor "^4.0.0" + cli-spinners "^2.9.0" + is-interactive "^2.0.0" + is-unicode-supported "^1.3.0" + log-symbols "^5.1.0" + stdin-discarder "^0.1.0" + string-width "^6.1.0" + strip-ansi "^7.1.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -900,6 +1427,16 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parse-semver@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8" @@ -908,29 +1445,44 @@ parse-semver@^1.1.1: semver "^5.1.0" parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" + integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== dependencies: - domhandler "^5.0.2" + domhandler "^5.0.3" parse5 "^7.0.0" -parse5@^7.0.0: +parse5-parser-stream@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1" + integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== dependencies: - entities "^4.4.0" + parse5 "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.2.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" 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: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" pend@~1.2.0: version "1.2.0" @@ -943,9 +1495,9 @@ picomatch@^2.0.4, picomatch@^2.2.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== prebuild-install@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" @@ -966,19 +1518,24 @@ process-nextick-args@~2.0.0: integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 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== + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + qs@^6.9.1: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" randombytes@^2.1.0: version "2.1.0" @@ -1004,10 +1561,19 @@ read@^1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@^2.0.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -1017,15 +1583,6 @@ readable-stream@^2.0.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, 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" @@ -1038,19 +1595,13 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: - glob "^7.1.3" + onetime "^5.1.0" + signal-exit "^3.0.2" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" @@ -1062,43 +1613,81 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== semver@^5.1.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.2: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== - dependencies: - lru-cache "^6.0.0" +semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4, semver@^7.6.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -setimmediate@~1.0.4: +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +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== + +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +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== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-concat@^1.0.0: version "1.0.1" @@ -1114,6 +1703,27 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" +stdin-discarder@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== + dependencies: + bl "^5.0.0" + +stoppable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" + integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== + +"string-width-cjs@npm:string-width@^4.2.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-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -1123,6 +1733,24 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" + integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^10.2.1" + strip-ansi "^7.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" @@ -1137,6 +1765,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm: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" + 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" @@ -1144,7 +1779,14 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@3.1.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -1154,13 +1796,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1175,6 +1810,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -1196,12 +1838,10 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" +tmp@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-regex-range@^5.0.1: version "5.0.1" @@ -1210,10 +1850,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== +tslib@^2.2.0, tslib@^2.6.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== tunnel-agent@^0.6.0: version "0.6.0" @@ -1228,44 +1868,38 @@ tunnel@0.0.6: integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== typed-rest-client@^1.8.4: - version "1.8.9" - resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.9.tgz#e560226bcadfe71b0fb5c416b587f8da3b8f92d8" - integrity sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g== + version "1.8.11" + resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.11.tgz#6906f02e3c91e8d851579f255abf0fd60800a04d" + integrity sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA== dependencies: qs "^6.9.1" tunnel "0.0.6" underscore "^1.12.1" -typescript@^4.7.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== underscore@^1.12.1: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^6.19.5: + version "6.20.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.20.1.tgz#fbb87b1e2b69d963ff2d5410a40ffb4c9e81b621" + integrity sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA== url-join@^4.0.1: version "4.0.1" @@ -1277,31 +1911,10 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vsce@^2.10.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/vsce/-/vsce-2.15.0.tgz#4a992e78532092a34a755143c6b6c2cabcb7d729" - integrity sha512-P8E9LAZvBCQnoGoizw65JfGvyMqNGlHdlUXD1VAuxtvYAaHBKLBdKPnpy60XKVDAkQCfmMu53g+gq9FM+ydepw== - dependencies: - azure-devops-node-api "^11.0.1" - chalk "^2.4.2" - cheerio "^1.0.0-rc.9" - commander "^6.1.0" - glob "^7.0.6" - hosted-git-info "^4.0.2" - keytar "^7.7.0" - leven "^3.1.0" - markdown-it "^12.3.2" - mime "^1.3.4" - minimatch "^3.0.3" - parse-semver "^1.1.1" - read "^1.0.7" - semver "^5.1.0" - tmp "^0.2.1" - typed-rest-client "^1.8.4" - url-join "^4.0.1" - xml2js "^0.4.23" - yauzl "^2.3.1" - yazl "^2.2.2" +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== vscode-jsonrpc@8.1.0: version "8.1.0" @@ -1330,10 +1943,38 @@ vscode-languageserver-types@3.17.3: resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +which@^2.0.1: + 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" + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" @@ -1344,15 +1985,24 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + 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== -xml2js@^0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== dependencies: sax ">=0.6.0" xmlbuilder "~11.0.0" @@ -1372,17 +2022,12 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -1392,7 +2037,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==