chore: reduce some select.value indirection (#16250)

pull/16257/head
Rich Harris 2 months ago committed by GitHub
parent da2feafe67
commit 213274a75e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -25,7 +25,6 @@ import { process_children } from './shared/fragment.js';
import { import {
build_render_statement, build_render_statement,
build_template_chunk, build_template_chunk,
build_update_assignment,
get_expression_id, get_expression_id,
memoize_expression memoize_expression
} from './shared/utils.js'; } from './shared/utils.js';
@ -657,17 +656,15 @@ function build_element_special_value_attribute(element, node_id, attribute, cont
} }
if (has_state) { if (has_state) {
const id = state.scope.generate(`${node_id.name}_value`); const id = b.id(state.scope.generate(`${node_id.name}_value`));
build_update_assignment(
state, // `<option>` is a special case: The value property reflects to the DOM. If the value is set to undefined,
id, // that means the value should be set to the empty string. To be able to do that when the value is
// `<option>` is a special case: The value property reflects to the DOM. If the value is set to undefined, // initially undefined, we need to set a value that is guaranteed to be different.
// that means the value should be set to the empty string. To be able to do that when the value is const init = element === 'option' ? b.object([]) : undefined;
// initially undefined, we need to set a value that is guaranteed to be different.
element === 'option' ? b.object([]) : undefined, state.init.push(b.var(id, init));
value, state.update.push(b.if(b.binary('!==', id, b.assignment('=', id, value)), b.block([update])));
update
);
} else { } else {
state.init.push(update); state.init.push(update);
} }

@ -165,20 +165,6 @@ export function parse_directive_name(name) {
return expression; return expression;
} }
/**
* @param {ComponentClientTransformState} state
* @param {string} id
* @param {Expression | undefined} init
* @param {Expression} value
* @param {ExpressionStatement} update
*/
export function build_update_assignment(state, id, init, value, update) {
state.init.push(b.var(id, init));
state.update.push(
b.if(b.binary('!==', b.id(id), b.assignment('=', b.id(id), value)), b.block([update]))
);
}
/** /**
* Serializes `bind:this` for components and elements. * Serializes `bind:this` for components and elements.
* @param {Identifier | MemberExpression | SequenceExpression} expression * @param {Identifier | MemberExpression | SequenceExpression} expression

Loading…
Cancel
Save