From 2ae3aa0993b076fded6ccc6098ad2d53a09876d4 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 13 Jan 2025 18:52:01 -0500 Subject: [PATCH] fix --- packages/svelte/scripts/generate-types.js | 2 +- .../client/dom/elements/attachments.js | 2 +- packages/svelte/types/index.d.ts | 22 ++++++++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/svelte/scripts/generate-types.js b/packages/svelte/scripts/generate-types.js index 1f718e9b5b..27422272ca 100644 --- a/packages/svelte/scripts/generate-types.js +++ b/packages/svelte/scripts/generate-types.js @@ -30,7 +30,7 @@ await createBundle({ [pkg.name]: `${dir}/src/index.d.ts`, [`${pkg.name}/action`]: `${dir}/src/action/public.d.ts`, [`${pkg.name}/animate`]: `${dir}/src/animate/public.d.ts`, - [`${pkg.name}/attachments`]: `${dir}/src/attachments/public.d.ts`, + [`${pkg.name}/attachments`]: `${dir}/src/attachments/index.js`, [`${pkg.name}/compiler`]: `${dir}/src/compiler/public.d.ts`, [`${pkg.name}/easing`]: `${dir}/src/easing/index.js`, [`${pkg.name}/legacy`]: `${dir}/src/legacy/legacy-client.js`, diff --git a/packages/svelte/src/internal/client/dom/elements/attachments.js b/packages/svelte/src/internal/client/dom/elements/attachments.js index a912012aa4..7376a4d4e6 100644 --- a/packages/svelte/src/internal/client/dom/elements/attachments.js +++ b/packages/svelte/src/internal/client/dom/elements/attachments.js @@ -1,6 +1,6 @@ import { effect } from '../../reactivity/effects.js'; -const key = `@attach-${Math.random().toString(36).slice(2)}`; +const key = `@attach-${/*@__PURE__*/ Math.random().toString(36).slice(2)}`; const name = `Symbol(${key})`; // TODO this feels a bit belt-and-braces to me, tbh — are we sure we need it? diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index d00b2b01ed..90e928fb7e 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -621,6 +621,19 @@ declare module 'svelte/animate' { export {}; } +declare module 'svelte/attachments' { + /** + * Creates a `Symbol` that Svelte recognises as an attachment key + */ + export function createAttachmentKey(): symbol; + /** + * Returns `true` if the symbol was created with `createAttachmentKey` + * */ + export function isAttachmentKey(key: string | symbol): boolean; + + export {}; +} + declare module 'svelte/compiler' { import type { Expression, Identifier, ArrayExpression, ArrowFunctionExpression, VariableDeclaration, VariableDeclarator, MemberExpression, Node, ObjectExpression, Pattern, Program, ChainExpression, SimpleCallExpression, SequenceExpression } from 'estree'; import type { SourceMap } from 'magic-string'; @@ -1050,6 +1063,12 @@ declare module 'svelte/compiler' { expression: SimpleCallExpression | (ChainExpression & { expression: SimpleCallExpression }); } + /** A `{@attach foo(...)} tag */ + export interface AttachTag extends BaseNode { + type: 'AttachTag'; + expression: Expression; + } + /** An `animate:` directive */ export interface AnimateDirective extends BaseNode { type: 'AnimateDirective'; @@ -1132,7 +1151,7 @@ declare module 'svelte/compiler' { interface BaseElement extends BaseNode { name: string; - attributes: Array; + attributes: Array; fragment: Fragment; } @@ -1322,6 +1341,7 @@ declare module 'svelte/compiler' { | AST.Attribute | AST.SpreadAttribute | Directive + | AST.AttachTag | AST.Comment | Block;