Fix remaining imc-vibe references in README and bun.lock
This commit is contained in:
parent
ff52be8adf
commit
061126c51e
41 changed files with 613 additions and 339 deletions
36
frontend/node_modules/svelte/src/compiler/phases/2-analyze/index.js
generated
vendored
36
frontend/node_modules/svelte/src/compiler/phases/2-analyze/index.js
generated
vendored
|
|
@ -1074,6 +1074,9 @@ function calculate_blockers(instance, analysis) {
|
|||
|
||||
let awaited = false;
|
||||
|
||||
/** @type {Array<ESTree.Statement | ESTree.VariableDeclarator>} */
|
||||
let sync_group = [];
|
||||
|
||||
// TODO this should probably be attached to the scope?
|
||||
const promises = b.id('$$promises');
|
||||
|
||||
|
|
@ -1088,6 +1091,13 @@ function calculate_blockers(instance, analysis) {
|
|||
binding.blocker = blocker;
|
||||
}
|
||||
|
||||
function flush_sync_group() {
|
||||
if (sync_group.length === 0) return;
|
||||
|
||||
analysis.instance_body.async.push({ nodes: sync_group, has_await: false });
|
||||
sync_group = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Analysis of blockers for functions is deferred until we know which statements are async/blockers
|
||||
* @type {Array<ESTree.FunctionDeclaration | ESTree.VariableDeclarator>}
|
||||
|
|
@ -1149,6 +1159,9 @@ function calculate_blockers(instance, analysis) {
|
|||
|
||||
trace_references(declarator, reads, writes, instance.scope);
|
||||
|
||||
// Needs to happen before blocker computation
|
||||
if (has_await) flush_sync_group();
|
||||
|
||||
const blocker = /** @type {NonNullable<Binding['blocker']>} */ (
|
||||
b.member(promises, b.literal(analysis.instance_body.async.length), true)
|
||||
);
|
||||
|
|
@ -1161,11 +1174,12 @@ function calculate_blockers(instance, analysis) {
|
|||
push_declaration(id, blocker);
|
||||
}
|
||||
|
||||
// one declarator per declaration, makes things simpler
|
||||
analysis.instance_body.async.push({
|
||||
node: declarator,
|
||||
has_await
|
||||
});
|
||||
if (has_await) {
|
||||
// one declarator per declaration, makes things simpler
|
||||
analysis.instance_body.async.push({ nodes: [declarator], has_await: true });
|
||||
} else {
|
||||
sync_group.push(declarator);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (awaited) {
|
||||
|
|
@ -1177,6 +1191,9 @@ function calculate_blockers(instance, analysis) {
|
|||
|
||||
trace_references(node, reads, writes, instance.scope);
|
||||
|
||||
// Needs to happen before blocker computation
|
||||
if (has_await) flush_sync_group();
|
||||
|
||||
const blocker = /** @type {NonNullable<Binding['blocker']>} */ (
|
||||
b.member(promises, b.literal(analysis.instance_body.async.length), true)
|
||||
);
|
||||
|
|
@ -1187,15 +1204,20 @@ function calculate_blockers(instance, analysis) {
|
|||
|
||||
if (node.type === 'ClassDeclaration') {
|
||||
push_declaration(node.id, blocker);
|
||||
analysis.instance_body.async.push({ node, has_await });
|
||||
}
|
||||
|
||||
if (has_await) {
|
||||
analysis.instance_body.async.push({ nodes: [node], has_await: true });
|
||||
} else {
|
||||
analysis.instance_body.async.push({ node, has_await });
|
||||
sync_group.push(node);
|
||||
}
|
||||
} else {
|
||||
analysis.instance_body.sync.push(node);
|
||||
}
|
||||
}
|
||||
|
||||
flush_sync_group();
|
||||
|
||||
for (const fn of functions) {
|
||||
/** @type {Set<Binding>} */
|
||||
const reads_writes = new Set();
|
||||
|
|
|
|||
122
frontend/node_modules/svelte/src/compiler/phases/3-transform/shared/transform-async.js
generated
vendored
122
frontend/node_modules/svelte/src/compiler/phases/3-transform/shared/transform-async.js
generated
vendored
|
|
@ -47,64 +47,24 @@ export function transform_body(instance_body, runner, transform) {
|
|||
|
||||
// Thunks for the await expressions
|
||||
if (instance_body.async.length > 0) {
|
||||
const thunks = instance_body.async.map((s) => {
|
||||
if (s.node.type === 'VariableDeclarator') {
|
||||
const visited = /** @type {ESTree.VariableDeclaration | ESTree.EmptyStatement} */ (
|
||||
transform(b.var(s.node.id, s.node.init))
|
||||
);
|
||||
const thunks = instance_body.async.map((entry) => {
|
||||
/** @type {ESTree.Statement[]} */
|
||||
const entry_statements = [];
|
||||
|
||||
const statements =
|
||||
visited.type === 'VariableDeclaration'
|
||||
? visited.declarations.map((node) => {
|
||||
if (
|
||||
node.id.type === 'Identifier' &&
|
||||
(node.id.name.startsWith('$$d') || node.id.name.startsWith('$$array'))
|
||||
) {
|
||||
// this is an intermediate declaration created in VariableDeclaration.js;
|
||||
// subsequent statements depend on it
|
||||
return b.var(node.id, node.init);
|
||||
}
|
||||
|
||||
return b.stmt(b.assignment('=', node.id, node.init ?? b.void0));
|
||||
})
|
||||
: [];
|
||||
|
||||
if (statements.length === 1) {
|
||||
const statement = /** @type {ESTree.ExpressionStatement} */ (statements[0]);
|
||||
return b.thunk(statement.expression, s.has_await);
|
||||
}
|
||||
|
||||
return b.thunk(b.block(statements), s.has_await);
|
||||
for (const node of entry.nodes) {
|
||||
entry_statements.push(...transform_async_node(node, transform));
|
||||
}
|
||||
|
||||
if (s.node.type === 'ClassDeclaration') {
|
||||
return b.thunk(
|
||||
b.assignment(
|
||||
'=',
|
||||
s.node.id,
|
||||
/** @type {ESTree.ClassExpression} */ ({ ...s.node, type: 'ClassExpression' })
|
||||
),
|
||||
s.has_await
|
||||
);
|
||||
if (entry_statements.length === 0) {
|
||||
// Keep indices stable for async sequencing while avoiding array holes in run([...]).
|
||||
return b.thunk(b.void0, false);
|
||||
}
|
||||
|
||||
if (s.node.type === 'ExpressionStatement') {
|
||||
// the expression may be a $inspect call, which will be transformed into an empty statement
|
||||
const expression = /** @type {ESTree.Expression | ESTree.EmptyStatement} */ (
|
||||
transform(s.node.expression)
|
||||
);
|
||||
|
||||
if (expression.type === 'EmptyStatement') {
|
||||
// Keep indices stable for async sequencing while avoiding array holes in run([...]).
|
||||
return b.thunk(b.void0, false);
|
||||
}
|
||||
|
||||
return expression.type === 'AwaitExpression'
|
||||
? b.thunk(expression, true)
|
||||
: b.thunk(b.unary('void', expression), s.has_await);
|
||||
if (entry_statements.length === 1 && entry_statements[0].type === 'ExpressionStatement') {
|
||||
return b.thunk(entry_statements[0].expression, entry.has_await);
|
||||
}
|
||||
|
||||
return b.thunk(b.block([/** @type {ESTree.Statement} */ (transform(s.node))]), s.has_await);
|
||||
return b.thunk(b.block(entry_statements), entry.has_await);
|
||||
});
|
||||
|
||||
// TODO get the `$$promises` ID from scope
|
||||
|
|
@ -113,3 +73,63 @@ export function transform_body(instance_body, runner, transform) {
|
|||
|
||||
return statements;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ESTree.Statement | ESTree.VariableDeclarator} node
|
||||
* @param {(node: ESTree.Node) => ESTree.Node} transform
|
||||
* @returns {ESTree.Statement[]}
|
||||
*/
|
||||
function transform_async_node(node, transform) {
|
||||
if (node.type === 'VariableDeclarator') {
|
||||
const visited = /** @type {ESTree.VariableDeclaration | ESTree.EmptyStatement} */ (
|
||||
transform(b.var(node.id, node.init))
|
||||
);
|
||||
|
||||
return visited.type === 'VariableDeclaration'
|
||||
? visited.declarations.map((node) => {
|
||||
if (
|
||||
node.id.type === 'Identifier' &&
|
||||
(node.id.name.startsWith('$$d') || node.id.name.startsWith('$$array'))
|
||||
) {
|
||||
// This intermediate declaration is created in VariableDeclaration.js;
|
||||
// subsequent statements may depend on it.
|
||||
return b.var(node.id, node.init);
|
||||
}
|
||||
|
||||
return b.stmt(b.assignment('=', node.id, node.init ?? b.void0));
|
||||
})
|
||||
: [];
|
||||
}
|
||||
|
||||
if (node.type === 'ClassDeclaration') {
|
||||
return [
|
||||
b.stmt(
|
||||
b.assignment(
|
||||
'=',
|
||||
node.id,
|
||||
/** @type {ESTree.ClassExpression} */ ({ ...node, type: 'ClassExpression' })
|
||||
)
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
if (node.type === 'ExpressionStatement') {
|
||||
// The expression may be a $inspect call, which will be transformed into an empty statement.
|
||||
const expression = /** @type {ESTree.Expression | ESTree.EmptyStatement} */ (
|
||||
transform(node.expression)
|
||||
);
|
||||
|
||||
if (expression.type === 'EmptyStatement') {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (expression.type === 'AwaitExpression') {
|
||||
return [b.stmt(expression)];
|
||||
}
|
||||
|
||||
return [b.stmt(b.unary('void', expression))];
|
||||
}
|
||||
|
||||
const statement = /** @type {ESTree.Statement | ESTree.EmptyStatement} */ (transform(node));
|
||||
return statement.type === 'EmptyStatement' ? [] : [statement];
|
||||
}
|
||||
|
|
|
|||
9
frontend/node_modules/svelte/src/compiler/print/index.js
generated
vendored
9
frontend/node_modules/svelte/src/compiler/print/index.js
generated
vendored
|
|
@ -592,8 +592,13 @@ const svelte_visitors = (comments) => ({
|
|||
},
|
||||
|
||||
ConstTag(node, context) {
|
||||
context.write('{@');
|
||||
context.visit(node.declaration);
|
||||
context.write('{@const ');
|
||||
const declarators = node.declaration.declarations;
|
||||
for (let i = 0; i < declarators.length; i++) {
|
||||
if (i > 0) context.write(', ');
|
||||
context.visit(declarators[i]);
|
||||
}
|
||||
|
||||
context.write('}');
|
||||
},
|
||||
|
||||
|
|
|
|||
34
frontend/node_modules/svelte/src/internal/client/dev/hmr.js
generated
vendored
34
frontend/node_modules/svelte/src/internal/client/dev/hmr.js
generated
vendored
|
|
@ -5,9 +5,7 @@ import { hydrate_node, hydrating } from '../dom/hydration.js';
|
|||
import { block, branch, destroy_effect } from '../reactivity/effects.js';
|
||||
import { set, source } from '../reactivity/sources.js';
|
||||
import { set_should_intro } from '../render.js';
|
||||
import { get } from '../runtime.js';
|
||||
import { assign_nodes } from '../dom/template.js';
|
||||
import { create_comment } from '../dom/operations.js';
|
||||
import { active_effect, get } from '../runtime.js';
|
||||
|
||||
/**
|
||||
* @template {(anchor: Comment, props: any) => any} Component
|
||||
|
|
@ -29,13 +27,6 @@ export function hmr(fn) {
|
|||
|
||||
let ran = false;
|
||||
|
||||
// Surround the wrapped effects with comments and assign the nodes
|
||||
// on the wrapping effects so the parent can properly do DOM operations.
|
||||
let start = create_comment();
|
||||
let end = create_comment();
|
||||
|
||||
anchor.before(start);
|
||||
|
||||
block(() => {
|
||||
if (component === (component = get(current))) {
|
||||
return;
|
||||
|
|
@ -52,16 +43,21 @@ export function hmr(fn) {
|
|||
if (ran) set_should_intro(false);
|
||||
|
||||
// preserve getters/setters
|
||||
Object.defineProperties(
|
||||
instance,
|
||||
Object.getOwnPropertyDescriptors(
|
||||
// @ts-expect-error
|
||||
new.target ? new component(anchor, props) : component(anchor, props)
|
||||
)
|
||||
);
|
||||
var result =
|
||||
// @ts-expect-error
|
||||
new.target ? new component(anchor, props) : component(anchor, props);
|
||||
// a component is not guaranteed to return something and we can't invoke getOwnPropertyDescriptors on undefined
|
||||
if (result) {
|
||||
Object.defineProperties(instance, Object.getOwnPropertyDescriptors(result));
|
||||
}
|
||||
|
||||
if (ran) set_should_intro(true);
|
||||
});
|
||||
|
||||
// Forward the nodes from the inner effect to the outer active effect which would
|
||||
// get them if the HMR wrapper wasn't there. Do this inside the block not outside
|
||||
// so that HMR updates to the component will also update the nodes on the active effect.
|
||||
/** @type {Effect} */ (active_effect).nodes = effect.nodes;
|
||||
}, EFFECT_TRANSPARENT);
|
||||
|
||||
ran = true;
|
||||
|
|
@ -70,10 +66,6 @@ export function hmr(fn) {
|
|||
anchor = hydrate_node;
|
||||
}
|
||||
|
||||
anchor.before(end);
|
||||
|
||||
assign_nodes(start, end);
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
|
|
|||
11
frontend/node_modules/svelte/src/internal/client/reactivity/async.js
generated
vendored
11
frontend/node_modules/svelte/src/internal/client/reactivity/async.js
generated
vendored
|
|
@ -209,8 +209,8 @@ export async function* for_await_track_reactivity_loss(iterable) {
|
|||
yield value;
|
||||
}
|
||||
} finally {
|
||||
// If the iterator had a normal completion and `return` is defined on the iterator, call it and return the value
|
||||
if (normal_completion && iterator.return !== undefined) {
|
||||
// If the iterator had an abrupt completion and `return` is defined on the iterator, call it and return the value
|
||||
if (!normal_completion && iterator.return !== undefined) {
|
||||
// eslint-disable-next-line no-unsafe-finally
|
||||
return /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);
|
||||
}
|
||||
|
|
@ -307,15 +307,16 @@ export function wait(blockers) {
|
|||
* @returns {(skip?: boolean) => void}
|
||||
*/
|
||||
export function increment_pending() {
|
||||
var boundary = /** @type {Boundary} */ (/** @type {Effect} */ (active_effect).b);
|
||||
var effect = /** @type {Effect} */ (active_effect);
|
||||
var boundary = /** @type {Boundary} */ (effect.b);
|
||||
var batch = /** @type {Batch} */ (current_batch);
|
||||
var blocking = boundary.is_rendered();
|
||||
|
||||
boundary.update_pending_count(1, batch);
|
||||
batch.increment(blocking);
|
||||
batch.increment(blocking, effect);
|
||||
|
||||
return (skip = false) => {
|
||||
boundary.update_pending_count(-1, batch);
|
||||
batch.decrement(blocking, skip);
|
||||
batch.decrement(blocking, effect, skip);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
148
frontend/node_modules/svelte/src/internal/client/reactivity/batch.js
generated
vendored
148
frontend/node_modules/svelte/src/internal/client/reactivity/batch.js
generated
vendored
|
|
@ -90,20 +90,20 @@ var source_stacks = DEV ? new Set() : null;
|
|||
let uid = 1;
|
||||
|
||||
export class Batch {
|
||||
// for debugging. TODO remove once async is stable
|
||||
id = uid++;
|
||||
|
||||
/**
|
||||
* The current values of any sources that are updated in this batch
|
||||
* The current values of any signals that are updated in this batch.
|
||||
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
|
||||
* They keys of this map are identical to `this.#previous`
|
||||
* @type {Map<Source, any>}
|
||||
* @type {Map<Value, [any, boolean]>}
|
||||
*/
|
||||
current = new Map();
|
||||
|
||||
/**
|
||||
* The values of any sources that are updated in this batch _before_ those updates took place.
|
||||
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
|
||||
* They keys of this map are identical to `this.#current`
|
||||
* @type {Map<Source, any>}
|
||||
* @type {Map<Value, any>}
|
||||
*/
|
||||
previous = new Map();
|
||||
|
||||
|
|
@ -121,14 +121,16 @@ export class Batch {
|
|||
#discard_callbacks = new Set();
|
||||
|
||||
/**
|
||||
* The number of async effects that are currently in flight
|
||||
* Async effects that are currently in flight
|
||||
* @type {Map<Effect, number>}
|
||||
*/
|
||||
#pending = 0;
|
||||
#pending = new Map();
|
||||
|
||||
/**
|
||||
* The number of async effects that are currently in flight, _not_ inside a pending boundary
|
||||
* Async effects that are currently in flight, _not_ inside a pending boundary
|
||||
* @type {Map<Effect, number>}
|
||||
*/
|
||||
#blocking_pending = 0;
|
||||
#blocking_pending = new Map();
|
||||
|
||||
/**
|
||||
* A deferred that resolves when the batch is committed, used with `settled()`
|
||||
|
|
@ -168,8 +170,35 @@ export class Batch {
|
|||
|
||||
#decrement_queued = false;
|
||||
|
||||
/** @type {Set<Batch>} */
|
||||
#blockers = new Set();
|
||||
|
||||
#is_deferred() {
|
||||
return this.is_fork || this.#blocking_pending > 0;
|
||||
return this.is_fork || this.#blocking_pending.size > 0;
|
||||
}
|
||||
|
||||
#is_blocked() {
|
||||
for (const batch of this.#blockers) {
|
||||
for (const effect of batch.#blocking_pending.keys()) {
|
||||
var skipped = false;
|
||||
var e = effect;
|
||||
|
||||
while (e.parent !== null) {
|
||||
if (this.#skipped_branches.has(e)) {
|
||||
skipped = true;
|
||||
break;
|
||||
}
|
||||
|
||||
e = e.parent;
|
||||
}
|
||||
|
||||
if (!skipped) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -264,7 +293,7 @@ export class Batch {
|
|||
collected_effects = null;
|
||||
legacy_updates = null;
|
||||
|
||||
if (this.#is_deferred()) {
|
||||
if (this.#is_deferred() || this.#is_blocked()) {
|
||||
this.#defer_effects(render_effects);
|
||||
this.#defer_effects(effects);
|
||||
|
||||
|
|
@ -272,7 +301,7 @@ export class Batch {
|
|||
reset_branch(e, t);
|
||||
}
|
||||
} else {
|
||||
if (this.#pending === 0) {
|
||||
if (this.#pending.size === 0) {
|
||||
batches.delete(this);
|
||||
}
|
||||
|
||||
|
|
@ -383,17 +412,18 @@ export class Batch {
|
|||
/**
|
||||
* Associate a change to a given source with the current
|
||||
* batch, noting its previous and current values
|
||||
* @param {Source} source
|
||||
* @param {Value} source
|
||||
* @param {any} old_value
|
||||
* @param {boolean} [is_derived]
|
||||
*/
|
||||
capture(source, old_value) {
|
||||
capture(source, old_value, is_derived = false) {
|
||||
if (old_value !== UNINITIALIZED && !this.previous.has(source)) {
|
||||
this.previous.set(source, old_value);
|
||||
}
|
||||
|
||||
// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`
|
||||
if ((source.f & ERROR_VALUE) === 0) {
|
||||
this.current.set(source, source.v);
|
||||
this.current.set(source, [source.v, is_derived]);
|
||||
batch_values?.set(source, source.v);
|
||||
}
|
||||
}
|
||||
|
|
@ -453,11 +483,13 @@ export class Batch {
|
|||
/** @type {Source[]} */
|
||||
var sources = [];
|
||||
|
||||
for (const [source, value] of this.current) {
|
||||
for (const [source, [value, is_derived]] of this.current) {
|
||||
if (batch.current.has(source)) {
|
||||
if (is_earlier && value !== batch.current.get(source)) {
|
||||
var batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring
|
||||
|
||||
if (is_earlier && value !== batch_value) {
|
||||
// bring the value up to date
|
||||
batch.current.set(source, value);
|
||||
batch.current.set(source, [value, is_derived]);
|
||||
} else {
|
||||
// same value or later batch has more recent value,
|
||||
// no need to re-run these effects
|
||||
|
|
@ -507,24 +539,56 @@ export class Batch {
|
|||
batch.deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
for (const batch of batches) {
|
||||
if (batch.#blockers.has(this)) {
|
||||
batch.#blockers.delete(this);
|
||||
|
||||
if (batch.#blockers.size === 0 && !batch.#is_deferred()) {
|
||||
batch.activate();
|
||||
batch.#process();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {boolean} blocking
|
||||
* @param {Effect} effect
|
||||
*/
|
||||
increment(blocking) {
|
||||
this.#pending += 1;
|
||||
if (blocking) this.#blocking_pending += 1;
|
||||
increment(blocking, effect) {
|
||||
let pending_count = this.#pending.get(effect) ?? 0;
|
||||
this.#pending.set(effect, pending_count + 1);
|
||||
|
||||
if (blocking) {
|
||||
let blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;
|
||||
this.#blocking_pending.set(effect, blocking_pending_count + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {boolean} blocking
|
||||
* @param {Effect} effect
|
||||
* @param {boolean} skip - whether to skip updates (because this is triggered by a stale reaction)
|
||||
*/
|
||||
decrement(blocking, skip) {
|
||||
this.#pending -= 1;
|
||||
if (blocking) this.#blocking_pending -= 1;
|
||||
decrement(blocking, effect, skip) {
|
||||
let pending_count = this.#pending.get(effect) ?? 0;
|
||||
|
||||
if (pending_count === 1) {
|
||||
this.#pending.delete(effect);
|
||||
} else {
|
||||
this.#pending.set(effect, pending_count - 1);
|
||||
}
|
||||
|
||||
if (blocking) {
|
||||
let blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;
|
||||
|
||||
if (blocking_pending_count === 1) {
|
||||
this.#blocking_pending.delete(effect);
|
||||
} else {
|
||||
this.#blocking_pending.set(effect, blocking_pending_count - 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.#decrement_queued || skip) return;
|
||||
this.#decrement_queued = true;
|
||||
|
|
@ -597,15 +661,37 @@ export class Batch {
|
|||
|
||||
// if there are multiple batches, we are 'time travelling' —
|
||||
// we need to override values with the ones in this batch...
|
||||
batch_values = new Map(this.current);
|
||||
batch_values = new Map();
|
||||
for (const [source, [value]] of this.current) {
|
||||
batch_values.set(source, value);
|
||||
}
|
||||
|
||||
// ...and undo changes belonging to other batches
|
||||
// ...and undo changes belonging to other batches unless they block this one
|
||||
for (const batch of batches) {
|
||||
if (batch === this || batch.is_fork) continue;
|
||||
|
||||
for (const [source, previous] of batch.previous) {
|
||||
if (!batch_values.has(source)) {
|
||||
batch_values.set(source, previous);
|
||||
// A batch is blocked on an earlier batch if it overlaps with the earlier batch's changes but is not a superset
|
||||
var intersects = false;
|
||||
var differs = false;
|
||||
|
||||
if (batch.id < this.id) {
|
||||
for (const [source, [, is_derived]] of batch.current) {
|
||||
// Derived values don't partake in the blocking mechanism, because a derived could
|
||||
// be triggered in one batch already but not the other one yet, causing a false-positive
|
||||
if (is_derived) continue;
|
||||
|
||||
intersects ||= this.current.has(source);
|
||||
differs ||= !this.current.has(source);
|
||||
}
|
||||
}
|
||||
|
||||
if (intersects && differs) {
|
||||
this.#blockers.add(batch);
|
||||
} else {
|
||||
for (const [source, previous] of batch.previous) {
|
||||
if (!batch_values.has(source)) {
|
||||
batch_values.set(source, previous);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1065,7 +1151,7 @@ export function fork(fn) {
|
|||
batch.is_fork = false;
|
||||
|
||||
// apply changes and update write versions so deriveds see the change
|
||||
for (var [source, value] of batch.current) {
|
||||
for (var [source, [value]] of batch.current) {
|
||||
source.v = value;
|
||||
source.wv = increment_write_version();
|
||||
}
|
||||
|
|
|
|||
2
frontend/node_modules/svelte/src/internal/client/reactivity/deriveds.js
generated
vendored
2
frontend/node_modules/svelte/src/internal/client/reactivity/deriveds.js
generated
vendored
|
|
@ -396,7 +396,7 @@ export function update_derived(derived) {
|
|||
// change, `derived.equals` may incorrectly return `true`
|
||||
if (!current_batch?.is_fork || derived.deps === null) {
|
||||
derived.v = value;
|
||||
current_batch?.capture(derived, old_value);
|
||||
current_batch?.capture(derived, old_value, true);
|
||||
|
||||
// deriveds without dependencies should never be recomputed
|
||||
if (derived.deps === null) {
|
||||
|
|
|
|||
1
frontend/node_modules/svelte/src/internal/client/reactivity/effects.js
generated
vendored
1
frontend/node_modules/svelte/src/internal/client/reactivity/effects.js
generated
vendored
|
|
@ -559,6 +559,7 @@ export function destroy_effect(effect, remove_dom = true) {
|
|||
effect.fn =
|
||||
effect.nodes =
|
||||
effect.ac =
|
||||
effect.b =
|
||||
null;
|
||||
}
|
||||
|
||||
|
|
|
|||
14
frontend/node_modules/svelte/src/motion/spring.js
generated
vendored
14
frontend/node_modules/svelte/src/motion/spring.js
generated
vendored
|
|
@ -1,6 +1,6 @@
|
|||
/** @import { Task } from '#client' */
|
||||
/** @import { SpringOpts, SpringUpdateOpts, TickContext } from './private.js' */
|
||||
/** @import { Spring as SpringStore } from './public.js' */
|
||||
/** @import { TickContext } from './private.js' */
|
||||
/** @import { Spring as SpringStore, SpringOptions, SpringUpdateOptions } from './public.js' */
|
||||
import { writable } from '../store/shared/index.js';
|
||||
import { loop } from '../internal/client/loop.js';
|
||||
import { raf } from '../internal/client/timing.js';
|
||||
|
|
@ -62,7 +62,7 @@ function tick_spring(ctx, last_value, current_value, target_value) {
|
|||
* @deprecated Use [`Spring`](https://svelte.dev/docs/svelte/svelte-motion#Spring) instead
|
||||
* @template [T=any]
|
||||
* @param {T} [value]
|
||||
* @param {SpringOpts} [opts]
|
||||
* @param {SpringOptions} [opts]
|
||||
* @returns {SpringStore<T>}
|
||||
*/
|
||||
export function spring(value, opts = {}) {
|
||||
|
|
@ -83,7 +83,7 @@ export function spring(value, opts = {}) {
|
|||
let cancel_task = false;
|
||||
/**
|
||||
* @param {T} new_value
|
||||
* @param {SpringUpdateOpts} opts
|
||||
* @param {SpringUpdateOptions} opts
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
function set(new_value, opts = {}) {
|
||||
|
|
@ -191,7 +191,7 @@ export class Spring {
|
|||
|
||||
/**
|
||||
* @param {T} value
|
||||
* @param {SpringOpts} [options]
|
||||
* @param {SpringOptions} [options]
|
||||
*/
|
||||
constructor(value, options = {}) {
|
||||
this.#current = DEV ? tag(state(value), 'Spring.current') : state(value);
|
||||
|
|
@ -225,7 +225,7 @@ export class Spring {
|
|||
* ```
|
||||
* @template U
|
||||
* @param {() => U} fn
|
||||
* @param {SpringOpts} [options]
|
||||
* @param {SpringOptions} [options]
|
||||
*/
|
||||
static of(fn, options) {
|
||||
const spring = new Spring(fn(), options);
|
||||
|
|
@ -293,7 +293,7 @@ export class Spring {
|
|||
* the specified number of milliseconds. This is useful for things like 'fling' gestures.
|
||||
*
|
||||
* @param {T} value
|
||||
* @param {SpringUpdateOpts} [options]
|
||||
* @param {SpringUpdateOptions} [options]
|
||||
*/
|
||||
set(value, options) {
|
||||
this.#deferred?.reject(new Error('Aborted'));
|
||||
|
|
|
|||
15
frontend/node_modules/svelte/src/motion/tweened.js
generated
vendored
15
frontend/node_modules/svelte/src/motion/tweened.js
generated
vendored
|
|
@ -1,6 +1,5 @@
|
|||
/** @import { Task } from '../internal/client/types' */
|
||||
/** @import { Tweened } from './public' */
|
||||
/** @import { TweenedOptions } from './private' */
|
||||
/** @import { Tweened, TweenOptions } from './public' */
|
||||
import { writable } from '../store/shared/index.js';
|
||||
import { raf } from '../internal/client/timing.js';
|
||||
import { loop } from '../internal/client/loop.js';
|
||||
|
|
@ -84,7 +83,7 @@ function get_interpolator(a, b) {
|
|||
* @deprecated Use [`Tween`](https://svelte.dev/docs/svelte/svelte-motion#Tween) instead
|
||||
* @template T
|
||||
* @param {T} [value]
|
||||
* @param {TweenedOptions<T>} [defaults]
|
||||
* @param {TweenOptions<T>} [defaults]
|
||||
* @returns {Tweened<T>}
|
||||
*/
|
||||
export function tweened(value, defaults = {}) {
|
||||
|
|
@ -94,7 +93,7 @@ export function tweened(value, defaults = {}) {
|
|||
let target_value = value;
|
||||
/**
|
||||
* @param {T} new_value
|
||||
* @param {TweenedOptions<T>} [opts]
|
||||
* @param {TweenOptions<T>} [opts]
|
||||
*/
|
||||
function set(new_value, opts) {
|
||||
target_value = new_value;
|
||||
|
|
@ -180,7 +179,7 @@ export class Tween {
|
|||
#current;
|
||||
#target;
|
||||
|
||||
/** @type {TweenedOptions<T>} */
|
||||
/** @type {TweenOptions<T>} */
|
||||
#defaults;
|
||||
|
||||
/** @type {import('../internal/client/types').Task | null} */
|
||||
|
|
@ -188,7 +187,7 @@ export class Tween {
|
|||
|
||||
/**
|
||||
* @param {T} value
|
||||
* @param {TweenedOptions<T>} options
|
||||
* @param {TweenOptions<T>} options
|
||||
*/
|
||||
constructor(value, options = {}) {
|
||||
this.#current = state(value);
|
||||
|
|
@ -216,7 +215,7 @@ export class Tween {
|
|||
* ```
|
||||
* @template U
|
||||
* @param {() => U} fn
|
||||
* @param {TweenedOptions<U>} [options]
|
||||
* @param {TweenOptions<U>} [options]
|
||||
*/
|
||||
static of(fn, options) {
|
||||
const tween = new Tween(fn(), options);
|
||||
|
|
@ -233,7 +232,7 @@ export class Tween {
|
|||
*
|
||||
* If `options` are provided, they will override the tween's defaults.
|
||||
* @param {T} value
|
||||
* @param {TweenedOptions<T>} [options]
|
||||
* @param {TweenOptions<T>} [options]
|
||||
* @returns
|
||||
*/
|
||||
set(value, options) {
|
||||
|
|
|
|||
2
frontend/node_modules/svelte/src/version.js
generated
vendored
2
frontend/node_modules/svelte/src/version.js
generated
vendored
|
|
@ -4,5 +4,5 @@
|
|||
* The current version, as set in package.json.
|
||||
* @type {string}
|
||||
*/
|
||||
export const VERSION = '5.54.0';
|
||||
export const VERSION = '5.55.0';
|
||||
export const PUBLIC_VERSION = '5';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue