fork() — svelte Function Reference
Architecture documentation for the fork() function in batch.js from the svelte codebase.
Entity Profile
Dependency Diagram
graph TD a967b3b9_6263_60ec_74ff_b1889e66d284["fork()"] d8e42d9d_2e3c_635c_19d3_b946a4341c0f["batch.js"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|defined in| d8e42d9d_2e3c_635c_19d3_b946a4341c0f b7967402_58f6_1459_b728_27d0f1118d87["fork_timing()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| b7967402_58f6_1459_b728_27d0f1118d87 2ec0d2fd_8bbc_b2ba_53ae_f2da02bb3ba5["ensure()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 2ec0d2fd_8bbc_b2ba_53ae_f2da02bb3ba5 00f10d2c_2e62_5eac_4978_67aef30d62bd["settled()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 00f10d2c_2e62_5eac_4978_67aef30d62bd 5bc3c950_96f7_e454_6cb7_65ffc2179811["flushSync()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 5bc3c950_96f7_e454_6cb7_65ffc2179811 6479f832_c1d7_7636_b658_b3f9c70d9af0["set_signal_status()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 6479f832_c1d7_7636_b658_b3f9c70d9af0 16aac954_2fce_c7d9_4726_4ffecb0c6d64["fork_discarded()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 16aac954_2fce_c7d9_4726_4ffecb0c6d64 4af42bfc_fe4c_0160_eada_7d109f39af3a["increment_write_version()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 4af42bfc_fe4c_0160_eada_7d109f39af3a 92a6b0f5_8829_33ec_80dd_aa943970a578["eager()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 92a6b0f5_8829_33ec_80dd_aa943970a578 8e91fdef_fe5d_43e3_f35f_46c69adf8c42["mark_eager_effects()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 8e91fdef_fe5d_43e3_f35f_46c69adf8c42 b9061456_b6fe_b159_6713_beff0afbb7a4["set_eager_effects()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| b9061456_b6fe_b159_6713_beff0afbb7a4 8cbd2617_a90a_da93_cf30_82f21876749c["flush_eager_effects()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 8cbd2617_a90a_da93_cf30_82f21876749c 4a5c85d2_dfaa_8eed_83a2_1b140cad91fb["revive()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 4a5c85d2_dfaa_8eed_83a2_1b140cad91fb 3a656fc9_97e1_c1e1_53aa_c39cb7503b64["discard()"] a967b3b9_6263_60ec_74ff_b1889e66d284 -->|calls| 3a656fc9_97e1_c1e1_53aa_c39cb7503b64 style a967b3b9_6263_60ec_74ff_b1889e66d284 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/svelte/src/internal/client/reactivity/batch.js lines 971–1056
export function fork(fn) {
if (!async_mode_flag) {
e.experimental_async_required('fork');
}
if (current_batch !== null) {
e.fork_timing();
}
var batch = Batch.ensure();
batch.is_fork = true;
batch_values = new Map();
var committed = false;
var settled = batch.settled();
flushSync(fn);
// revert state changes
for (var [source, value] of batch.previous) {
source.v = value;
}
// make writable deriveds dirty, so they recalculate correctly
for (source of batch.current.keys()) {
if ((source.f & DERIVED) !== 0) {
set_signal_status(source, DIRTY);
}
}
return {
commit: async () => {
if (committed) {
await settled;
return;
}
if (!batches.has(batch)) {
e.fork_discarded();
}
committed = true;
batch.is_fork = false;
// apply changes and update write versions so deriveds see the change
for (var [source, value] of batch.current) {
source.v = value;
source.wv = increment_write_version();
}
// trigger any `$state.eager(...)` expressions with the new state.
// eager effects don't get scheduled like other effects, so we
// can't just encounter them during traversal, we need to
// proactively flush them
// TODO maybe there's a better implementation?
flushSync(() => {
/** @type {Set<Effect>} */
var eager_effects = new Set();
for (var source of batch.current.keys()) {
mark_eager_effects(source, eager_effects);
}
set_eager_effects(eager_effects);
flush_eager_effects();
});
batch.revive();
await settled;
},
discard: () => {
// cause any MAYBE_DIRTY deriveds to update
// if they depend on things thath changed
// inside the discarded fork
for (var source of batch.current.keys()) {
source.wv = increment_write_version();
}
if (!committed && batches.has(batch)) {
batches.delete(batch);
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does fork() do?
fork() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/reactivity/batch.js.
Where is fork() defined?
fork() is defined in packages/svelte/src/internal/client/reactivity/batch.js at line 971.
What does fork() call?
fork() calls 13 function(s): discard, eager, ensure, flushSync, flush_eager_effects, fork_discarded, fork_timing, increment_write_version, and 5 more.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free