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
Next Next commit
event type check spec
  • Loading branch information
jasonlyu123 committed Jul 11, 2020
commit 1528fd0ee343436a49c0c001a559468c7b2d9f4e
5 changes: 3 additions & 2 deletions packages/svelte2tsx/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,13 @@ function render() {
<>
<h1>hello {world}</h1>
</>;
return { props: { world }, slots: {} };
return { props: { world }, slots: {}, events: {} };
}

export default class {
$$prop_def = __sveltets_partial(render().props);
$$slot_def = render().slots;
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on;
}
```

Expand Down
6 changes: 3 additions & 3 deletions packages/svelte2tsx/src/svelte2tsx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -834,10 +834,10 @@ 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}`;
}{\n $$prop_def = ${propDef}\n $$slot_def = render().slots` +
`\n $on = __sveltets_eventDef(render().events).$on\n}`;

str.append(statement);
}
Expand Down Expand Up @@ -939,7 +939,7 @@ function createRenderFunction(

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

Expand Down
59 changes: 37 additions & 22 deletions packages/svelte2tsx/svelte-shims.d.ts
Original file line number Diff line number Diff line change
@@ -1,55 +1,70 @@
declare module '*.svelte' {
export default class {
$$prop_def: any;
$$slot_def: any;
$$prop_def: any;
$$slot_def: any;

$on(event: string, handler: (e: Event) => any): void
}
}

type AConstructorTypeOf<T> = new (...args:any[]) => T;
type AConstructorTypeOf<T> = new (...args: any[]) => T;

type SvelteAction<U extends any[]> = (node: HTMLElement, ...args:U) => {
update?: (...args:U) => void,
destroy?: () => void
type SvelteAction<U extends any[]> = (node: HTMLElement, ...args: U) => {
update?: (...args: U) => void,
destroy?: () => void
}


type SvelteTransitionConfig = {
delay?: number,
duration?: number,
easing?: (t: number) => number,
css?: (t: number, u: number) => string,
tick?: (t: number, u: number) => void
delay?: number,
duration?: number,
easing?: (t: number) => number,
css?: (t: number, u: number) => string,
tick?: (t: number, u: number) => void
}

type SvelteTransition<U extends any[]> = (node: Element, ...args:U) => SvelteTransitionConfig | (() => SvelteTransitionConfig)
type SvelteTransition<U extends any[]> = (node: Element, ...args: U) => SvelteTransitionConfig | (() => SvelteTransitionConfig)

type SvelteAnimation<U extends any[]> = (node: Element, move: { from: DOMRect, to: DOMRect}, ...args:U) => {
type SvelteAnimation<U extends any[]> = (node: Element, move: { from: DOMRect, to: DOMRect }, ...args: U) => {
delay?: number,
duration?: number,
easing?: (t: number) => number,
css?: (t: number, u: number) => string,
tick?: (t: number, u: number) => void
duration?: number,
easing?: (t: number) => number,
css?: (t: number, u: number) => string,
tick?: (t: number, u: number) => void
}

type SvelteAllProps = { [index: string]: any }
type SvelteAllProps = { [index: string]: any }
type SvelteRestProps = { [index: string]: any }
type SvelteStore<T> = { subscribe: (run: (value:T) => any, invalidate?: any) => any }
type SvelteStore<T> = { subscribe: (run: (value: T) => any, invalidate?: any) => any }
type SvelteComponent = import('*.svelte').default
type SvelteEventRecord = Record<string, Event | Event[]>
type SvelteExtractEvent<T> = T extends any[] ? T[number] : T;

interface SvelteEventHandling<T extends SvelteEventRecord> {
$on<K extends keyof T>(event: K, handler: (e: SvelteExtractEvent<T[K]>) => any): void
$on(event: string, handler: (e: Event) => any): void
}

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) => 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
declare function __sveltets_restPropsType(): SvelteRestProps
declare function __sveltets_partial<T>(obj: T): Partial<T>;
declare function __sveltets_partial_with_any<T>(obj: T): Partial<T> & SvelteAllProps
declare function __sveltets_with_any<T>(obj: T): T & SvelteAllProps
declare function __sveltets_store_get<T=any>(store: SvelteStore<T>): T
declare function __sveltets_store_get<T = any>(store: SvelteStore<T>): T
declare function __sveltets_any(dummy: any): any;
declare function __sveltets_componentType(): AConstructorTypeOf<SvelteComponent>
declare function __sveltets_invalidate<T>(getValue: () => T): T
declare function __sveltets_eventDef<T extends SvelteEventRecord>(def: T): SvelteEventHandling<T>
declare function __sveltets_mapGlobalEvent<K extends keyof GlobalEventHandlersEventMap>(
event: K
): GlobalEventHandlersEventMap[K];
declare function __sveltets_mapElementEvent<K extends keyof HTMLElementEventMap>(
event: K
): HTMLElementEventMap[K];
3 changes: 2 additions & 1 deletion packages/svelte2tsx/test/sourcemaps/event-binding.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
1==== 2==================
<button onclick={__sveltets_store_get(check) ? method1 : method2} >Bla</button></>
3==== 4==================
return { props: {}, slots: {} }}
return { props: {}, slots: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
!Expected
<Component on:click={$check ? method1 : method2} />
Expand Down
3 changes: 2 additions & 1 deletion packages/svelte2tsx/test/sourcemaps/let.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
;
<>
</>
return { props: {}, slots: {} }}
return { props: {}, slots: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
!Expected
<script>
Expand Down
3 changes: 2 additions & 1 deletion packages/svelte2tsx/test/sourcemaps/repl.html
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,12 @@
</>}}}
</div>
</>
return { props: {slug: slug , chapter: chapter}, slots: {} }}
return { props: {slug: slug , chapter: chapter}, slots: {}, events: {} }}

export default class {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
!Expected
<script context="module">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
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: {}, events: {} }}

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

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

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

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

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

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

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
}
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@
<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}} }}
return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
}
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
<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}} }}
return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
}
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
<>

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

/** This component does nothing at all */
export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
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: {} }}
return { props: {}, slots: {}, events: {} }}

/**
* This component has indented multiline documentation:
Expand All @@ -20,4 +20,5 @@ return { props: {}, slots: {} }}
export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
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: {} }}
return { props: {}, slots: {}, events: {} }}

/**
* This component has multiline documentation:
Expand All @@ -14,4 +14,5 @@ return { props: {}, slots: {} }}
export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
}
;
<></>
return { props: {f: f}, slots: {} }}
return { props: {f: f}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
const name: string = "world";
;
<></>
return { props: {name: name} as {name?: string}, slots: {} }}
return { props: {name: name} as {name?: string}, slots: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
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: {}, events: {} }}

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

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
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: {}, events: {} }}

export default class Input__SvelteComponent_ {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
$on = __sveltets_eventDef(render().events).$on
}
Loading