* Implement new hydration optimization
During hydration, greedily pick nodes that exist in the original HTML that should not be detached.
Detach the rest.
* Implement optimal reordering during hydration
During hydration we track the order in which children are claimed.
Afterwards, rather than reordering them greedily one-by-one, we reorder all claimed children during the first append optimally.
The optimal reordering first finds the longest subsequence of children that have been claimed in order.
These children will not be moved.
The rest of the children are reordered to where they have to go.
This algorithm is guaranteed to be optimal in the number of reorderings.
The hydration/head-meta-hydrate-duplicate test sample has been modified slightly.
The order in which the <title> tag is being generated changed, which does not affect correctness.
* Fix issue potentially causing extra reorders
Not sorting children before executing the `insertBefore` calls in `init_hydrate` potentially caused extra `insertBefore` calls in `append`
* Simplify`init_hydrate` sorting logic
* Improve SSR hydration performance
- Fixes#4308 by avoiding de- and reattaching nodes during hydration
- Turns existing append, insert and detach methods into "upserts"
The new "hydration mode" was added in order to maintain the detach by
default behavior during hydration. By tracking which nodes are claimed
during hydration unclaimed nodes can then removed from the DOM at the
end of hydration without touching the remaining nodes.
Co-authored-by: Jonatan Svennberg <jonatan.svennberg@gmail.com>
* call onDestroy when disconnected
* lifecycle hooks and custom elements
- Call onMount in connectedCallback for customElements
- register onMount return values as on_disconnect-callbacks for customElements
- run on_disconnect callbacks in disconnectedCallback
* do not reset on_mount so that it can fire again if reinserted
* simpler isCustomElement & skip extra function call
- pass options.customElement down to mount_component
- remove expensive isCustomElement check
- only call add_render_callback if not customElement
Co-authored-by: Pontus Lundin <pontus.lundin@ica.se>
* start updating tests
* start implementing bitmask-based change tracking (#1943)
* oops
* fix some await block stuff
* slots
* reactive declarations
* component bindings etc
* start fixing slots
* fix store value invalidations
* slot stuff
* fixes
* fix
* fixes
* fix some slot stuff
* fix some invalidations
* fix if blocks
* fix a test
* destructuring in lets
* fix shadowing
* fix if block case
* all runtime tests passinfg
* almost all tests passing
* update tests
* never hoist writable vars in dev mode, fix debug statements
* beef up shadowing test
* always use renderer.reference
* fix sourcemaps
* ugh so close
* all tests passing. phase one complete, i guess
* add test for component with more than 31 dynamic values
* stable sort
* stable sort that preserves order
* linting
* failing test for bitmask overflow
* ok i think this is it
* lint
* rename changed to dirty, for more internal consistency
* update tests
* use bitwise comparison
* add comments... sort of
* update tests
* moar comments
* I don't know what happened to these tests
* track whether block is already outroing
* get tests passing
* use transition_in and transition_out helpers
* fix some stuff
* fix non-existent dynamic component outros
* another fix
* another fix
* argh so close
* NAILED IT
* remove unused code
* tidy up
* master: (35 commits)
Fix overwrite of 'offset' value in reactive statement
fix slide example
typos
update svelte-repl (fixes download button)
update svelte-repl
update svelte-repl version
use better eliza package
gitignore workers
add compiler typings to list of published files
improve typings for animate, easing, transition, motion and internal apis
update bundler worker
fix gitignore
fix types for easing functions
fix build order
generate internal-exports file
update gitignore
update folder structure - #2790
bump estree-walker to fix some svelte.walk bugs
bundle locally
-> v3.4.4
...