Changelog
0.15.0
:tada: This release contains work from a new contributor! :tada:
Thank you, null@brocollie08, for all your work!
Release Notes
BailHook default handler (#33)
Allows for SyncBailHook
to call with a default handler for when the taps do not bail and return nothing
🚀 Enhancement
- BailHook default handler #33 (@brocollie08)
Authors: 1
0.14.1
0.14.0
Release Notes
make tap info mutable (#31)
Add data class
APIs to TapInfo
such that it can be mutated.
scope version properties to avoid conflicts (#30)
Scope metadata b/c it was conflicting w/ another Gradle plugin
🚀 Enhancement
- make tap info mutable #31 (@sugarmanz)
🐛 Bug Fix
- scope version properties to avoid conflicts #30 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.13.0
Release Notes
New Hooks DSL (#29)
💥 Breaking Change 💥
Relax typing specification when using the DSL. Hooks should always use the Hook
superclass as the specified type and rely solely on the annotation to specify the actual constraints of the hook:
abstract class CarHooks : Hooks() {
@Sync<() -> Unit>
abstract val brake: Hook
@Sync<(newSpeed: Int) -> Unit>
abstract val accelerate: Hook
}
🚀 Enhancement
- New Hooks DSL #29 (@stabbylambda)
Authors: 1
- David Stone (@stabbylambda)
0.12.1
🐛 Bug Fix
- Switch to KotlinPoet Code Generation #28 (@sugarmanz @stabbylambda)
Authors: 2
- David Stone (@stabbylambda)
- Jeremiah Zucker (@sugarmanz)
0.12.0
Release Notes
Migrate from Arrow Meta to Kotlin Symbol Processor (#24)
💥 This is a breaking change 💥
Migration to KSP from Arrow Meta because they dropped support for source generation. This does improve the overall maturity of the codegen module (compiler-plugin
-> processor
). However, the KSP framework doesn't support the code typing introspection that we were doing in Arrow Meta. Instead, we have to rely strictly on typings and annotations, which changes the DSL we originally had.
internal abstract class GenericHooks : Hooks() {
@Sync<(newSpeed: Int) -> Unit> abstract val sync: SyncHook<*>
@SyncBail<(Boolean) -> BailResult<Int>> abstract val syncBail: SyncBailHook<*, *>
@SyncLoop<(foo: Boolean) -> LoopResult> abstract val syncLoop: SyncLoopHook<*, *>
@SyncWaterfall<(name: String) -> String> abstract val syncWaterfall: SyncWaterfallHook<*, *>
@AsyncParallelBail<suspend (String) -> BailResult<String>> abstract val asyncParallelBail: AsyncParallelBailHook<*, *>
@AsyncParallel<suspend (String) -> Int> abstract val asyncParallel: AsyncParallelHook<*>
@AsyncSeries<suspend (String) -> Int> abstract val asyncSeries: AsyncSeriesHook<*>
@AsyncSeriesBail<suspend (String) -> BailResult<String>> abstract val asyncSeriesBail: AsyncSeriesBailHook<*, *>
@AsyncSeriesLoop<suspend (String) -> LoopResult> abstract val asyncSeriesLoop: AsyncSeriesLoopHook<*, *>
@AsyncSeriesWaterfall<suspend (String) -> String> abstract val asyncSeriesWaterfall: AsyncSeriesWaterfallHook<*, *>
}
🚀 Enhancement
- Migrate from Arrow Meta to Kotlin Symbol Processor #24 (@sugarmanz)
⚠️ Pushed to main
- forgot this for shot in the dark (@sugarmanz)
- more reversions (@sugarmanz)
- revert breaking build changes (@sugarmanz)
- shot in the dark (@sugarmanz)
- try to fix gradle crashing on release (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.11.1
Release Notes
Add explicit visibility to satisfy Kotlin explicit API check (#20)
Generated source code will adhere to Kotlin explicit API check if hooks are public
.
🐛 Bug Fix
- Add explicit visibility to satisfy Kotlin explicit API check #20 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.11.0
Release Notes
Untap support & various fixes (#19)
Small fixes
- Fix Gradle generation params
- Modify async hook strategy to not take a scope, as this is already required to call the
suspend
method - Fix
AsyncParallelHook
to actually suspend properly until all callbacks complete - Replace mutable list containing
TapInfo
with a mutablevar
containing an immutable list (this fixes an issue when tapping a hook that is currently being called:ConcurrentModificationException
)
Untapping
In order to allow calling sites to unregister stale callbacks and prevent memory leaks, the tap
API now returns a String
representing the ID of the specific "tap". The ID can then be passed into the new untap
API to remove the callback from the hook. This ID can be randomly generated or manually passed when tapping a hook. Manually passing an ID is useful for when the tapper wants to replace a stale callback without calling needing to untap
explicitly.
🚀 Enhancement
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.10.2
Release Notes
Format generated source with KtLint (#18)
What Changed
Format generated source with KtLint
0.10.1
Release Notes
manually bump version snapshot (#17)
🐛 Bug Fix
- manually bump version snapshot #17 (@sugarmanz)
- enhance class name and path generation strategy #17 (@sugarmanz)
- enhance hooks dsl detection and change example to use nested class #17 (@sugarmanz)
- use fully qualified path for superclass #17 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.10.0
Release Notes
upgrade to arrow 1.0.0 and fix generated sources root (#15)
- Upgrade to Arrow 1.0.0
- Fixed issue where JAR bundling was somehow causing the plugin options to be dropped
🚀 Enhancement
- upgrade to arrow 1.0.0 and fix generated sources root #15 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.9.1
🐛 Bug Fix
- Upgrade to Kotlin 1.5 #13 (@stabbylambda)
⚠️ Pushed to main
- rename master to main (jeremiah_zucker@intuit.com)
🏠 Internal
- Upgrade binary compatibility tool to 0.5.0 #14 (jeremiah_zucker@intuit.com)
- Setup Auto for Canary and Next #12 (jeremiah_zucker@intuit.com)
Authors: 2
- David Stone (@stabbylambda)
- Jeremiah Zucker (@sugarmanz)
0.9.0
:tada: This release contains work from a new contributor! :tada:
Thank you, David Stone (@stabbylambda), for all your work!
Release Notes
Hooks with type parameters (#8)
Enhance DSL to adds the ability to generate Hooks with type parameters. The use case for this is when some piece of data is known only to the consumer of a library and the consumers of the taps, but not necessarily the library itself. As an example:
class FooHooks<T> : Hooks() {
open val beforeCalc = syncHook<(T) -> Unit>()
}
data class Foo<T>(val t: T) {
public val hooks = FooHooksImpl<T>()
fun calc() {
hooks.beforeCalc.call(t)
// ...
}
}
fun runCalcsWithLog() {
val f = Foo<String>("hi")
f.hooks.beforeCalc.tap("hi") { x -> println(x) }
}
🚀 Enhancement
- Hooks with type parameters #8 (@stabbylambda)
🐛 Bug Fix
- Update to use Typed Quotes #7 (@stabbylambda)
📝 Documentation
- update docs for gradle plugin portal #6 (@sugarmanz)
Authors: 2
- David Stone (@stabbylambda)
- Jeremiah Zucker (@sugarmanz)
0.8.2
0.8.1
0.8.0
🚀 Enhancement
- Finalize publishing and fix links #4 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)
0.7.4
:tada: This release contains work from new contributors! :tada:
Thanks for all your work!
:heart: Jeremiah Zucker (@sugarmanz)
:heart: Andrew Lisowski (@hipstersmoothie)
🐛 Bug Fix
- test signing first #3 (@sugarmanz)
- Configure CI #2 (@sugarmanz)
- migrate links #1 (@sugarmanz)
⚠️ Pushed to master
- don't do other publishing yet (@sugarmanz)
- prepare 0.7.3-SNAPSHOT (@sugarmanz)
- version 0.7.2-SNAPSHOT (@sugarmanz)
- specify subproj (@sugarmanz)
- move auto download (@sugarmanz)
- initialize public repo (@hipstersmoothie)
Authors: 2
- Andrew Lisowski (@hipstersmoothie)
- Jeremiah Zucker (@sugarmanz)
0.7.0
Release Notes
From #38
- Configure KtLint Gradle Plugin
- Enable explicit API mode
- Setup API matching tool
- Generate Dokka API docs
- Migrate to Gradle Kotlin DSL
🚀 Enhancement
Authors: 1
- Jeremiah Zucker (@JZUCKER)
0.6.0
0.4.0
0.0.2
Release Notes
From #7
First published alpha release of Intuit Tapable for the JVM. This includes the complete set of working hooks, as well as a compiler plugin to help generate specific hook implementations. This project as a whole is based on Webpack's Tapable for JS.
🐛 Bug Fix
- Initial build & release #7 (@JZUCKER)
- Fix the suspend function and add back the convenience tap #6 (@dstone3)
- Implement the compiler plugin #5 (@JZUCKER @dstone3)
- Add Async Parallel and Bail #4 (@dstone3)
- Some cleanup #3 (@dstone3)
- Sync Hooks + Interceptors #2 (@dstone3)
- Basic sync hook #1 (@dstone3 @JZUCKER)
⚠️ Pushed to master
- It helps to check in the gradle wrapper (@dstone3)
- Update README.md (@dstone3)
- Initial commit (@dstone3)
Authors: 2
Why
To make generated source more readable for consumers
🐛 Bug Fix
- Format generated source with KtLint #18 (@sugarmanz)
Authors: 1
- Jeremiah Zucker (@sugarmanz)