pull/9826/head
Rich Harris 3 years ago
parent c538868608
commit ba0d55bf4c

@ -54,16 +54,25 @@ export const global_visitors = {
binding?.kind === 'prop' || binding?.kind === 'prop' ||
is_store is_store
) { ) {
let fn = node.operator === '++' ? '$.increment' : '$.decrement'; /** @type {import('estree').Expression[]} */
const args = [];
let fn = '$.update';
if (node.prefix) fn += '_pre'; if (node.prefix) fn += '_pre';
if (binding.kind === 'prop') fn += '_prop';
if (is_store) { if (is_store) {
fn += '_store'; fn += '_store';
return b.call(fn, serialize_get_binding(b.id(name), state), b.call('$' + name)); args.push(serialize_get_binding(b.id(name), state), b.call('$' + name));
} else {
if (binding.kind === 'prop') fn += '_prop';
args.push(b.id(name));
}
if (node.operator === '--') {
args.push(b.literal(-1));
} }
return b.call(fn, b.id(name)); return b.call(fn, ...args);
} }
return next(); return next();

@ -3,7 +3,7 @@ import {
effect_active, effect_active,
get, get,
set, set,
increment, update,
source, source,
updating_derived, updating_derived,
UNINITIALIZED, UNINITIALIZED,
@ -143,7 +143,7 @@ const handler = {
const s = metadata.s.get(prop); const s = metadata.s.get(prop);
if (s !== undefined) set(s, UNINITIALIZED); if (s !== undefined) set(s, UNINITIALIZED);
if (prop in target) increment(metadata.v); if (prop in target) update(metadata.v);
return delete target[prop]; return delete target[prop];
}, },
@ -224,7 +224,7 @@ const handler = {
} }
} }
if (not_has) { if (not_has) {
increment(metadata.v); update(metadata.v);
} }
// @ts-ignore // @ts-ignore
target[prop] = value; target[prop] = value;

@ -1577,111 +1577,55 @@ export function bubble_event($$props, event) {
/** /**
* @param {import('./types.js').Signal<number>} signal * @param {import('./types.js').Signal<number>} signal
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function increment(signal) { export function update(signal, d = 1) {
const value = get(signal); const value = get(signal);
set_signal_value(signal, value + 1); set_signal_value(signal, value + d);
return value; return value;
} }
/** /**
* @param {((value?: number) => number)} fn * @param {((value?: number) => number)} fn
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function increment_prop(fn) { export function update_prop(fn, d = 1) {
const value = fn(); const value = fn();
fn(value + 1); fn(value + d);
return value; return value;
} }
/** /**
* @param {import('./types.js').Store<number>} store * @param {import('./types.js').Store<number>} store
* @param {number} store_value * @param {number} store_value
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function increment_store(store, store_value) { export function update_store(store, store_value, d = 1) {
store.set(store_value + 1); store.set(store_value + d);
return store_value; return store_value;
} }
/** /**
* @param {import('./types.js').Signal<number>} signal * @param {import('./types.js').Signal<number>} signal
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function decrement(signal) { export function update_pre(signal, d = 1) {
const value = get(signal); const value = get(signal) + d;
set_signal_value(signal, value - 1);
return value;
}
/**
* @param {((value?: number) => number)} fn
* @returns {number}
*/
export function decrement_prop(fn) {
const value = fn();
fn(value - 1);
return value;
}
/**
* @param {import('./types.js').Store<number>} store
* @param {number} store_value
* @returns {number}
*/
export function decrement_store(store, store_value) {
store.set(store_value - 1);
return store_value;
}
/**
* @param {import('./types.js').Signal<number>} signal
* @returns {number}
*/
export function increment_pre(signal) {
const value = get(signal) + 1;
set_signal_value(signal, value);
return value;
}
/**
* @param {((value?: number) => number)} fn
* @returns {number}
*/
export function increment_pre_prop(fn) {
const value = fn() + 1;
fn(value);
return value;
}
/**
* @param {import('./types.js').Store<number>} store
* @param {number} store_value
* @returns {number}
*/
export function increment_pre_store(store, store_value) {
const value = store_value + 1;
store.set(value);
return value;
}
/**
* @param {import('./types.js').Signal<number>} signal
* @returns {number}
*/
export function decrement_pre(signal) {
const value = get(signal) - 1;
set_signal_value(signal, value); set_signal_value(signal, value);
return value; return value;
} }
/** /**
* @param {((value?: number) => number)} fn * @param {((value?: number) => number)} fn
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function decrement_pre_prop(fn) { export function update_pre_prop(fn, d = 1) {
const value = fn() - 1; const value = fn() + d;
fn(value); fn(value);
return value; return value;
} }
@ -1689,10 +1633,11 @@ export function decrement_pre_prop(fn) {
/** /**
* @param {import('./types.js').Store<number>} store * @param {import('./types.js').Store<number>} store
* @param {number} store_value * @param {number} store_value
* @param {1 | -1} [d]
* @returns {number} * @returns {number}
*/ */
export function decrement_pre_store(store, store_value) { export function update_pre_store(store, store_value, d = 1) {
const value = store_value - 1; const value = store_value + d;
store.set(value); store.set(value);
return value; return value;
} }

@ -17,18 +17,12 @@ export {
safe_equal, safe_equal,
tick, tick,
untrack, untrack,
increment, update,
increment_prop, update_prop,
increment_store, update_store,
decrement, update_pre,
decrement_prop, update_pre_prop,
decrement_store, update_pre_store,
increment_pre,
increment_pre_prop,
increment_pre_store,
decrement_pre,
decrement_pre_prop,
decrement_pre_store,
mutate, mutate,
mutate_store, mutate_store,
value_or_fallback, value_or_fallback,

Loading…
Cancel
Save