diff --git a/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts b/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts index b5d16ab9b..0ce697409 100644 --- a/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts +++ b/packages/svelte2tsx/src/svelte2tsx/createRenderFunction.ts @@ -106,7 +106,10 @@ export function createRenderFunction({ '}'; const returnString = - `\nreturn { props: ${exportedNames.createPropsStr(isTsFile, uses$$props)}` + + `\nreturn { props: ${exportedNames.createPropsStr( + isTsFile, + uses$$props || uses$$restProps + )}` + `, slots: ${slotsAsDef}` + `, events: ${events.toDefString()} }}`; diff --git a/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts b/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts index 59a99f697..c8876ae85 100644 --- a/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts +++ b/packages/svelte2tsx/src/svelte2tsx/nodes/ExportedNames.ts @@ -324,9 +324,9 @@ export class ExportedNames { * Creates a string from the collected props * * @param isTsFile Whether this is a TypeScript file or not. - * @param uses$$propsValue whether the file references the $$props variable + * @param uses$$propsOr$$restProps whether the file references the $$props or $$restProps variable */ - createPropsStr(isTsFile: boolean, uses$$propsValue: boolean): string { + createPropsStr(isTsFile: boolean, uses$$propsOr$$restProps: boolean): string { const names = Array.from(this.exports.entries()); if (this.uses$$Props) { @@ -343,7 +343,7 @@ export class ExportedNames { this.createReturnElementsType(lets).join(',') + '}>(__sveltets_2_any("") as $$Props), ' + '...__sveltets_2_ensureRightProps<' + - (uses$$propsValue ? 'Partial<$$Props>' : '$$Props') + + (uses$$propsOr$$restProps ? 'Partial<$$Props>' : '$$Props') + '>({' + this.createReturnElements(lets, false).join(',') + '}), ...{} as unknown as $$Props, ...{' + @@ -357,7 +357,7 @@ export class ExportedNames { ); } - if (names.length === 0 && !uses$$propsValue) { + if (names.length === 0 && !uses$$propsOr$$restProps) { // Necessary, because {} roughly equals to any return isTsFile ? '{} as Record' diff --git a/packages/svelte2tsx/svelte-shims.d.ts b/packages/svelte2tsx/svelte-shims.d.ts index f9f70a2b1..8130bb757 100644 --- a/packages/svelte2tsx/svelte-shims.d.ts +++ b/packages/svelte2tsx/svelte-shims.d.ts @@ -138,20 +138,7 @@ type KeysMatching = {[K in keyof Obj]-?: Obj[K] extends V ? K : never}[k declare type __sveltets_2_CustomEvents = {[K in KeysMatching]: T[K] extends CustomEvent ? T[K]['detail']: T[K]} declare var process: NodeJS.Process & { browser: boolean } -// declare var __sveltets_1_AnimationMove: { from: DOMRect, to: DOMRect } - -// declare function __sveltets_1_ensureAnimation(animationCall: SvelteAnimationReturnType): {}; -// declare function __sveltets_1_ensureAction(actionCall: SvelteActionReturnType): {}; -// declare function __sveltets_1_ensureTransition(transitionCall: SvelteTransitionReturnType): {}; -// declare function __sveltets_1_ensureFunction(expression: (e: Event & { detail?: any }) => unknown ): {}; -// // Includes undefined and null for all types as all usages also allow these -// declare function __sveltets_1_ensureType(type: AConstructorTypeOf, el: T | undefined | null): {}; -// declare function __sveltets_1_ensureType(type1: AConstructorTypeOf, type2: AConstructorTypeOf, el: T1 | T2 | undefined | null): {}; - -// declare function __sveltets_1_createEnsureSlot>>(): (k1: K1, k2: K2, val: Slots[K1][K2]) => Slots[K1][K2]; declare function __sveltets_2_ensureRightProps(props: Props): {}; -// declare function __sveltets_1_cssProp(prop: Record): {}; -// declare function __sveltets_1_ctorOf(type: T): AConstructorTypeOf; declare function __sveltets_2_instanceOf(type: AConstructorTypeOf): T; declare function __sveltets_2_allPropsType(): SvelteAllProps declare function __sveltets_2_restPropsType(): SvelteRestProps @@ -202,15 +189,6 @@ declare function __sveltets_2_mapBodyEvent( declare function __sveltets_2_mapElementEvent( event: K ): HTMLElementEventMap[K]; -// declare function __sveltets_1_mapElementTag( -// tag: K -// ): ElementTagNameMap[K]; -// declare function __sveltets_1_mapElementTag( -// tag: K -// ): SVGElementTagNameMap[K]; -// declare function __sveltets_1_mapElementTag( -// tag: any -// ): any; // needs to be any because used in context of declare function __sveltets_2_bubbleEventDef( events: Events, eventKey: K @@ -227,17 +205,6 @@ declare function __sveltets_2_unionType(t1: T1, t2: T2, t3: T3): T1 declare function __sveltets_2_unionType(t1: T1, t2: T2, t3: T3, t4: T4): T1 | T2 | T3 | T4; declare function __sveltets_2_unionType(...types: any[]): any; -// declare function __sveltets_1_awaitThen( -// promise: T, -// onfulfilled: (value: T extends PromiseLike ? U : T) => any, -// onrejected?: (value: T extends PromiseLike ? any : never) => any -// ): any; - -// declare function __sveltets_1_each>( -// array: T, -// callbackfn: (value: T extends ArrayLike ? U : any, index: number) => any -// ): any; - declare function __sveltets_2_createSvelte2TsxComponent( render: {props: Props, events: Events, slots: Slots } ): SvelteComponentConstructor,Svelte2TsxComponentConstructorParameters>; diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps-script/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps-script/expectedv2.ts index 1547df14b..7adca1938 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps-script/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps-script/expectedv2.ts @@ -5,7 +5,7 @@ ; async () => { { svelteHTML.createElement("h1", {});name; } }; -return { props: /** @type {Record} */ ({}), slots: {}, events: {} }} +return { props: {}, slots: {}, events: {} }} export default class Input__SvelteComponent_ extends __sveltets_2_createSvelte2TsxComponent(__sveltets_2_partial_with_any(__sveltets_2_with_any_event(render()))) { } \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps/expectedv2.ts index 485581426..83554f0ea 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps/expectedv2.ts +++ b/packages/svelte2tsx/test/svelte2tsx/samples/uses-$$restProps/expectedv2.ts @@ -1,7 +1,7 @@ /// ;function render() { let $$restProps = __sveltets_2_restPropsType(); async () => { { svelteHTML.createElement("h1", {});$$restProps['name']; }}; -return { props: /** @type {Record} */ ({}), slots: {}, events: {} }} +return { props: {}, slots: {}, events: {} }} export default class Input__SvelteComponent_ extends __sveltets_2_createSvelte2TsxComponent(__sveltets_2_partial_with_any(__sveltets_2_with_any_event(render()))) { } \ No newline at end of file