Skip to content

Commit eb40417

Browse files
authored
chore: move more element stuff (#10780)
* move bindings * move transitions * move custom-elements.js * move operations.js * move hydration.js * move reconciler.js * move map stuff out of dom operations * move action code * move transition code * missing imports --------- Co-authored-by: Rich Harris <[email protected]>
1 parent de021ae commit eb40417

33 files changed

+256
-259
lines changed

packages/svelte/src/internal/client/dom/blocks/await.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { is_promise } from '../../../common.js';
2-
import { hydrate_block_anchor } from '../../hydration.js';
3-
import { remove } from '../../reconciler.js';
2+
import { hydrate_block_anchor } from '../hydration.js';
3+
import { remove } from '../reconciler.js';
44
import { current_block, execute_effect, flushSync } from '../../runtime.js';
55
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
6-
import { trigger_transitions } from '../../transitions.js';
6+
import { trigger_transitions } from '../elements/transitions.js';
77
import { AWAIT_BLOCK, UNINITIALIZED } from '../../constants.js';
88

99
/** @returns {import('../../types.js').AwaitBlock} */

packages/svelte/src/internal/client/dom/blocks/css-props.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { namespace_svg } from '../../../../constants.js';
2-
import { current_hydration_fragment, hydrate_block_anchor, hydrating } from '../../hydration.js';
3-
import { empty } from '../../operations.js';
2+
import { current_hydration_fragment, hydrate_block_anchor, hydrating } from '../hydration.js';
3+
import { empty } from '../operations.js';
44
import { render_effect } from '../../reactivity/effects.js';
5-
import { insert, remove } from '../../reconciler.js';
5+
import { insert, remove } from '../reconciler.js';
66

77
/**
88
* @param {Element | Text | Comment} anchor

packages/svelte/src/internal/client/dom/blocks/each.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import {
1313
hydrate_block_anchor,
1414
hydrating,
1515
set_current_hydration_fragment
16-
} from '../../hydration.js';
17-
import { clear_text_content, empty, map_get, map_set } from '../../operations.js';
18-
import { insert, remove } from '../../reconciler.js';
16+
} from '../hydration.js';
17+
import { clear_text_content, empty } from '../operations.js';
18+
import { insert, remove } from '../reconciler.js';
1919
import { current_block, execute_effect } from '../../runtime.js';
2020
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
2121
import { source, mutable_source, set } from '../../reactivity/sources.js';
22-
import { trigger_transitions } from '../../transitions.js';
23-
import { is_array, is_frozen } from '../../utils.js';
22+
import { trigger_transitions } from '../elements/transitions.js';
23+
import { is_array, is_frozen, map_get, map_set } from '../../utils.js';
2424
import { EACH_BLOCK, EACH_ITEM_BLOCK, STATE_SYMBOL } from '../../constants.js';
2525

2626
const NEW_BLOCK = -1;

packages/svelte/src/internal/client/dom/blocks/html.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { render_effect } from '../../reactivity/effects.js';
2-
import { reconcile_html, remove } from '../../reconciler.js';
2+
import { reconcile_html, remove } from '../reconciler.js';
33

44
/**
55
* @param {Element | Text | Comment} dom

packages/svelte/src/internal/client/dom/blocks/if.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import {
44
hydrate_block_anchor,
55
hydrating,
66
set_current_hydration_fragment
7-
} from '../../hydration.js';
8-
import { remove } from '../../reconciler.js';
7+
} from '../hydration.js';
8+
import { remove } from '../reconciler.js';
99
import { current_block, execute_effect } from '../../runtime.js';
1010
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
11-
import { trigger_transitions } from '../../transitions.js';
11+
import { trigger_transitions } from '../elements/transitions.js';
1212

1313
/** @returns {import('../../types.js').IfBlock} */
1414
function create_if_block() {

packages/svelte/src/internal/client/dom/blocks/key.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { UNINITIALIZED, KEY_BLOCK } from '../../constants.js';
2-
import { hydrate_block_anchor } from '../../hydration.js';
3-
import { remove } from '../../reconciler.js';
2+
import { hydrate_block_anchor } from '../hydration.js';
3+
import { remove } from '../reconciler.js';
44
import { current_block, execute_effect } from '../../runtime.js';
55
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
6-
import { trigger_transitions } from '../../transitions.js';
6+
import { trigger_transitions } from '../elements/transitions.js';
77
import { safe_not_equal } from '../../reactivity/equality.js';
88

99
/** @returns {import('../../types.js').KeyBlock} */

packages/svelte/src/internal/client/dom/blocks/snippet.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SNIPPET_BLOCK } from '../../constants.js';
22
import { render_effect } from '../../reactivity/effects.js';
3-
import { remove } from '../../reconciler.js';
3+
import { remove } from '../reconciler.js';
44
import { current_block, untrack } from '../../runtime.js';
55

66
/**

packages/svelte/src/internal/client/dom/blocks/svelte-component.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { DYNAMIC_COMPONENT_BLOCK } from '../../constants.js';
2-
import { hydrate_block_anchor } from '../../hydration.js';
2+
import { hydrate_block_anchor } from '../hydration.js';
33
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
4-
import { remove } from '../../reconciler.js';
4+
import { remove } from '../reconciler.js';
55
import { current_block, execute_effect } from '../../runtime.js';
6-
import { trigger_transitions } from '../../transitions.js';
6+
import { trigger_transitions } from '../elements/transitions.js';
77

88
/**
99
* @template P

packages/svelte/src/internal/client/dom/blocks/svelte-element.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { namespace_svg } from '../../../../constants.js';
22
import { DYNAMIC_ELEMENT_BLOCK } from '../../constants.js';
3-
import { current_hydration_fragment, hydrate_block_anchor, hydrating } from '../../hydration.js';
4-
import { empty } from '../../operations.js';
3+
import { current_hydration_fragment, hydrate_block_anchor, hydrating } from '../hydration.js';
4+
import { empty } from '../operations.js';
55
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
6-
import { insert, remove } from '../../reconciler.js';
6+
import { insert, remove } from '../reconciler.js';
77
import { current_block, execute_effect } from '../../runtime.js';
88
import { is_array } from '../../utils.js';
99

packages/svelte/src/internal/client/dom/blocks/svelte-head.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import {
44
get_hydration_fragment,
55
hydrating,
66
set_current_hydration_fragment
7-
} from '../../hydration.js';
8-
import { empty } from '../../operations.js';
7+
} from '../hydration.js';
8+
import { empty } from '../operations.js';
99
import { render_effect } from '../../reactivity/effects.js';
10-
import { remove } from '../../reconciler.js';
10+
import { remove } from '../reconciler.js';
1111
import { current_block } from '../../runtime.js';
1212

1313
/**
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { effect } from '../../reactivity/effects.js';
2+
import { deep_read_state, untrack } from '../../runtime.js';
3+
4+
/**
5+
* @template P
6+
* @param {Element} dom
7+
* @param {(dom: Element, value?: P) => import('#client').ActionPayload<P>} action
8+
* @param {() => P} [value_fn]
9+
* @returns {void}
10+
*/
11+
export function action(dom, action, value_fn) {
12+
/** @type {undefined | import('#client').ActionPayload<P>} */
13+
var payload = undefined;
14+
var needs_deep_read = false;
15+
16+
// Action could come from a prop, therefore could be a signal, therefore untrack
17+
// TODO we could take advantage of this and enable https://github.com/sveltejs/svelte/issues/6942
18+
effect(() => {
19+
if (value_fn) {
20+
var value = value_fn();
21+
untrack(() => {
22+
if (payload === undefined) {
23+
payload = action(dom, value) || {};
24+
needs_deep_read = !!payload?.update;
25+
} else {
26+
var update = payload.update;
27+
if (typeof update === 'function') {
28+
update(value);
29+
}
30+
}
31+
});
32+
// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.
33+
// This works in legacy mode because of mutable_source being updated as a whole, but when using $state
34+
// together with actions and mutation, it wouldn't notice the change without a deep read.
35+
if (needs_deep_read) {
36+
deep_read_state(value);
37+
}
38+
} else {
39+
untrack(() => (payload = action(dom)));
40+
}
41+
});
42+
43+
effect(() => {
44+
if (payload !== undefined) {
45+
var destroy = payload.destroy;
46+
if (typeof destroy === 'function') {
47+
return () => {
48+
/** @type {Function} */ (destroy)();
49+
};
50+
}
51+
}
52+
});
53+
}

packages/svelte/src/internal/client/dom/elements/attributes.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { DEV } from 'esm-env';
2-
import { hydrating } from '../../hydration.js';
2+
import { hydrating } from '../hydration.js';
33
import { render_effect } from '../../reactivity/effects.js';
4-
import { get_descriptors, object_assign } from '../../utils.js';
5-
import { map_get, map_set } from '../../operations.js';
4+
import { get_descriptors, map_get, map_set, object_assign } from '../../utils.js';
65
import { AttributeAliases, DelegatedEvents, namespace_svg } from '../../../../constants.js';
76
import { delegate } from './events.js';
87
import { autofocus } from './misc.js';

packages/svelte/src/internal/client/dom/bindings/input.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/input.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DEV } from 'esm-env';
2-
import { render_effect } from '../../reactivity/effects.js';
3-
import { stringify } from '../../render.js';
2+
import { render_effect } from '../../../reactivity/effects.js';
3+
import { stringify } from '../../../render.js';
44

