summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gjs/src/variable.ts5
-rw-r--r--lua/astal/variable.lua8
2 files changed, 10 insertions, 3 deletions
diff --git a/gjs/src/variable.ts b/gjs/src/variable.ts
index 05e142f..d583ab1 100644
--- a/gjs/src/variable.ts
+++ b/gjs/src/variable.ts
@@ -195,13 +195,14 @@ class VariableWrapper<T> extends Function {
return this as unknown as Variable<T>
}
- static derive<V,
+ static derive<
const Deps extends Array<Variable<any> | Binding<any>>,
Args extends {
[K in keyof Deps]: Deps[K] extends Variable<infer T>
? T : Deps[K] extends Binding<infer T> ? T : never
},
- >(deps: Deps, fn: (...args: Args) => V) {
+ V = Args,
+ >(deps: Deps, fn: (...args: Args) => V = (...args) => args as unknown as V) {
const update = () => fn(...deps.map(d => d.get()) as Args)
const derived = new Variable(update())
const unsubs = deps.map(dep => dep.subscribe(() => derived.set(update())))
diff --git a/lua/astal/variable.lua b/lua/astal/variable.lua
index c7c2ec9..1e894b5 100644
--- a/lua/astal/variable.lua
+++ b/lua/astal/variable.lua
@@ -223,9 +223,15 @@ function Variable:observe(object, sigOrFn, callback)
end
---@param deps Variable | (Binding | Variable)[]
----@param transform fun(...): any
+---@param transform? fun(...): any
---@return Variable
function Variable.derive(deps, transform)
+ if type(transform) == "nil" then
+ transform = function(...)
+ return { ... }
+ end
+ end
+
if getmetatable(deps) == Variable then
local var = Variable.new(transform(deps:get()))
deps:subscribe(function(v)