From ba74297a196f9bac0969779697d57d52c0f2ed33 Mon Sep 17 00:00:00 2001 From: Hunter Perrin Date: Sat, 5 Aug 2017 12:41:37 -0700 Subject: [PATCH] Changed from this keyword to argument in setup method. --- src/generators/dom/index.ts | 2 +- src/validate/js/propValidators/setup.ts | 14 ++++++-------- test/js/samples/setup-method/expected-bundle.js | 13 +++++++++---- test/js/samples/setup-method/expected.js | 13 +++++++++---- test/js/samples/setup-method/input.html | 11 ++++++++--- 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts index e0b814be25..b9500e3491 100644 --- a/src/generators/dom/index.ts +++ b/src/generators/dom/index.ts @@ -276,7 +276,7 @@ export default function dom( this._destroyed = true; }; - ${templateProperties.setup && `@template.setup.call( ${name} );`} + ${templateProperties.setup && `@template.setup( ${name} );`} `); const usedHelpers = new Set(); diff --git a/src/validate/js/propValidators/setup.ts b/src/validate/js/propValidators/setup.ts index ec8fe7c8a0..7e4c21ce3b 100644 --- a/src/validate/js/propValidators/setup.ts +++ b/src/validate/js/propValidators/setup.ts @@ -1,14 +1,12 @@ -import usesThisOrArguments from '../utils/usesThisOrArguments'; import { Validator } from '../../'; import { Node } from '../../../interfaces'; +const disallowed = new Set(['Literal', 'ObjectExpression', 'ArrayExpression']); + export default function setup(validator: Validator, prop: Node) { - if (prop.value.type === 'ArrowFunctionExpression') { - if (usesThisOrArguments(prop.value.body)) { - validator.error( - `'setup' should be a function expression, not an arrow function expression`, - prop.start - ); - } + while (prop.type === 'ParenthesizedExpression') prop = prop.expression; + + if (disallowed.has(prop.value.type)) { + validator.error(`'setup' must be a function`, prop.value.start); } } diff --git a/test/js/samples/setup-method/expected-bundle.js b/test/js/samples/setup-method/expected-bundle.js index 34e8ff4274..6c4e62fa04 100644 --- a/test/js/samples/setup-method/expected-bundle.js +++ b/test/js/samples/setup-method/expected-bundle.js @@ -118,9 +118,14 @@ var template = (function () { console.log( bar ); } }, - setup () { - this.SOME_CONSTANT = 42; - this.prototype.foo( 'baz' ); + setup: (Component) => { + Component.SOME_CONSTANT = 42; + Component.factory = function (target) { + return new Component({ + target: target + }); + }; + Component.prototype.foo( 'baz' ); } }; }()); @@ -183,6 +188,6 @@ SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = functio this._destroyed = true; }; -template.setup.call( SvelteComponent ); +template.setup( SvelteComponent ); export default SvelteComponent; diff --git a/test/js/samples/setup-method/expected.js b/test/js/samples/setup-method/expected.js index 55cd938aa6..3e72768ac8 100644 --- a/test/js/samples/setup-method/expected.js +++ b/test/js/samples/setup-method/expected.js @@ -7,9 +7,14 @@ var template = (function () { console.log( bar ); } }, - setup () { - this.SOME_CONSTANT = 42; - this.prototype.foo( 'baz' ); + setup: (Component) => { + Component.SOME_CONSTANT = 42; + Component.factory = function (target) { + return new Component({ + target: target + }); + } + Component.prototype.foo( 'baz' ); } }; }()); @@ -72,6 +77,6 @@ SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = functio this._destroyed = true; }; -template.setup.call( SvelteComponent ); +template.setup( SvelteComponent ); export default SvelteComponent; diff --git a/test/js/samples/setup-method/input.html b/test/js/samples/setup-method/input.html index 56d3f46f0a..17a34221a3 100644 --- a/test/js/samples/setup-method/input.html +++ b/test/js/samples/setup-method/input.html @@ -5,9 +5,14 @@ console.log( bar ); } }, - setup () { - this.SOME_CONSTANT = 42; - this.prototype.foo( 'baz' ); + setup: (Component) => { + Component.SOME_CONSTANT = 42; + Component.factory = function (target) { + return new Component({ + target: target + }); + } + Component.prototype.foo( 'baz' ); } };