From 3e3a5491fb4f4cda55720752ce355589882a9adb Mon Sep 17 00:00:00 2001 From: Tom Shaw Date: Fri, 5 Nov 2021 19:32:58 +0000 Subject: [PATCH] removed constructor, prop name check from compiler and added event:bindings to init function --- src/compiler/compile/render_dom/index.ts | 2 +- src/runtime/internal/Component.ts | 23 ++++++++++++++++------- src/runtime/internal/dev.ts | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index 126222f803..89af0c297c 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -444,7 +444,7 @@ export default function dom( unknown_props_check = b` const writable_props = [${writable_props.map(prop => x`'${prop.export_name}'`)}]; @_Object.keys($$props).forEach(key => { - if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot' && key !== 'event:bindings') @_console.warn(\`<${component.tag}> was created with unknown prop '\${key}'\`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$' && key !== 'slot') @_console.warn(\`<${component.tag}> was created with unknown prop '\${key}'\`); }); `; } diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts index c3aabdfbd0..bf4f2dece9 100644 --- a/src/runtime/internal/Component.ts +++ b/src/runtime/internal/Component.ts @@ -22,6 +22,7 @@ export interface Fragment { /* outro */ o: (local: any) => void; /* destroy */ d: (detaching: 0 | 1) => void; } + interface T$$ { dirty: number[]; ctx: null | any; @@ -41,6 +42,20 @@ interface T$$ { root:Element | ShadowRoot } +/** + * bind_events + * Binds the events provided in options.props, to named callbacks event:bindings + * @param props + */ +function bind_events(props) { + const events = props && props['event:bindings'] ? props['event:bindings'] : {}; + + if (Object.keys(events).length) { + delete props['event:bindings']; + } + return events; +} + export function bind(component, name, callback) { const index = component.$$.props[name]; if (index !== undefined) { @@ -127,7 +142,7 @@ export function init(component, options, instance, create_fragment, not_equal, p context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else - callbacks: blank_object(), + callbacks: bind_events(options.props), dirty, skip_bound: false, root: options.target || parent_component.$$.root @@ -239,12 +254,6 @@ export class SvelteComponent { $$set?: ($$props: any) => void; eventBindings: any; - constructor(props) { - if (props && props.props && Object.prototype.hasOwnProperty.call(props.props, 'event:bindings')) { - this.eventBindings = props.props['event:bindings']; - } - } - $destroy() { destroy_component(this, 1); this.$destroy = noop; diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index c103bf4d25..76d68086c8 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -155,7 +155,7 @@ export class SvelteComponentDev extends SvelteComponent { throw new Error("'target' is a required option"); } - super(options); + super(); } $destroy() {