Skip to content

Releases: 7mind/izumi

0.10.9

24 May 23:01
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Changes since 0.10.8

distage-testkit:

  • Smart merging of memoization environments by @Caparow (#1072)
    distage-testkit allows designating components as memoization roots, these 'memoized' components will then be instantiated just before all tests start and shared between them. In practice, because TestConfig allows overriding component implementations and changing dependency injection parameters, memoized components couldn't be safely shared between tests with different TestConfigs; to mitigate that, nearly any difference in TestConfig fields between tests would result in creation of a separate memoization environment that would reacquire global resources again. This split of memoization environments meant it was hard to ensure global sharing and easy to break it. e.g. by using TestConfig#moduleOverrides to override a component implementation within a suite.
    • New smart merging strategy solved this brittleness by changing the criteria for splitting into multiple environments. Instead of splitting by the input (TestConfig) in fear of potential changes to the output (the shared components sub-graph), we first compute the dependency injection plan for all TestConfigs and then compare the results - if the plans are equal we can safely conclude that the output object graphs will be equal as well and merge the memoization environments. In practice this means that now, inversely, nearly all changes to TestConfig will NOT cause global component sharing to break, unless they directly affect the memoization root components OR their dependencies.
  • Added option to specify a fixed level of parallelism for tests, suites and memoization environments in TestConfig in addition to unlimited parallelism / sequential only execution. by @Caparow (#1064)
  • New logs were added to enumerate the memoization environments and the suite classes included in them.

distage-framework-docker:

  • Randomized port numbers are now passed into docker containers as environment variables of form export DISTAGE_PORT_TCP_8080=38553 where 8080 is the exposed port. by @Caparow (#1079)
  • Added ElasticMQDocker for softwaremill/elasticmq as a usage example for port environment variables. by @Caparow (#1079)
  • ContainerConfig#cmd was renamed ContainerConfig#entrypoint by @Caparow (#1079)
  • Use default Docker.ClientConfig if docker config section is not found instead of failing (#1075)
  • DockerContainerModule was renamed to DockerSupportModule (#1070)

distage-extension-config:

  • Add makeConfigWithDefault, wireConfig, wireConfigWithDefault to ConfigModuleDef (#1075)

distage-core:

  • GCMode was renamed to Roots (#1059)
  • add DIKey.apply short-hand (write DIKey[T]/DIKey[T]("x") instead of DIKey.get[T]/DIKey.get[T].named("x")) (#1059)

Pull requests merged since 0.10.8:

  • distage-testkit-scalatest: Add ability to alter test discovery configuration in SBT runner (#1080)
  • distage-testkit-docker: Pass bind ports into container env. Fix entrypoint builder. (#1079)
  • distage-testkit: add config for parallelism level (#1078)
  • distage-testkit: Fix merged environments mixing up correct Activations for tests (#1077)
  • Remove deprecated method addImplicit[T](name) (replaced by addImplicit[T].named(name)) (#1076)
  • remove inter-test dependencies on distage-core/test module to build more modules in parallel (#1064)
  • distage-testkit: Add TestConfig#debugOutput, rename TestConfig#testRunnerLogLevel->logLevel, choose lowest logLevel among all tests envs for test runner logs (allow silencing config load log). (#1074)
  • distage-framework-docker: Use default Docker.ClientConfig if dockerconfig section is not found, add makeConfigWithDefault, wireConfig, wireConfigWithDefault to ConfigModuleDef (#1075)
  • distage-testkit: Smart memoization group merging. (#1072)
  • Add BIOParallel to ZIODIEffectModule
  • Use FiniteDuration in PortCheck instead (#1071)
  • distage-framework-docker: rename DockerContainerModule to DockerSupportModule (#1070)
  • Rename PortCheck#timeout to PortCheck#timeoutMillis (#1069)
  • Update zio to 1.0.0-RC19-2 (#1068)
  • distage-framework-docker: alias Config object in ContainerDef/NetworkDef to not force imports of ContainerConfig (#1065)
  • Rename GCMode to Roots (#1059)
  • Update izumi-reflect to 1.0.0-M2 (#1062)

0.10.8

18 May 01:01
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Changes since 0.10.7

all:

  • Updated to ZIO 1.0.0-RC19 & Scala.js 1.0

BIO:

  • New BIOParallel typeclass courtesy of @Adriani277 !
  • parTraverse* methods have been moved from BIOAsync to BIOParallel
  • Added tailRecM method to BIOMonad by @Adriani277

The current BIO hierarchy now looks like this:

image

fundamentals-reflection:

  • Tag is now shared with izumi-reflect, not duplicated in fundamentals-reflection. Replace imports for import izumi.fundamentals.reflection.Tags.Tag* with import izumi.reflect.Tag* if any.

Pull requests merged since 0.10.7:

  • Squash microsite URLs - move /latest/release/doc/distage/ to /distage/ (#1061)
  • Update to ZIO RC19 (#1060)
  • Add @open annotation to fundamentals-platform (#1053)
  • Silence 2.13 collection warnings (#1027)
  • BIO: remove all redundant variances on typeclass instance methods (#1052)
  • Split ZIO BIOLocal instance from BIOAsync (#1045)
  • Add bio parallel syntax (#1041)
  • Added tailRecM to BIOMonad (#1043)
  • Fix Throwable errors being wrapped in BIOBadBranch in BIORunner#unsafeRun (#1040)
  • Add StringRenderingPolicy constructors to RenderingPolicy companion object (#1038)
  • Add cats Parallel (#1035)
  • Remove methods deprecated since 0.10.3, 0.10.5 (#1037)
  • Remove ModuleBase#Self type member, use implicit priority-based scheme instead (#1036)
  • Added zipWithPar and derived zipPar, zipParLeft and zipParRight (#1029)

0.10.7

30 Apr 20:14
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Pull requests merged since 0.10.6:

distage-core:

  • Make arguments for DIResource.Of/OfCats/OfZIO by-name, to workaround scala/bug#11969 (#1026)
  • Allow access to internal state of Locator through LocatorRef if you really need it (#984)

0.10.6

22 Apr 19:11
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Changes since 0.10.5

distage:

  • Can now chain .aliased after addImplicit, as in
    addImplicit[Monad[F]].aliased[Applicative[F]].aliased[Functor[F]]
  • distage-testkit-scalatest: Fix a case when a test could fail to launch in sbt test, if it was inherited from DistageAbstractScalatestSpec indirectly through a subclass from another library jar.

Pull requests merged since 0.10.5:

  • Fix #985 allow using .aliased & .named after addImplicit[T] in ModuleDef (#1013)
  • fix scanner (#1017)

0.10.5

20 Apr 00:14
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Pull requests merged since 0.10.4:

  • distage-testkit: Fix recorded test error messages in sbt reports, scalatest xml reports, etc. (#1011)
  • fix idea/sbt tests reports (#1009)

v0.10.4

20 Apr 09:19
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Pull requests merged since 0.10.3:

  • Update magnolia to 0.15.0 (#1007)
  • Update cats-effect to 2.1.3 (#1005)
  • Update classgraph to 4.8.71 (#1008)

0.10.3

20 Apr 09:24
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Changes since 0.10.3-M2:

distage-framework-docker:

  • remote docker connectivity fix
  • docker startup timeout added so the tests wouldn't lock forever on bad but running containers
  • API: changed type of field DockerContainer#availablePorts - it's now a case class containing a NonEmptyList

Pull requests merged since 0.10.3-M2:

  • proper concatenation of Message (#987)
  • add d4s as related to Izumi library. (#988)

0.10.3-M2

03 Apr 14:02
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Pull requests merged since 0.10.3-M1:

  • Document LogstageZIO.log ZIO env accessor; add LogIO.log for accessing implicit logger without naming a variable, added LogBIOEnv.make & LogBIOEnv.log for tagless final environment access (#978)
  • Document logstage.strict mode, Correctly find LogstageCodec[T] instance in logstage.strict loggers when argument is an expression (#980)
  • Add BIOBracket.guaranteeCase, add syntax for bracketCase (#982)
  • Add LogIOModule, LogBIOModule, LogBIO3Module in distage-extension-logstage (#981)
  • Stop publishing for 2.11 (#979)

0.10.3-M1

24 Mar 00:58
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Pull requests merged since 0.10.2:

  • distage-framework-docker: Revert to deleting file locks for reused containers on exit, instead of as soon as possible (#971)
  • Detach BIOBifunctor into a new hierarchy root (BIOApplicative no longer inherits BIOBifunctor) (#969)
  • BIO: ambiguous implicit bug on wildcard import (#967)

0.10.2

19 Mar 03:00
Compare
Choose a tag to compare

Izumi

What is it?

Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
  3. distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to scala-reflect's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty
  7. IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
  8. Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
  9. Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Changes since 0.10.1

Changes in BIO:

  • All bifunctor classes have been lifted to become trifunctor classes, Bifunctor classes are now type aliases to trifunctor classes that use type
    lambdas ignoring the first parameter. Added BIOFunctor3, BIOBifunctor3, BIOApplicative3, BIOMonad3, BIOGuarantee3, BIOError3,
    BIOMonadError3, BIOBracket3, BIOPanic3, BIO3, BIOAsync3, BIOTemporal3, BIOFork3 (#942)
  • All trifunctor typeclasses will be automatically adapted to bifunctor typeclasses when required
  • Added Reader trifunctor hierarchy - BIOAsk, BIOMonadAsk, BIOLocal
  • Added Arrow trifunctor hierarchy - BIOProfunctor, BIOArrow, BIOArrowChoice
  • Side hierarchies do not cause ambiguous implicit errors. It’s legal to have both BIOMonad3 and BIOMonadAsk as constraints, despite that BIOMonadAsk provides a BIOMonad3.
  • Added microsite section for BIO

Changes in distage:

  • Updated to ZIO RC18-2, Added HasConstructor for assembling zio.Has environments from the object graph.
    Added make[_].fromHas(_) syntax for injection into ZIO environment for ZLayer, ZManaged, ZIO or any F[_, _, _]: BIOLocal:
    You can now use:
    new ModuleDef {
      make[X].fromHas(zioEnvCtor)
      // or
      make[X].fromHas(zmanagedEnvCtor)
      // or
      make[X].fromHas(zlayerEnvCtor)
    }
    
    def zioEnvCtor: URIO[Has[Dep1] with Has[Dep2],X]
    def zmanagedEnvCtor: URManaged[Has[Dep1] with Has[Dep2],X]
    def zlayerEnvCtor: URLayer[Has[Dep1] with Has[Dep2],X]
    You can also use environment and parameter dependencies at the same time in one constructor:
    make[X].fromHas(zioArgEnvCtor _)
    
    def zioArgEnvCtor(a: Arg1, b: Arg): RIO[Has[Dep1], X]
  • distage-extension-config now uses pureconfig instead of circe-config as backend - increased compatibility with HOCON (#905)
  • Added new syntax: Injector.produceRunF, Injector.produceEvalF and DIResource[Locator].run (#930)
  • Rename DIResource.logAcquire/logRelease to wrapAcquire/wrapRelease, deprecate old names (#949)
  • Added DIResource.suspend, .flatten, .evalTap (#875)
  • Fixed a bug where a binding could have broken equality and be filtered out after ProviderMagnet.map & ProviderMagnet.addUnused (#956)
  • All *Constructor summoners now directly return ProviderMagnet instead of their wrapper

Changes in distage-framework-docker:

  • Fixed a bug where docker containers with configuration reuse=true could be started multiple times if they were started at the same time (#961)
  • Docker network names are now also randomized, together with as ports and names. Added ContainerNetworkDef DSL to configure Docker networks (#963)
  • Added Bundled Docker containers for Cassandra and Zookeeper+Kafka (with network configuration) (#939)
  • Fixed a bug where ClientConfig.reuse configuration was ignored in ContainerResource's release action (#924)

Changes in distage-testkit-scalatest:

  • Fix compatibility with Scalatest Matchers and Scalamock's MockFactory traits, now they can be mixed in without errors (#959)
  • Prevent accidental ignoring of tests when test effect type doesn't match current (#948)
  • Added TestConfig.parallelEnvs - allows control on whether to run tests in the current test environment in parallel with other test environments or not. If false, runs the test environment in a separate sequential with no other tests running in parallel (#912)
  • Added TestConfig.forcedRoots - forcibly attaches specified keys to every test as if these components are summoned as arguments in each test, can be used to force acquire/release actions on resources in tests (#912)
  • Added DistageBIOEnvSpecScalatest[F[_, _, _]] syntax flavor, allows each test case to summon dependencies using ZIO environment and/or function parameters:
      trait PetStore[F[_, _]] {
        def purchasePet(name: String, cost: Int): F[Throwable, Boolean]
      }
      trait Pets[F[_, _]]
        def myPets: F[Throwable, List[String]]
      }
      val store = new PetStore[ZIO[Has[PetStore], ?, ?]] {
        def purchasePet(name: String, cost: Int): RIO[Has[PetStore], Boolean] = ZIO.accessM(_.get.purchasePet(name, cost))
      }
      val pets = new Pets[ZIO[Has[Pets], ?, ?]] {
        def myPets: RIO[Has[Pets], List[String]] = ZIO.accessM(_.get.myPets)
      }
    
      final class PetTest extends DistageBIOEnvSpecScalatest[ZIO] with AssertIO {
        "test purchase pets env" in {
          for {
            _    <- store.purchasePet("Zab", 213)
            pets <- pets.myPets
            _    <- assertIO(pets.contains("Zab"))
          } yield ()
          // : ZIO[Has[PetStore] with Has[Pets], Throwable, Unit]
        }
    
        // Lambda parameters and environment may both be used at the same time to define dependencies:
        "test purchase pets (param+env)" in {
          (store: PetStore[IO]) =>
            for {
              _    <- store.purchasePet("Zab", 213)
              pets <- pets.myPets
              _    <- assertIO(pets.contains("Zab"))
            } yield ())
            // : ZIO[Has[Pets], Throwable, Unit]
        }
      }

Changes in distage-framework:

  • Now Activations are also read from config, not only from command line. Use activations to choose between implementations to use for a component: (#911)
       val module = new ModuleDef {
         make[PetStore[IO]].tagged(Repo.Dummy).from[InmemoryPetStore[IO]]
         make[PetStore[IO]].tagged(Repo.Prod).from[PostgresPetStore[IO]]
       }
    Toggle in Injector(Activation(Repo -> Repo.Prod)), or in configuration:
    // application.conf
    activation {
      repo: prod
    }
    
  • Rename ConfigReader->DIConfigReader. Rename DistageRolesModule->BundledRolesModule. (#911)
  • Add application.conf to default configs in distage-framework (#909)

Changes in LogStage:

  • You can now customize JSON Rendering behavior on a per-type basis by defining instances of LogstageCodec[A] typeclass for your types.
    LogstageCodec can be derived in semiauto mode from Circe codecs if they exist:
      import io.circe.Codec
      import logstage.LogstageCodec
      import logstage.circe.LogstageCirceCodec
    
      final case class Abc(a: Int, b: String, c: Boolean)
      object Abc {
        implicit val circeCodec: Codec[Abc] = io.circe.derivation.deriveCodec[Abc]
        implicit val logstageCodec: LogstageCodec[Abc] = LogstageCirceCodec.derived[Abc]
      }
    When using logstage.LogIO/IzLogger API, arguments without a LogstageCodec instance will be rendered to JSON
    as before. To forbid using any arguments without a LogstageCodec instance in logging interpolations use
    logstage.strict.LogIOStrict/IzLoggerStrict APIs.
  • Added LogstageZIO.log environment forwarder, you can use it to forward calls to a LogBIO[IO] instance in your ZIO Environment
  • Added LogBIO3 algebra for trifunctor effect types

Changes in fundamentals-json-circe:

  • Add WithCirce class...
Read more