Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
…nto event-type-check
  • Loading branch information
jasonlyu123 committed Jul 25, 2020
commit fa0bfb9effeb1ee406010d10311c2bf223221281
1 change: 1 addition & 0 deletions packages/svelte2tsx/src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export interface InstanceScriptProcessResult {
uses$$props: boolean;
uses$$restProps: boolean;
getters: Set<string>;
events: Map<string, string | string[]>;
}

export interface CreateRenderFunctionPara extends InstanceScriptProcessResult {
Expand Down
42 changes: 26 additions & 16 deletions packages/svelte2tsx/src/svelte2tsx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import { convertHtmlxToJsx } from './htmlxtojsx';
import { Node } from 'estree-walker';
import * as ts from 'typescript';
import { createEventHandlerTransformer } from './nodes/event-handler';
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?
Expand Down Expand Up @@ -855,10 +858,13 @@ function addComponentExport(

const doc = formatComponentDocumentation(componentDocumentation);

const statement = `\n\n${doc}export default class ${
className ? `${className} ` : ''
const statement =
`\n\n${doc}export default class ${
className ? `${className} ` : ''
}{\n $$prop_def = ${propDef}\n $$slot_def = render().slots` +
`\n $on = __sveltets_eventDef(render().events).$on\n}`;
createClassGetters(getters) +
`\n $on = __sveltets_eventDef(render().events).$on` +
'\n}';

str.append(statement);
}
Expand Down Expand Up @@ -913,16 +919,17 @@ function processModuleScriptTag(str: MagicString, script: Node) {
str.overwrite(scriptEndTagStart, script.end, ';<>');
}

function createRenderFunction(
str: MagicString,
scriptTag: Node,
scriptDestination: number,
slots: Map<string, Map<string, string>>,
events: Map<string, string | string[]>,
exportedNames: ExportedNames,
uses$$props: boolean,
uses$$restProps: boolean,
) {
function createRenderFunction({
str,
scriptTag,
scriptDestination,
slots,
getters,
events,
exportedNames,
uses$$props,
uses$$restProps
}: CreateRenderFunctionPara) {
const htmlx = str.original;
let propsDecl = '';

Expand Down Expand Up @@ -971,9 +978,11 @@ function createRenderFunction(
Array.from(events.entries()).map(eventMapEntryToString).join(", ") +
"}";

const returnString = `\nreturn { props: ${createPropsStr(
exportedNames,
)}, slots: ${slotsAsDef}, events: ${eventsDef} }}`;
const returnString =
`\nreturn { props: ${createPropsStr(
exportedNames
)}, slots: ${slotsAsDef}, getters: ${createRenderFunctionGetterStr(getters)}` +
`, events: ${eventsDef} }}`;
str.append(returnString);
}

Expand Down Expand Up @@ -1056,6 +1065,7 @@ export function svelte2tsx(svelte: string, options?: { filename?: string; strict
scriptDestination: instanceScriptTarget,
slots,
events,
getters,
exportedNames,
uses$$props,
uses$$restProps,
Expand Down
2 changes: 1 addition & 1 deletion packages/svelte2tsx/svelte-shims.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ declare var process: NodeJS.Process & { browser: boolean }
declare function __sveltets_ensureAnimation<U extends any[]>(animation: SvelteAnimation<U>, ...args: U): any;
declare function __sveltets_ensureAction<U extends any[]>(action: SvelteAction<U>, ...args: U): any;
declare function __sveltets_ensureTransition<U extends any[]>(transition: SvelteTransition<U>, ...args: U): any;
declare function __sveltets_ensureFunction(expression: (e: Event) => unknown): any;
declare function __sveltets_ensureFunction(expression: (e: Event & { detail?: any }) => unknown ) : any;
declare function __sveltets_ensureType<T>(type: AConstructorTypeOf<T>, el: T): any;
declare function __sveltets_instanceOf<T>(type: AConstructorTypeOf<T>): T;
declare function __sveltets_allPropsType(): SvelteAllProps
Expand Down
2 changes: 1 addition & 1 deletion packages/svelte2tsx/test/sourcemaps/event-binding.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
1==== 2==================
<button onclick={__sveltets_store_get(check) ? method1 : method2} >Bla</button></>
3==== 4==================
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
Expand Down
2 changes: 1 addition & 1 deletion packages/svelte2tsx/test/sourcemaps/let.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
;
<>
</>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
Expand Down
2 changes: 1 addition & 1 deletion packages/svelte2tsx/test/sourcemaps/repl.html
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@
</>}}}
</div>
</>
return { props: {slug: slug , chapter: chapter}, slots: {}, events: {} }}
return { props: {slug: slug , chapter: chapter}, slots: {}, getters: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
let [a,b,c] = [1,2,3];
;
<></>
return { props: {a: a , b: b , c: c}, slots: {}, events: {} }}
return { props: {a: a , b: b , c: c}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;function render() {
__sveltets_store_get(var);
<></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;function render() {
__sveltets_store_get(var);
<></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function render() {
</>; _$$p.then((data) => {<>
{data}
</>})}}</>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<></>;function render() {
<><input id="dom-input" type="radio" {...__sveltets_any(__sveltets_store_get(compile_options).generate)} value="dom"/></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<input type="range" value={selected.r} oninput={adjust}/>
</div>
</>}}}</>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<div>
<slot a={b}>Hello</slot>
</div></>
return { props: {}, slots: {default: {a:b}}, events: {} }}
return { props: {}, slots: {default: {a:b}}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<slot a={b}>Hello</slot>
<slot name="test" c={d} e={e}></slot>
</div></>
return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}}, events: {} }}
return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<div>
<slot a={b} b={b} c="b" d={`a${b}`} e={b} >Hello</slot>
</div></>
return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, events: {} }}
return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<>

<main>At least I am documented</main></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

/** This component does nothing at all */
export default class Input__SvelteComponent_ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<>

<main>At least I am documented</main></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

/**
* This component has indented multiline documentation:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<>

<main>At least I am documented</main></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

/**
* This component has multiline documentation:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;function render() {
<><Button ></Button>
<Radio ></Radio></>
return { props: {}, slots: {}, events: {'click':[__sveltets_bubbleEventDef(__sveltets_instanceOf(Button), 'click'),__sveltets_bubbleEventDef(__sveltets_instanceOf(Radio), 'click')]} }}
return { props: {}, slots: {}, getters: {}, events: {'click':[__sveltets_bubbleEventDef(__sveltets_instanceOf(Button), 'click'),__sveltets_bubbleEventDef(__sveltets_instanceOf(Radio), 'click')]} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<></>;function render() {
<><Button ></Button></>
return { props: {}, slots: {}, events: {'click':__sveltets_bubbleEventDef(__sveltets_instanceOf(Button), 'click')} }}
return { props: {}, slots: {}, getters: {}, events: {'click':__sveltets_bubbleEventDef(__sveltets_instanceOf(Button), 'click')} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<></>;function render() {
<><button onclick={undefined}></button></>
return { props: {}, slots: {}, events: {'click':__sveltets_mapElementEvent('click')} }}
return { props: {}, slots: {}, getters: {}, events: {'click':__sveltets_mapElementEvent('click')} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;function render() {
<><sveltebody onclick={undefined}></sveltebody>
<sveltewindow onresize={undefined}></sveltewindow></>
return { props: {}, slots: {}, events: {'click':__sveltets_mapBodyEvent('click'), 'resize':__sveltets_mapWindowEvent('resize')} }}
return { props: {}, slots: {}, getters: {}, events: {'click':__sveltets_mapBodyEvent('click'), 'resize':__sveltets_mapWindowEvent('resize')} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
}
;
<></>
return { props: {f: f}, slots: {}, events: {} }}
return { props: {f: f}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
class Foo {};
;
<></>
return { props: {}, slots: {}, getters: {Foo: Foo} }}
return { props: {}, slots: {}, getters: {Foo: Foo}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
get Foo() { return render().getters.Foo }
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
const SOME = 1, CONSTANT = 2;
;
<></>
return { props: {name: name} as {name?: string}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {name: name, SOME: SOME, CONSTANT: CONSTANT}, events: {} }}

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 }
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
let b: A = {};b = __sveltets_any(b);;
;
<></>
return { props: {a: a , b: b} as {a: A, b?: A}, slots: {}, events: {} }}
return { props: {a: a , b: b} as {a: A, b?: A}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
export interface A {}
;<></>;function render() {
<></>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: {}, events: {} }}
return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

;
<></>
return { props: {name: name , name2: name2}, slots: {}, events: {} }}
return { props: {name: name , name2: name2}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
let name = world;
;
<></>
return { props: {name: name}, slots: {}, events: {} }}
return { props: {name: name}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: {}, events: {} }}
return { props: {a: a , b: b , c: c} as {a: number, b: number | undefined, c?: number}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = render().props
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
world = '';
;
<></>
return { props: {name: name , world: world}, slots: {}, events: {} }}
return { props: {name: name , world: world}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ function render() {
;
<><Test b="6" ></Test>
</>
return { props: {}, slots: {}, events: {} }}
return { props: {}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ function render() {
;
<><h1>hello {world}</h1>
</>
return { props: {world: world}, slots: {}, events: {} }}
return { props: {world: world}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;let b = 5;;<></>;function render() {
let world = "name";
<><h1>hello {world}</h1></>
return { props: {world: world}, slots: {}, events: {} }}
return { props: {world: world}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<></>;let b = 5;;<></>;function render() {
let world = "name";
<><h1>hello {world}</h1></>
return { props: {world: world}, slots: {}, events: {} }}
return { props: {world: world}, slots: {}, getters: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
Expand Down
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.