From 7f894809c86ade7e0b35d79c7d3877dd22130348 Mon Sep 17 00:00:00 2001 From: "Lyu, Wei-Da" <36730922+jasonlyu123@users.noreply.github.com> Date: Sat, 25 Jul 2020 18:07:55 +0800 Subject: [PATCH] (svelte2tsx) export class, const and function (#328) * export const and class are not props * add getters for exported to exported class --- .../typescript/features/RenameProvider.ts | 2 +- packages/svelte2tsx/.editorconfig | 2 + packages/svelte2tsx/src/interfaces.ts | 25 +++++ .../svelte2tsx/src/nodes/exportgetters.ts | 9 ++ packages/svelte2tsx/src/svelte2tsx.ts | 106 ++++++++++-------- packages/svelte2tsx/src/utils/tsAst.ts | 5 + .../svelte2tsx/test/sourcemaps/.editorconfig | 2 - .../test/sourcemaps/event-binding.html | 2 +- packages/svelte2tsx/test/sourcemaps/let.html | 2 +- packages/svelte2tsx/test/sourcemaps/repl.html | 2 +- .../samples/array-binding-export/expected.tsx | 2 +- .../samples/ast-offset-none/expected.tsx | 4 +- .../samples/ast-offset-some/expected.tsx | 4 +- .../samples/await-with-$store/expected.tsx | 2 +- .../samples/binding-group-store/expected.tsx | 2 +- .../circle-drawer-example/expected.tsx | 4 +- .../component-default-slot/expected.tsx | 4 +- .../component-multiple-slots/expected.tsx | 4 +- .../expected.tsx | 4 +- .../component-with-documentation/expected.tsx | 2 +- .../expected.tsx | 2 +- .../expected.tsx | 2 +- .../export-arrow-function/expected.tsx | 2 +- .../samples/export-class/expected.tsx | 12 ++ .../samples/export-class/input.svelte | 3 + .../samples/export-const/expected.tsx | 6 +- .../samples/export-const/input.svelte | 1 + .../samples/export-has-type/expected.tsx | 2 +- .../samples/export-interface/expected.tsx | 2 +- .../samples/export-js-strictMode/expected.tsx | 2 +- .../samples/export-list/expected.tsx | 2 +- .../export-references-local/expected.tsx | 2 +- .../samples/export-ts-strictMode/expected.tsx | 2 +- .../export-with-default-multi/expected.tsx | 2 +- .../samples/import-single-quote/expected.tsx | 2 +- .../svelte2tsx/samples/imports/expected.tsx | 2 +- .../expected.tsx | 4 +- .../expected.tsx | 4 +- .../module-script-and-script/expected.tsx | 4 +- .../module-script-and-script2/expected.tsx | 4 +- .../samples/multiple-export/expected.tsx | 2 +- .../nested-$-variables-script/expected.tsx | 4 +- .../nested-$-variables-template/expected.tsx | 4 +- .../object-binding-export/expected.tsx | 2 +- .../samples/reactive-block/expected.tsx | 2 +- .../reactive-declare-object/expected.tsx | 2 +- .../samples/reactive-declare/expected.tsx | 2 +- .../samples/renamed-exports/expected.tsx | 2 +- .../script-and-module-script/expected.tsx | 4 +- .../expected.tsx | 4 +- .../samples/script-on-bottom/expected.tsx | 4 +- .../script-style-like-component/expected.tsx | 4 +- .../self-closing-component/expected.tsx | 2 +- .../samples/single-element/expected.tsx | 4 +- .../samples/single-export/expected.tsx | 4 +- .../samples/stores-mustache/expected.tsx | 4 +- .../samples/style-attribute-bare/expected.tsx | 2 +- .../samples/style-attribute/expected.tsx | 2 +- .../svelte2tsx/samples/style/expected.tsx | 2 +- .../typed-export-with-default/expected.tsx | 2 +- .../samples/uses-$$props-script/expected.tsx | 2 +- .../uses-$$props-ts-strictMode/expected.tsx | 2 +- .../samples/uses-$$props/expected.tsx | 2 +- .../uses-$$restProps-script/expected.tsx | 2 +- .../samples/uses-$$restProps/expected.tsx | 2 +- .../uses-$store-in-event-binding/expected.tsx | 4 +- .../expected.tsx | 2 +- .../expected.tsx | 2 +- .../uses-$store-with-increments/expected.tsx | 2 +- .../samples/uses-$store/expected.tsx | 4 +- .../uses-svelte-components/expected.tsx | 4 +- 71 files changed, 206 insertions(+), 131 deletions(-) create mode 100644 packages/svelte2tsx/src/interfaces.ts create mode 100644 packages/svelte2tsx/src/nodes/exportgetters.ts create mode 100644 packages/svelte2tsx/src/utils/tsAst.ts delete mode 100644 packages/svelte2tsx/test/sourcemaps/.editorconfig create mode 100644 packages/svelte2tsx/test/svelte2tsx/samples/export-class/expected.tsx create mode 100644 packages/svelte2tsx/test/svelte2tsx/samples/export-class/input.svelte diff --git a/packages/language-server/src/plugins/typescript/features/RenameProvider.ts b/packages/language-server/src/plugins/typescript/features/RenameProvider.ts index 7d58d62f3..21e956781 100644 --- a/packages/language-server/src/plugins/typescript/features/RenameProvider.ts +++ b/packages/language-server/src/plugins/typescript/features/RenameProvider.ts @@ -152,7 +152,7 @@ export class RenameProviderImpl implements RenameProvider { // First find out if it's really the "rename prop inside component with that prop" case // Use original document for that because only there the `export` is present. const regex = new RegExp( - `export\\s+(const|let)\\s+${this.getVariableAtPosition( + `export\\s+let\\s+${this.getVariableAtPosition( tsDoc, fragment, lang, diff --git a/packages/svelte2tsx/.editorconfig b/packages/svelte2tsx/.editorconfig index 8bb5c4b84..d53e0fbf7 100644 --- a/packages/svelte2tsx/.editorconfig +++ b/packages/svelte2tsx/.editorconfig @@ -1,2 +1,4 @@ [test/**/*.{tsx,jsx,html}] trim_trailing_whitespace = false +[test/**/*.html] +insert_final_newline = false diff --git a/packages/svelte2tsx/src/interfaces.ts b/packages/svelte2tsx/src/interfaces.ts new file mode 100644 index 000000000..11aac3bbc --- /dev/null +++ b/packages/svelte2tsx/src/interfaces.ts @@ -0,0 +1,25 @@ +import MagicString from 'magic-string'; +import { Node } from 'estree-walker'; + +export type ExportedNames = Map< + string, + { + type?: string; + identifierText?: string; + required?: boolean; + } +>; + +export interface InstanceScriptProcessResult { + exportedNames: ExportedNames; + uses$$props: boolean; + uses$$restProps: boolean; + getters: Set; +} + +export interface CreateRenderFunctionPara extends InstanceScriptProcessResult { + str: MagicString; + scriptTag: Node; + scriptDestination: number; + slots: Map>; +} diff --git a/packages/svelte2tsx/src/nodes/exportgetters.ts b/packages/svelte2tsx/src/nodes/exportgetters.ts new file mode 100644 index 000000000..63edf45cd --- /dev/null +++ b/packages/svelte2tsx/src/nodes/exportgetters.ts @@ -0,0 +1,9 @@ +export const createClassGetter = (name: string) => + `\n${' '.repeat(4)}get ${name}() { return render().getters.${name} }`; +export const createClassGetters = (names: Set) => { + return Array.from(names).map(createClassGetter).join(''); +}; +export function createRenderFunctionGetterStr(getters: Set) { + const properties = Array.from(getters).map((name) => `${name}: ${name}`); + return `{${properties.join(', ')}}`; +} diff --git a/packages/svelte2tsx/src/svelte2tsx.ts b/packages/svelte2tsx/src/svelte2tsx.ts index 70be3d887..95f47635e 100644 --- a/packages/svelte2tsx/src/svelte2tsx.ts +++ b/packages/svelte2tsx/src/svelte2tsx.ts @@ -6,6 +6,9 @@ import { parseHtmlx } from './htmlxparser'; import { convertHtmlxToJsx } from './htmlxtojsx'; import { Node } from 'estree-walker'; import * as ts from 'typescript'; +import { findExortKeyword } from './utils/tsAst'; +import { ExportedNames, InstanceScriptProcessResult, CreateRenderFunctionPara } from './interfaces'; +import { createRenderFunctionGetterStr, createClassGetters } from './nodes/exportgetters'; function AttributeValueAsJsExpression(htmlx: string, attr: Node): string { if (attr.value.length == 0) return "''"; //wut? @@ -364,20 +367,6 @@ function processSvelteTemplate(str: MagicString): TemplateProcessResult { }; } -type ExportedNames = Map< - string, - { - type?: string; - identifierText?: string; - required?: boolean; - } ->; - -type InstanceScriptProcessResult = { - exportedNames: ExportedNames; - uses$$props: boolean; - uses$$restProps: boolean; -}; function processInstanceScriptContent(str: MagicString, script: Node): InstanceScriptProcessResult { const htmlx = str.original; @@ -391,6 +380,7 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS ); const astOffset = script.content.start; const exportedNames: ExportedNames = new Map(); + const getters = new Set(); const implicitTopLevelNames: Map = new Map(); let uses$$props = false; @@ -431,6 +421,12 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS exportedNames.set(name.text, {}); } }; + const addGetter = (node: ts.Identifier) => { + if (!node) { + return; + } + getters.add(node.text); + }; const removeExport = (start: number, end: number) => { const exportStart = str.original.indexOf('export', start + astOffset); @@ -439,10 +435,6 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS }; const propTypeAssertToUserDefined = (node: ts.VariableDeclarationList) => { - if (node.flags !== ts.NodeFlags.Let) { - return; - } - const hasInitializers = node.declarations.filter((declaration) => declaration.initializer); const handleTypeAssertion = (declaration: ts.VariableDeclaration) => { const identifier = declaration.name; @@ -669,24 +661,31 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS const onLeaveCallbacks: onLeaveCallback[] = []; if (ts.isVariableStatement(node)) { - const exportModifier = node.modifiers - ? node.modifiers.find((x) => x.kind == ts.SyntaxKind.ExportKeyword) - : null; + const exportModifier = findExortKeyword(node); if (exportModifier) { - handleExportedVariableDeclarationList(node.declarationList); - propTypeAssertToUserDefined(node.declarationList); + const isLet = node.declarationList.flags === ts.NodeFlags.Let; + const isConst = node.declarationList.flags === ts.NodeFlags.Const; + + if (isLet) { + handleExportedVariableDeclarationList(node.declarationList); + propTypeAssertToUserDefined(node.declarationList); + } else if (isConst) { + node.declarationList.forEachChild((n) => { + if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name)) { + addGetter(n.name); + } + }); + } removeExport(exportModifier.getStart(), exportModifier.end); } } if (ts.isFunctionDeclaration(node)) { if (node.modifiers) { - const exportModifier = node.modifiers.find( - (x) => x.kind == ts.SyntaxKind.ExportKeyword, - ); + const exportModifier = findExortKeyword(node); if (exportModifier) { - addExport(node.name); removeExport(exportModifier.getStart(), exportModifier.end); + addGetter(node.name); } } @@ -694,6 +693,14 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS onLeaveCallbacks.push(() => popScope()); } + if (ts.isClassDeclaration(node)) { + const exportModifier = findExortKeyword(node); + if (exportModifier) { + removeExport(exportModifier.getStart(), exportModifier.end); + addGetter(node.name); + } + } + if (ts.isBlock(node)) { pushScope(); onLeaveCallbacks.push(() => popScope()); @@ -803,6 +810,7 @@ function processInstanceScriptContent(str: MagicString, script: Node): InstanceS exportedNames, uses$$props, uses$$restProps, + getters, }; } @@ -825,6 +833,7 @@ function addComponentExport( uses$$propsOr$$restProps: boolean, strictMode: boolean, isTsFile: boolean, + getters: Set, /** A named export allows for TSDoc-compatible docstrings */ className?: string, componentDocumentation?: string | null, @@ -841,10 +850,12 @@ function addComponentExport( const doc = formatComponentDocumentation(componentDocumentation); - // eslint-disable-next-line max-len - const statement = `\n\n${doc}export default class ${ - className ? `${className} ` : '' - }{\n $$prop_def = ${propDef}\n $$slot_def = render().slots\n}`; + const statement = + `\n\n${doc}export default class ${ + className ? `${className} ` : '' + }{\n $$prop_def = ${propDef}\n $$slot_def = render().slots` + + createClassGetters(getters) + + '\n}'; str.append(statement); } @@ -899,15 +910,16 @@ function processModuleScriptTag(str: MagicString, script: Node) { str.overwrite(scriptEndTagStart, script.end, ';<>'); } -function createRenderFunction( - str: MagicString, - scriptTag: Node, - scriptDestination: number, - slots: Map>, - exportedNames: ExportedNames, - uses$$props: boolean, - uses$$restProps: boolean, -) { +function createRenderFunction({ + str, + scriptTag, + scriptDestination, + slots, + getters, + exportedNames, + uses$$props, + uses$$restProps +}: CreateRenderFunctionPara) { const htmlx = str.original; let propsDecl = ''; @@ -946,7 +958,7 @@ function createRenderFunction( const returnString = `\nreturn { props: ${createPropsStr( exportedNames, - )}, slots: ${slotsAsDef} }}`; + )}, slots: ${slotsAsDef}, getters: ${createRenderFunctionGetterStr(getters)} }}`; str.append(returnString); } @@ -1008,27 +1020,30 @@ export function svelte2tsx(svelte: string, options?: { filename?: string; strict //move the instance script and process the content let exportedNames: ExportedNames = new Map(); + let getters = new Set(); if (scriptTag) { //ensure it is between the module script and the rest of the template (the variables need to be declared before the jsx template) if (scriptTag.start != instanceScriptTarget) { str.move(scriptTag.start, scriptTag.end, instanceScriptTarget); } const res = processInstanceScriptContent(str, scriptTag); - exportedNames = res.exportedNames; uses$$props = uses$$props || res.uses$$props; uses$$restProps = uses$$restProps || res.uses$$restProps; + + ({ exportedNames, getters } = res); } //wrap the script tag and template content in a function returning the slot and exports - createRenderFunction( + createRenderFunction({ str, scriptTag, - instanceScriptTarget, + scriptDestination: instanceScriptTarget, slots, + getters, exportedNames, uses$$props, uses$$restProps, - ); + }); // we need to process the module script after the instance script has moved otherwise we get warnings about moving edited items if (moduleScriptTag) { @@ -1042,6 +1057,7 @@ export function svelte2tsx(svelte: string, options?: { filename?: string; strict uses$$props || uses$$restProps, !!options?.strictMode, isTsFile(scriptTag, moduleScriptTag), + getters, className, componentDocumentation, ); diff --git a/packages/svelte2tsx/src/utils/tsAst.ts b/packages/svelte2tsx/src/utils/tsAst.ts new file mode 100644 index 000000000..852250c79 --- /dev/null +++ b/packages/svelte2tsx/src/utils/tsAst.ts @@ -0,0 +1,5 @@ +import ts from 'typescript'; + +export function findExortKeyword(node: ts.Node) { + return node.modifiers?.find((x) => x.kind == ts.SyntaxKind.ExportKeyword); +} diff --git a/packages/svelte2tsx/test/sourcemaps/.editorconfig b/packages/svelte2tsx/test/sourcemaps/.editorconfig deleted file mode 100644 index 0b509f983..000000000 --- a/packages/svelte2tsx/test/sourcemaps/.editorconfig +++ /dev/null @@ -1,2 +0,0 @@ -[*] -trim_trailing_whitespace = false diff --git a/packages/svelte2tsx/test/sourcemaps/event-binding.html b/packages/svelte2tsx/test/sourcemaps/event-binding.html index 8760d14dd..71e24c5d5 100644 --- a/packages/svelte2tsx/test/sourcemaps/event-binding.html +++ b/packages/svelte2tsx/test/sourcemaps/event-binding.html @@ -3,7 +3,7 @@ 1==== 2================== 3==== 4================== -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/sourcemaps/let.html b/packages/svelte2tsx/test/sourcemaps/let.html index 1e35cf458..2efca3227 100644 --- a/packages/svelte2tsx/test/sourcemaps/let.html +++ b/packages/svelte2tsx/test/sourcemaps/let.html @@ -4,7 +4,7 @@ ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/sourcemaps/repl.html b/packages/svelte2tsx/test/sourcemaps/repl.html index de04773e4..9a2d28d2b 100644 --- a/packages/svelte2tsx/test/sourcemaps/repl.html +++ b/packages/svelte2tsx/test/sourcemaps/repl.html @@ -177,7 +177,7 @@ }}} -return { props: {slug: slug , chapter: chapter}, slots: {} }} +return { props: {slug: slug , chapter: chapter}, slots: {}, getters: {} }} export default class { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/array-binding-export/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/array-binding-export/expected.tsx index f93ef3752..e4a0d2889 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/array-binding-export/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/array-binding-export/expected.tsx @@ -3,7 +3,7 @@ let [a,b,c] = [1,2,3]; ; <> -return { props: {a: a , b: b , c: c}, slots: {} }} +return { props: {a: a , b: b , c: c}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-none/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-none/expected.tsx index 0a284a3e9..2a9051b4d 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-none/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-none/expected.tsx @@ -1,9 +1,9 @@ <>;function render() { __sveltets_store_get(var); <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-some/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-some/expected.tsx index abbdb131f..5c7c41f90 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-some/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/ast-offset-some/expected.tsx @@ -1,9 +1,9 @@ <>;function render() { __sveltets_store_get(var); <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/await-with-$store/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/await-with-$store/expected.tsx index 38b34ddb8..f2ea8b4a7 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/await-with-$store/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/await-with-$store/expected.tsx @@ -12,7 +12,7 @@ function render() { ; _$$p.then((data) => {<> {data} })}} -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/binding-group-store/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/binding-group-store/expected.tsx index 6cdba65ec..9b8478347 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/binding-group-store/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/binding-group-store/expected.tsx @@ -1,6 +1,6 @@ <>;function render() { <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/circle-drawer-example/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/circle-drawer-example/expected.tsx index 806bf201e..e1d0ff339 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/circle-drawer-example/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/circle-drawer-example/expected.tsx @@ -87,9 +87,9 @@ }}} -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-default-slot/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-default-slot/expected.tsx index a25f2b30e..9f00d52c3 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-default-slot/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-default-slot/expected.tsx @@ -6,9 +6,9 @@
Hello
-return { props: {}, slots: {default: {a:b}} }} +return { props: {}, slots: {default: {a:b}}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/expected.tsx index 5535a70c0..3ebfde697 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/expected.tsx @@ -9,9 +9,9 @@ Hello -return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}} }} +return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-slot-crazy-attributes/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-slot-crazy-attributes/expected.tsx index 844b9f608..5787d9e49 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-slot-crazy-attributes/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-slot-crazy-attributes/expected.tsx @@ -6,9 +6,9 @@
Hello
-return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}} }} +return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-documentation/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-documentation/expected.tsx index 20790fd46..bd0532e9b 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-documentation/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-documentation/expected.tsx @@ -2,7 +2,7 @@ <>
At least I am documented
-return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} /** This component does nothing at all */ export default class Input__SvelteComponent_ { diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-indented-multiline-documentation/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-indented-multiline-documentation/expected.tsx index 8f115d7d4..4f476468a 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-indented-multiline-documentation/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-indented-multiline-documentation/expected.tsx @@ -2,7 +2,7 @@ <>
At least I am documented
-return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} /** * This component has indented multiline documentation: diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-multiline-documentation/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-multiline-documentation/expected.tsx index 3ee02b858..6b7ba69c1 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/component-with-multiline-documentation/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/component-with-multiline-documentation/expected.tsx @@ -2,7 +2,7 @@ <>
At least I am documented
-return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} /** * This component has multiline documentation: diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-arrow-function/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-arrow-function/expected.tsx index 726965c91..cd6df52f9 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-arrow-function/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-arrow-function/expected.tsx @@ -6,7 +6,7 @@ } ; <> -return { props: {f: f}, slots: {} }} +return { props: {f: f}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-class/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-class/expected.tsx new file mode 100644 index 000000000..8015e7f11 --- /dev/null +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-class/expected.tsx @@ -0,0 +1,12 @@ +<>;function render() { + + class Foo {}; +; +<> +return { props: {}, slots: {}, getters: {Foo: Foo} }} + +export default class Input__SvelteComponent_ { + $$prop_def = __sveltets_partial(render().props) + $$slot_def = render().slots + get Foo() { return render().getters.Foo } +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-class/input.svelte b/packages/svelte2tsx/test/svelte2tsx/samples/export-class/input.svelte new file mode 100644 index 000000000..7b2c8f4a5 --- /dev/null +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-class/input.svelte @@ -0,0 +1,3 @@ + diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-const/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-const/expected.tsx index deed22e9a..ff8ecd137 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-const/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-const/expected.tsx @@ -1,11 +1,15 @@ <>;function render() { const name: string = "world"; + const SOME = 1, CONSTANT = 2; ; <> -return { props: {name: name} as {name?: string}, slots: {} }} +return { props: {}, slots: {}, getters: {name: name, SOME: SOME, CONSTANT: CONSTANT} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots + get name() { return render().getters.name } + get SOME() { return render().getters.SOME } + get CONSTANT() { return render().getters.CONSTANT } } diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-const/input.svelte b/packages/svelte2tsx/test/svelte2tsx/samples/export-const/input.svelte index ef32d47b0..0dfedef6b 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-const/input.svelte +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-const/input.svelte @@ -1,3 +1,4 @@ diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-has-type/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-has-type/expected.tsx index 5bf4f3ee1..9470a719a 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-has-type/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-has-type/expected.tsx @@ -5,7 +5,7 @@ let b: A = {};b = __sveltets_any(b);; ; <> -return { props: {a: a , b: b} as {a: A, b?: A}, slots: {} }} +return { props: {a: a , b: b} as {a: A, b?: A}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-interface/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-interface/expected.tsx index 9e944410f..a2808d2d0 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-interface/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-interface/expected.tsx @@ -2,7 +2,7 @@ export interface A {} ;<>;function render() { <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-js-strictMode/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-js-strictMode/expected.tsx index 025ed99f9..342bb00f9 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-js-strictMode/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-js-strictMode/expected.tsx @@ -5,7 +5,7 @@ let c: number = 123;c = __sveltets_any(c);; ; <> -return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {} }} +return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-list/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-list/expected.tsx index 9fb1c29d2..03f93642c 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-list/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-list/expected.tsx @@ -5,7 +5,7 @@ ; <> -return { props: {name: name , name2: name2}, slots: {} }} +return { props: {name: name , name2: name2}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-references-local/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-references-local/expected.tsx index 276b6ce44..3ca5e2c47 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-references-local/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-references-local/expected.tsx @@ -4,7 +4,7 @@ let name = world; ; <> -return { props: {name: name}, slots: {} }} +return { props: {name: name}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-ts-strictMode/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-ts-strictMode/expected.tsx index 39ba3111c..cf2068e10 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-ts-strictMode/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-ts-strictMode/expected.tsx @@ -5,7 +5,7 @@ let c: number = 123;c = __sveltets_any(c);; ; <> -return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {} }} +return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = render().props diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/export-with-default-multi/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/export-with-default-multi/expected.tsx index 14f6fc067..6282999c1 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/export-with-default-multi/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/export-with-default-multi/expected.tsx @@ -5,7 +5,7 @@ world = ''; ; <> -return { props: {name: name , world: world}, slots: {} }} +return { props: {name: name , world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/import-single-quote/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/import-single-quote/expected.tsx index eac378bd0..e40552833 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/import-single-quote/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/import-single-quote/expected.tsx @@ -6,7 +6,7 @@ function render() { ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/imports/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/imports/expected.tsx index 57e89391f..9ae0698d6 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/imports/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/imports/expected.tsx @@ -10,7 +10,7 @@ function render() { ; <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line/expected.tsx index b8ed82fca..8ebaaebc5 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line/expected.tsx @@ -1,9 +1,9 @@ <>;let b = 5;;<>;function render() { let world = "name"; <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line2/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line2/expected.tsx index b8ed82fca..8ebaaebc5 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line2/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script-in-line2/expected.tsx @@ -1,9 +1,9 @@ <>;let b = 5;;<>;function render() { let world = "name"; <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script/expected.tsx index 96b8a4048..fbb542e50 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script/expected.tsx @@ -8,9 +8,9 @@ <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script2/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script2/expected.tsx index a64af37d8..1897c464a 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script2/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/module-script-and-script2/expected.tsx @@ -8,9 +8,9 @@ <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/multiple-export/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/multiple-export/expected.tsx index 5868d2b48..406de7cce 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/multiple-export/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/multiple-export/expected.tsx @@ -5,7 +5,7 @@ ; <>

{number1} + {number2} = {number1 + number2}

-return { props: {number1: number1 , number2: number2} as {number1: number, number2: number}, slots: {} }} +return { props: {number1: number1 , number2: number2} as {number1: number, number2: number}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-script/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-script/expected.tsx index 9defec493..9b7e88af8 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-script/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-script/expected.tsx @@ -22,9 +22,9 @@ const test4 = ({a, b: { $top1: $top2 }}) => $top2 && __sveltets_store_get(top1) ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-template/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-template/expected.tsx index 1fb439f4c..956337b5b 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-template/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/nested-$-variables-template/expected.tsx @@ -22,9 +22,9 @@ const test4 = ({a, b: { $top1: $top2 }}) => $top2 && __sveltets_store_get(top1) }}>Hi -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/object-binding-export/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/object-binding-export/expected.tsx index 987d9fd47..b7b1288e5 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/object-binding-export/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/object-binding-export/expected.tsx @@ -3,7 +3,7 @@ let { name: rename } = { name: "world" }; ; <> -return { props: {rename: rename}, slots: {} }} +return { props: {rename: rename}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-block/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-block/expected.tsx index f10242e7c..beff29112 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-block/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-block/expected.tsx @@ -6,7 +6,7 @@ let a: 1 | 2 = 1; }} ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare-object/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare-object/expected.tsx index 7912a03ea..44bf59260 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare-object/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare-object/expected.tsx @@ -4,7 +4,7 @@ ;let b; $: b = __sveltets_invalidate(() => ({ a: 1 })); ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare/expected.tsx index 85c1a6353..1d6310aaf 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/reactive-declare/expected.tsx @@ -7,7 +7,7 @@ let a; $: a = __sveltets_invalidate(() => 5); ; <> -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports/expected.tsx index 8b33dcc87..c2dac4fb0 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/renamed-exports/expected.tsx @@ -5,7 +5,7 @@ ; <> -return { props: {name3: name , name4: name2}, slots: {} }} +return { props: {name3: name , name4: name2}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/script-and-module-script/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/script-and-module-script/expected.tsx index ab8f5fbe3..a30562de0 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/script-and-module-script/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/script-and-module-script/expected.tsx @@ -8,9 +8,9 @@ <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/script-inside-head-after-toplevel-script/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/script-inside-head-after-toplevel-script/expected.tsx index 5c35cce07..a42d90185 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/script-inside-head-after-toplevel-script/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/script-inside-head-after-toplevel-script/expected.tsx @@ -12,9 +12,9 @@ -return { props: {}, slots: {} }} +return { props: {}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/script-on-bottom/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/script-on-bottom/expected.tsx index abbc7df49..752c82f95 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/script-on-bottom/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/script-on-bottom/expected.tsx @@ -4,9 +4,9 @@ ; <>

hello {world}

-return { props: {world: world}, slots: {} }} +return { props: {world: world}, slots: {}, getters: {} }} export default class Input__SvelteComponent_ { $$prop_def = __sveltets_partial(render().props) $$slot_def = render().slots -} \ No newline at end of file +} diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/script-style-like-component/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/script-style-like-component/expected.tsx index 04ca65825..84c19c347 100644 --- a/packages/svelte2tsx/test/svelte2tsx/samples/script-style-like-component/expected.tsx +++ b/packages/svelte2tsx/test/svelte2tsx/samples/script-style-like-component/expected.tsx @@ -8,9 +8,9 @@