55
/**
66
* @param {HTMLInputElement} input

packages/svelte/src/internal/client/dom/bindings/media.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/media.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { hydrating } from '../../hydration.js';
2-
import { destroy_effect, managed_effect, render_effect } from '../../reactivity/effects.js';
2+
import { destroy_effect, managed_effect, render_effect } from '../../../reactivity/effects.js';
33
import { listen } from './shared.js';
44

55
/** @param {TimeRanges} ranges */

packages/svelte/src/internal/client/dom/bindings/props.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/props.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { render_effect } from '../../reactivity/effects.js';
2-
import { get_descriptor } from '../../utils.js';
1+
import { render_effect } from '../../../reactivity/effects.js';
2+
import { get_descriptor } from '../../../utils.js';
33

44
/**
55
* Makes an `export`ed (non-prop) variable available on the `$$props` object

packages/svelte/src/internal/client/dom/bindings/select.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/select.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { effect } from '../../reactivity/effects.js';
1+
import { effect } from '../../../reactivity/effects.js';
22

33
/**
44
* Selects the correct option(s) (depending on whether this is a multiple select)

packages/svelte/src/internal/client/dom/bindings/shared.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/shared.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../reactivity/effects.js';
1+
import { render_effect } from '../../../reactivity/effects.js';
22

33
/**
44
* Fires the handler once immediately (unless corresponding arg is set to `false`),

packages/svelte/src/internal/client/dom/bindings/size.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/size.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { effect, render_effect } from '../../reactivity/effects.js';
2-
import { untrack } from '../../runtime.js';
1+
import { effect, render_effect } from '../../../reactivity/effects.js';
2+
import { untrack } from '../../../runtime.js';
33

44
/**
55
* Resize observer singleton.

packages/svelte/src/internal/client/dom/bindings/this.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/this.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { STATE_SYMBOL } from '../../constants.js';
2-
import { effect } from '../../reactivity/effects.js';
3-
import { untrack } from '../../runtime.js';
1+
import { STATE_SYMBOL } from '../../../constants.js';
2+
import { effect } from '../../../reactivity/effects.js';
3+
import { untrack } from '../../../runtime.js';
44

55
/**
66
* @param {any} bound_value

packages/svelte/src/internal/client/dom/bindings/universal.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/universal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../reactivity/effects.js';
1+
import { render_effect } from '../../../reactivity/effects.js';
22

33
/**
44
* @param {'innerHTML' | 'textContent' | 'innerText'} property

packages/svelte/src/internal/client/dom/bindings/window.js renamed to packages/svelte/src/internal/client/dom/elements/bindings/window.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../reactivity/effects.js';
1+
import { render_effect } from '../../../reactivity/effects.js';
22
import { listen } from './shared.js';
33

44
/**

packages/svelte/src/internal/client/dom/elements/class.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { hydrating } from '../../hydration.js';
2-
import { set_class_name } from '../../operations.js';
1+
import { hydrating } from '../hydration.js';
2+
import { set_class_name } from '../operations.js';
33
import { render_effect } from '../../reactivity/effects.js';
44

55
/**

packages/svelte/src/internal/client/custom-element.js renamed to packages/svelte/src/internal/client/dom/elements/custom-element.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { createClassComponent } from '../../legacy/legacy-client.js';
2-
import { destroy_effect, render_effect } from './reactivity/effects.js';
3-
import { open, close } from './dom/template.js';
4-
import { define_property } from './utils.js';
1+
import { createClassComponent } from '../../../../legacy/legacy-client.js';
2+
import { destroy_effect, render_effect } from '../../reactivity/effects.js';
3+
import { open, close } from '../template.js';
4+
import { define_property } from '../../utils.js';
55

66
/**
77
* @typedef {Object} CustomElementPropDefinition

packages/svelte/src/internal/client/dom/elements/misc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { hydrating } from '../../hydration.js';
1+
import { hydrating } from '../hydration.js';
22
import { render_effect } from '../../reactivity/effects.js';
33
import { current_block } from '../../runtime.js';
44

0 commit comments

Comments
 (0)