Skip to content

Commit 2f05191

Browse files
committed
encapsulate fallback logic
1 parent 272ec16 commit 2f05191

File tree

1 file changed

+16
-20
lines changed
  • packages/svelte/src/internal/client/reactivity

1 file changed

+16
-20
lines changed

packages/svelte/src/internal/client/reactivity/props.js

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -139,18 +139,22 @@ export function spread_props(...props) {
139139
export function prop(props, key, flags, fallback) {
140140
var immutable = (flags & PROPS_IS_IMMUTABLE) !== 0;
141141
var runes = (flags & PROPS_IS_RUNES) !== 0;
142+
var lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;
143+
142144
var prop_value = /** @type {V} */ (props[key]);
143145
var setter = get_descriptor(props, key)?.set;
144146

145-
var needs_new_fallback_value = true;
146-
/** @type {V} */
147-
var fallback_value;
148-
var get_fallback = () =>
149-
fallback !== undefined
150-
? (flags & PROPS_IS_LAZY_INITIAL) !== 0
151-
? /** @type {Function} */ (fallback)()
152-
: fallback
153-
: undefined;
147+
var fallback_value = /** @type {V} */ (fallback);
148+
var fallback_dirty = true;
149+
150+
var get_fallback = () => {
151+
if (lazy && fallback_dirty) {
152+
fallback_dirty = false;
153+
fallback_value = untrack(/** @type {() => V} */ (fallback));
154+
}
155+
156+
return fallback_value;
157+
};
154158

155159
if (prop_value === undefined && fallback !== undefined) {
156160
if (setter && runes) {
@@ -163,23 +167,15 @@ export function prop(props, key, flags, fallback) {
163167
);
164168
}
165169

166-
prop_value = fallback_value = get_fallback();
167-
needs_new_fallback_value = false;
168-
170+
prop_value = get_fallback();
169171
if (setter) setter(prop_value);
170172
}
171173

172174
var getter = runes
173175
? () => {
174176
var value = /** @type {V} */ (props[key]);
175-
if (value === undefined) {
176-
if (needs_new_fallback_value) {
177-
needs_new_fallback_value = false;
178-
fallback_value = untrack(get_fallback);
179-
}
180-
return fallback_value;
181-
}
182-
needs_new_fallback_value = true;
177+
if (value === undefined) return get_fallback();
178+
fallback_dirty = true;
183179
return value;
184180
}
185181
: () => {

0 commit comments

Comments
 (0)