diff --git a/.changeset/ninety-days-visit.md b/.changeset/ninety-days-visit.md new file mode 100644 index 000000000..51e6e5267 --- /dev/null +++ b/.changeset/ninety-days-visit.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: support function invocation from imported `*.svelte` components diff --git a/.changeset/pre.json b/.changeset/pre.json index aedd9df5b..269df9843 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -268,6 +268,7 @@ "kind-spoons-return", "large-clouds-carry", "large-turkeys-deny", + "large-waves-join", "late-bees-vanish", "late-crabs-lay", "late-grapes-judge", @@ -295,6 +296,7 @@ "loud-cheetahs-flow", "loud-mugs-smile", "loud-numbers-flow", + "loud-penguins-unite", "loud-ravens-drop", "loud-socks-look", "lovely-bugs-sneeze", @@ -324,6 +326,7 @@ "moody-houses-argue", "moody-owls-cry", "moody-sheep-type", + "nasty-glasses-begin", "nasty-lions-double", "nasty-yaks-peel", "neat-boats-shake", @@ -338,6 +341,7 @@ "new-rabbits-flow", "nice-avocados-move", "nine-cooks-join", + "ninety-days-visit", "ninety-dingos-walk", "ninety-dots-train", "ninety-rockets-battle", @@ -394,6 +398,7 @@ "quiet-cobras-smile", "quiet-crabs-nail", "quiet-timers-speak", + "rare-insects-tell", "rare-mirrors-act", "rare-pears-whisper", "rare-worms-hunt", @@ -475,6 +480,7 @@ "slow-beds-shave", "slow-chefs-dream", "slow-kids-sparkle", + "slow-ligers-enjoy", "slow-plums-chew", "slow-wombats-reply", "small-apples-eat", diff --git a/.changeset/slow-ligers-enjoy.md b/.changeset/slow-ligers-enjoy.md new file mode 100644 index 000000000..99bc046de --- /dev/null +++ b/.changeset/slow-ligers-enjoy.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: adjust module declaration to work around language tools bug diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index fdf345996..b132e414a 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,25 @@ # svelte +## 5.0.0-next.158 + +### Patch Changes + +- fix: adjust module declaration to work around language tools bug ([#12071](https://github.com/sveltejs/svelte/pull/12071)) + +## 5.0.0-next.157 + +### Patch Changes + +- fix: handle `is` attribute on elements with spread ([#12056](https://github.com/sveltejs/svelte/pull/12056)) + +- fix: correctly process empty lines in messages ([#12057](https://github.com/sveltejs/svelte/pull/12057)) + +- fix: rewrite state_unsafe_mutation message ([#12059](https://github.com/sveltejs/svelte/pull/12059)) + +- fix: support function invocation from imported `*.svelte` components ([#12061](https://github.com/sveltejs/svelte/pull/12061)) + +- fix: better types for `on` ([#12053](https://github.com/sveltejs/svelte/pull/12053)) + ## 5.0.0-next.156 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 2b0d1c5d4..09c70a152 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -2,7 +2,7 @@ "name": "svelte", "description": "Cybernetically enhanced web apps", "license": "MIT", - "version": "5.0.0-next.156", + "version": "5.0.0-next.158", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/scripts/process-messages/index.js b/packages/svelte/scripts/process-messages/index.js index 71a979d51..ea0a40c49 100644 --- a/packages/svelte/scripts/process-messages/index.js +++ b/packages/svelte/scripts/process-messages/index.js @@ -293,6 +293,54 @@ function transform(name, dest) { } }); }, + TemplateLiteral(node, context) { + /** @type {import('estree').TemplateElement} */ + let quasi = { + type: 'TemplateElement', + value: { + ...node.quasis[0].value + }, + tail: node.quasis[0].tail + }; + + /** @type {import('estree').TemplateLiteral} */ + let out = { + type: 'TemplateLiteral', + quasis: [quasi], + expressions: [] + }; + + for (let i = 0; i < node.expressions.length; i += 1) { + const q = node.quasis[i + 1]; + const e = node.expressions[i]; + + if (e.type === 'Literal' && e.value === 'CODE') { + quasi.value.raw += code + q.value.raw; + continue; + } + + if (e.type === 'Identifier' && e.name === 'MESSAGE') { + if (message.type === 'Literal') { + const str = /** @type {string} */ (message.value).replace(/(`|\${)/g, '\\$1'); + quasi.value.raw += str + q.value.raw; + continue; + } + + if (message.type === 'TemplateLiteral') { + quasi.value.raw += message.quasis[0].value.raw + q.value.raw; + out.quasis.push(...message.quasis.slice(1)); + out.expressions.push(...message.expressions); + quasi = message.quasis[message.quasis.length - 1]; + continue; + } + } + + out.quasis.push((quasi = q)); + out.expressions.push(/** @type {import('estree').Expression} */ (context.visit(e))); + } + + return out; + }, Literal(node) { if (node.value === 'CODE') { return { diff --git a/packages/svelte/src/ambient.d.ts b/packages/svelte/src/ambient.d.ts index d024c5d52..35bc292be 100644 --- a/packages/svelte/src/ambient.d.ts +++ b/packages/svelte/src/ambient.d.ts @@ -1,5 +1,19 @@ declare module '*.svelte' { - export { SvelteComponent as default } from 'svelte'; + // use prettier-ignore for a while because of https://github.com/sveltejs/language-tools/commit/026111228b5814a9109cc4d779d37fb02955fb8b + // prettier-ignore + import { SvelteComponent, Component, type ComponentConstructorOptions } from 'svelte' + + // Support using the component as both a class and function during the transition period + // prettier-ignore + interface ComponentType { + ( + ...args: Parameters>> + ): ReturnType, Record>> + new (o: ComponentConstructorOptions): SvelteComponent + } + const Comp: ComponentType; + type Comp = SvelteComponent; + export default Comp; } /** diff --git a/packages/svelte/src/index.d.ts b/packages/svelte/src/index.d.ts index a5e8aaf17..393d89498 100644 --- a/packages/svelte/src/index.d.ts +++ b/packages/svelte/src/index.d.ts @@ -170,6 +170,7 @@ export class SvelteComponentTyped< /** * @deprecated The new `Component` type does not have a dedicated Events type. Use `ComponentProps` instead. * + * @description * Convenience type to get the events the given component expects. Example: * ```html *