|
|
@ -166,7 +166,7 @@ export function legacy_rest_props(props, exclude) {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const spread_props_handler = {
|
|
|
|
const spread_props_handler = {
|
|
|
|
get(target, key) {
|
|
|
|
get(target, key) {
|
|
|
|
if (target.destroyed && key in target.oldProps) return target.oldProps[key]
|
|
|
|
if (target.destroyed && key in target.oldProps) return target.oldProps[key];
|
|
|
|
let i = target.props.length;
|
|
|
|
let i = target.props.length;
|
|
|
|
while (i--) {
|
|
|
|
while (i--) {
|
|
|
|
let p = target.props[i];
|
|
|
|
let p = target.props[i];
|
|
|
@ -181,7 +181,7 @@ const spread_props_handler = {
|
|
|
|
if (is_function(p)) p = p();
|
|
|
|
if (is_function(p)) p = p();
|
|
|
|
const desc = get_descriptor(p, key);
|
|
|
|
const desc = get_descriptor(p, key);
|
|
|
|
if (desc && desc.set) {
|
|
|
|
if (desc && desc.set) {
|
|
|
|
desc.set(target.oldProps[key] = value);
|
|
|
|
desc.set((target.oldProps[key] = value));
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -241,9 +241,20 @@ const spread_props_handler = {
|
|
|
|
* @returns {any}
|
|
|
|
* @returns {any}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
export function spread_props(...props) {
|
|
|
|
export function spread_props(...props) {
|
|
|
|
let destroyed = false
|
|
|
|
let destroyed = false;
|
|
|
|
teardown(() => { destroyed = true })
|
|
|
|
teardown(() => {
|
|
|
|
return new Proxy({ props, oldProps: {}, get destroyed() { return destroyed } }, spread_props_handler);
|
|
|
|
destroyed = true;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return new Proxy(
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
props,
|
|
|
|
|
|
|
|
oldProps: {},
|
|
|
|
|
|
|
|
get destroyed() {
|
|
|
|
|
|
|
|
return destroyed;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
spread_props_handler
|
|
|
|
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|