index.js — svelte Source File
Architecture documentation for index.js, a javascript file in the svelte codebase. 5 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 046e8489_7de3_c124_9983_4b051435f74f["index.js"] 73865c3c_2786_c9ac_d34f_b51d28b3a29e["constants.js"] 046e8489_7de3_c124_9983_4b051435f74f --> 73865c3c_2786_c9ac_d34f_b51d28b3a29e 717fc8d5_bdb4_4b73_d6c5_c4a367a60cf2["index-client.js"] 046e8489_7de3_c124_9983_4b051435f74f --> 717fc8d5_bdb4_4b73_d6c5_c4a367a60cf2 1ae6fa4e_16ee_acdf_5e28_17eb0819fddb["effects.js"] 046e8489_7de3_c124_9983_4b051435f74f --> 1ae6fa4e_16ee_acdf_5e28_17eb0819fddb 20340432_01a2_6741_abf4_60ccab51cdb3["teardown"] 046e8489_7de3_c124_9983_4b051435f74f --> 20340432_01a2_6741_abf4_60ccab51cdb3 1a59b12b_63d5_2eb4_1881_6fb96dbdcb56["client"] 046e8489_7de3_c124_9983_4b051435f74f --> 1a59b12b_63d5_2eb4_1881_6fb96dbdcb56 style 046e8489_7de3_c124_9983_4b051435f74f fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
/** @import { Action, ActionReturn } from '../action/public' */
/** @import { Attachment } from './public' */
import { noop, render_effect } from 'svelte/internal/client';
import { ATTACHMENT_KEY } from '../constants.js';
import { untrack } from '../index-client.js';
import { teardown } from '../internal/client/reactivity/effects.js';
/**
* Creates an object key that will be recognised as an attachment when the object is spread onto an element,
* as a programmatic alternative to using `{@attach ...}`. This can be useful for library authors, though
* is generally not needed when building an app.
*
* ```svelte
* <script>
* import { createAttachmentKey } from 'svelte/attachments';
*
* const props = {
* class: 'cool',
* onclick: () => alert('clicked'),
* [createAttachmentKey()]: (node) => {
* node.textContent = 'attached!';
* }
* };
* </script>
*
* <button {...props}>click me</button>
* ```
* @since 5.29
*/
export function createAttachmentKey() {
return Symbol(ATTACHMENT_KEY);
}
/**
* Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.
* It's useful if you want to start using attachments on components but you have actions provided by a library.
*
* Note that the second argument, if provided, must be a function that _returns_ the argument to the
* action function, not the argument itself.
*
* ```svelte
* <!-- with an action -->
* <div use:foo={bar}>...</div>
*
* <!-- with an attachment -->
* <div {@attach fromAction(foo, () => bar)}>...</div>
* ```
* @template {EventTarget} E
* @template {unknown} T
* @overload
* @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function
* @param {() => T} fn A function that returns the argument for the action
* @returns {Attachment<E>}
*/
/**
* Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.
* It's useful if you want to start using attachments on components but you have actions provided by a library.
*
* Note that the second argument, if provided, must be a function that _returns_ the argument to the
* action function, not the argument itself.
*
* ```svelte
* <!-- with an action -->
* <div use:foo={bar}>...</div>
*
* <!-- with an attachment -->
* <div {@attach fromAction(foo, () => bar)}>...</div>
* ```
* @template {EventTarget} E
* @overload
* @param {Action<E, void> | ((element: E) => void | ActionReturn<void>)} action The action function
* @returns {Attachment<E>}
*/
/**
* Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.
* It's useful if you want to start using attachments on components but you have actions provided by a library.
*
* Note that the second argument, if provided, must be a function that _returns_ the argument to the
* action function, not the argument itself.
*
* ```svelte
* <!-- with an action -->
* <div use:foo={bar}>...</div>
*
* <!-- with an attachment -->
* <div {@attach fromAction(foo, () => bar)}>...</div>
* ```
*
* @template {EventTarget} E
* @template {unknown} T
* @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function
* @param {() => T} fn A function that returns the argument for the action
* @returns {Attachment<E>}
* @since 5.32
*/
export function fromAction(action, fn = /** @type {() => T} */ (noop)) {
return (element) => {
const { update, destroy } = untrack(() => action(element, fn()) ?? {});
if (update) {
var ran = false;
render_effect(() => {
const arg = fn();
if (ran) update(arg);
});
ran = true;
}
if (destroy) {
teardown(destroy);
}
};
}
Domain
Subdomains
Functions
Dependencies
Source
Frequently Asked Questions
What does index.js do?
index.js is a source file in the svelte codebase, written in javascript. It belongs to the SharedInternal domain, BitFlags subdomain.
What functions are defined in index.js?
index.js defines 2 function(s): createAttachmentKey, fromAction.
What does index.js depend on?
index.js imports 5 module(s): client, constants.js, effects.js, index-client.js, teardown.
Where is index.js in the architecture?
index.js is located at packages/svelte/src/attachments/index.js (domain: SharedInternal, subdomain: BitFlags, directory: packages/svelte/src/attachments).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free