Skip to content

Latest commit

 

History

History
160 lines (154 loc) · 7.1 KB

todo.md

File metadata and controls

160 lines (154 loc) · 7.1 KB
  • finish directives
  • better list diffing
  • ordered directives init (:each + :if vs :if + :each) -> find out if really needed and which is faster -> yes, needed and solve many init issues.
  • [?] autoinit -> too much maintenance burden
  • node tests
  • better deps updating -> cumulative signal
  • combinations: :else :if
  • :each :if, :if :each
  • :each :each
  • :with must be able to write state value as well
  • docs: give example to each directive
  • initialize per-element: - tree-dependent (:each comes first).
  • generalize common attributes :prop="xyz"
  • spread props
  • optimization: arrays with multiple elements can be slow on creation. Maybe signal-struct must ignore arrays. -> yep: arrays are rarely changed as a[i]=newItem and regularly they're mapped.
  • expand to any subscribables: both as state vars
  • :ref
  • :ref + :each
  • event chains :ona-onb
  • bulk events :ona:onb
  • multiprop setter 🅰️b="c"
  • make this in expression an element
    • [x] replace :ref with :with="this as x"
  • :ref creates instance in current state, not creates a new state
    • to avoid extending signal-struct, we must collect state data before, and call updates after for extended state
  • optimization: replace element-props with direct (better) setters
    • Make sure false gets serialized, not removes attr
  • Sandbox expressions: no global, no "scope" object name, no "arguments"
  • [x] report usignal problem author is not really interested
  • this doesn't refer to element/scope in event handlers
  • :text="" empty values shouldn't throw
  • implement :with
  • update :value without losing focus / position
  • [x] run tiredown if element got removed from condition or loop (free memory) no need just make sure no refs to elements stored
  • sprae(el, newState) can update element's state directly (as batch!?) -> must be tested against repeats in directives
  • :if :ref, :if :with -> context setters must come first always
  • :style="{'--x':value}"
  • :onkeydown.ctrl-alt-D
  • examples
    • todomvc
    • waveplay
  • evt modifiers
    • once, capture, passive
    • ...rest
  • parallel chains
  • Sandbox
  • Autorun
  • There's some bug with prostogreen not triggering effect. (caused by special array.length case)
  • Getters must become evaluable
  • <li :each="item in items" :with="{collapsed:true}"><button :onclick='e=>collapsed=false'></li>
  • :with="{likes:[], like(){ /* likes should not be undefined here */ }}" nah, it's fine
  • Reduce memory leak - via jsbenchmark example
    • make disposers
    • make sure internals are disposed as well
  • frameworks benchmark -> contrib to krausest
  • fix swapping rows error
  • make use of actual swapdom
  • fix removing last row issue
  • optimization:
    • faster create rows
    • faster replace all rows
    • fix remove row perf issue
  • Make signals-proxy state actually lazy-init (now it's not)
  • Fix multiple .push cycle problem
  • Make regular proxy state not causing infinite recursion we don't hold to own proxy now
  • All FIXMEs
  • Avoid creating signals for static values -> v9 avoids that
  • Figure out arr.push() - do we need to ever have calls as signals?

[x] v9

  • subscript-based eval
    • make a in b via subscript
  • no store
  • switching signals
  • get rid of @ events
  • plugins: extensible directives
  • comparison table: CSP, plugins, no-deps, size, performance, event/modifiers,
  • [~] add :html directive as replacement for :render, with tests
  • rename :with to :scope
  • :fx=fx
  • make signals tests (nested effects)
  • try direct directives without primary/secondary
  • split directives
  • switchable compiler
  • clear exports (no parse, err) - make sense of compile function as exported
  • template test (:text, :html, :if, :each)
  • fx teardown
  • flatten API, API to docs: ./core (custom build), ./sprae (default entry)
    • make CSP a docs config, not entry
  • customizable swapper
  • sprae.* instead of .use, extending docs: directive, compile, swap, signals .use is more compact
    • no-signals (signals are pluggable): better teardown flow; returns dispose fn, not state; pluggable ulive; signals from original source, not sprae can't avoid effect, the codebase is tiny
  • 0-code sandbox (stub props) - unnecessary Object.create
  • interpolatable strings
  • :each that keeps elements
  • Plugins
    • :aria
    • :data
    • :item
  • move effect out of directives, make signal-less state (ideally).
  • fix ToDo
  • all FIXMEs
  • make cross-version testing: sprae, csp, signals variations justin default is enough
  • avoid triggering unchanged effects
  • since we use justin - make templates reactive nah, too much friction
  • replace class="∴" with just "∴" attribute (less interference/friction) invalid attribute
  • collapse dirs into details
  • make item itself a key also
  • move proxy state into own project / part of signal struct (with tests from here) part of sprae is better
  • some bug with keys identity in todo
  • v9 issues:
    • creating/releasing rows doesn't clear up memory
      • because weakmap stores by key, only if key is disposed it clears up
    • replacing/swapping rows is slow
      • the reason of slowdown is key - sometimes it's better to keep index as key, not id
  • state as signal: test updates itself sprae(el, signal({x:1})) - needed for :each loop
  • switchable compiler
  • try getting rid of compile() calls in subscript not sprae's concern
  • try getting rid of compile() calls in sprae ? how to parse each, ref expression? -> via redefining .parse

[x] v10

  • signals based on signals proposal
  • proxy state is back
    • try out store without values holder
    • flatten store to avoid passing parent (only needed by scope)
    • bring effect back to all directives
    • make array push updates batched
  • remove valueOf()s in directives
  • separate store to object / array
  • finish all .todo tests they're not relevant
  • make :with create static state
  • make :ref recognize strings/evaluables no need, wait until needed, simpler the better, even effect is not needed
  • with must not create inherited root scope, it's enough to overwrite signals
    • this also allows removing signals argument from store
  • run benchmarks
  • :each is too slow for appending 1000 items
  • make each scope flat computed, not inheritance
  • fix todo mvc
    • todos.filter(xxx).length - should be subscribable
    • test item = {...item}
  • try debouncing / batching array.length writes -> doesn't seem possible
  • lodash for untracked values
  • fix wavearea
  • fix :if within :each
  • make functional ref
  • add hint about :html
  • make v11 release

Backlog

  • :onvisible..oninvisible
  • :onmount..onunmount - see :ref
  • :animate?
  • js-framework-bench push + example