From 492d7afc85dd382ce1dafa97dba21ba662b2e35c Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sun, 27 Jan 2019 21:22:06 -0500 Subject: [PATCH] partially remove component.props --- src/compile/Component.ts | 24 ++++-------------------- src/compile/render-dom/index.ts | 6 ++++++ src/compile/render-ssr/index.ts | 13 +++++++------ 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/compile/Component.ts b/src/compile/Component.ts index 0bd14b0b46..353d212194 100644 --- a/src/compile/Component.ts +++ b/src/compile/Component.ts @@ -165,9 +165,6 @@ export default class Component { module: false }); }); - - // TODO remove this - this.props = props.map(name => ({ name, as: name })); } } @@ -685,12 +682,6 @@ export default class Component { this.extract_imports(script.content, false); this.extract_exports(script.content, false); this.track_mutations(); - - // TODO remove this, just use component.symbols everywhere - this.props = this.vars.filter(variable => !variable.module && variable.exported_as).map(variable => ({ - name: variable.name, - as: variable.exported_as - })); } walk_instance_js_post_template() { @@ -781,12 +772,6 @@ export default class Component { const { code, instance_scope, instance_scope_map: map, meta } = this; let scope = instance_scope; - // TODO we will probably end up wanting to use this elsewhere - const exported = new Set(); - this.props.forEach(prop => { - exported.add(prop.name); - }); - const coalesced_declarations = []; let current_group; @@ -803,14 +788,15 @@ export default class Component { if (node.type === 'VariableDeclaration') { if (node.kind === 'var' || scope === instance_scope) { - let has_meta_props = false; let has_exports = false; let has_only_exports = true; node.declarations.forEach(declarator => { extractNames(declarator.id).forEach(name => { + const variable = component.var_lookup.get(name); + if (name === meta.props_object) { - if (exported.has(name)) { + if (variable.exported_as) { component.error(declarator, { code: 'exported-meta-props', message: `Cannot export props binding` @@ -829,11 +815,9 @@ export default class Component { } else { code.overwrite(declarator.id.end, declarator.end, ' = $$props'); } - - has_meta_props = true; } - if (exported.has(name)) { + if (variable.exported_as) { has_exports = true; } else { has_only_exports = false; diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts index b1b6957af2..4094baa5c5 100644 --- a/src/compile/render-dom/index.ts +++ b/src/compile/render-dom/index.ts @@ -70,6 +70,12 @@ export default function dom( options.css !== false ); + // TODO remove this, just use component.symbols everywhere + component.props = component.vars.filter(variable => !variable.module && variable.exported_as).map(variable => ({ + name: variable.name, + as: variable.exported_as + })); + const props = component.props.filter(x => component.writable_declarations.has(x.name)); const set = (component.meta.props || props.length > 0 || renderer.slots.size > 0) diff --git a/src/compile/render-ssr/index.ts b/src/compile/render-ssr/index.ts index 5a192f8ba7..6f49dc517c 100644 --- a/src/compile/render-ssr/index.ts +++ b/src/compile/render-ssr/index.ts @@ -24,13 +24,14 @@ export default function ssr( let user_code; + // TODO remove this, just use component.symbols everywhere + const props = component.vars.filter(variable => !variable.module && variable.exported_as); + if (component.javascript) { component.rewrite_props(); user_code = component.javascript; - } else if (!component.ast.instance && !component.ast.module && component.props.length > 0) { - const props = component.props.map(prop => prop.as).filter(name => name[0] !== '$'); - - user_code = `let { ${props.join(', ')} } = $$props;` + } else if (!component.ast.instance && !component.ast.module && props.length > 0) { + user_code = `let { ${props.map(prop => prop.exported_as).join(', ')} } = $$props;` } const reactive_stores = Array.from(component.template_references).filter(n => n[0] === '$'); @@ -44,8 +45,8 @@ export default function ssr( // TODO only do this for props with a default value const parent_bindings = component.javascript - ? component.props.map(prop => { - return `if ($$props.${prop.as} === void 0 && $$bindings.${prop.as} && ${prop.name} !== void 0) $$bindings.${prop.as}(${prop.name});`; + ? props.map(prop => { + return `if ($$props.${prop.exported_as} === void 0 && $$bindings.${prop.exported_as} && ${prop.name} !== void 0) $$bindings.${prop.exported_as}(${prop.name});`; }) : [];