Just one question: since 5.5 requires Java 8, couldn't we use its embedded JavaScript support (Nashorn) instead of Mozilla's Rhino? See http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html, Embedding Oracle Nashorn section. Also https://www.infoworld.com/article/2607426/application-development/nashorn--javascript-made-great-in-java-8.html .
On Thu, Nov 30, 2017 at 2:12 PM, Thiago H. de Paula Figueiredo < thiag...@gmail.com> wrote: > This is awesome! Thank you very much! > > On Mon, Nov 27, 2017 at 10:01 AM, <jkemn...@apache.org> wrote: > >> Repository: tapestry-5 >> Updated Branches: >> refs/heads/master 80f65eb4b -> 0f2c01c9a >> >> >> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c0 >> 1c9/tapestry-webresources/src/test/groovy/t5/webresources/ >> tests/TypeScriptCompilerSpec.groovy >> ---------------------------------------------------------------------- >> diff --git a/tapestry-webresources/src/test/groovy/t5/webresources/test >> s/TypeScriptCompilerSpec.groovy b/tapestry-webresources/src/te >> st/groovy/t5/webresources/tests/TypeScriptCompilerSpec.groovy >> new file mode 100644 >> index 0000000..aafd30a >> --- /dev/null >> +++ b/tapestry-webresources/src/test/groovy/t5/webresources/test >> s/TypeScriptCompilerSpec.groovy >> @@ -0,0 +1,58 @@ >> +package t5.webresources.tests; >> + >> +import org.apache.tapestry5.SymbolConstants >> +import org.apache.tapestry5.internal.InternalSymbols >> +import org.apache.tapestry5.internal.test.PageTesterContext >> +import org.apache.tapestry5.internal.webresources.TypeScriptCompiler >> +import org.apache.tapestry5.ioc.MappedConfiguration >> +import org.apache.tapestry5.ioc.annotations.Autobuild >> +import org.apache.tapestry5.ioc.annotations.Inject >> +import org.apache.tapestry5.ioc.annotations.SubModule >> +import org.apache.tapestry5.ioc.internal.util.ClasspathResource >> +import org.apache.tapestry5.modules.AssetsModule >> +import org.apache.tapestry5.modules.TapestryModule >> +import org.apache.tapestry5.services.ApplicationGlobals >> +import org.apache.tapestry5.webresources.modules.WebResourcesModule >> + >> +import spock.lang.Shared >> +import spock.lang.Specification >> + >> +@SubModule([TapestryModule, WebResourcesModule, >> TypeScriptCompilerSpec.TestModule, AssetsModule]) >> +class TypeScriptCompilerSpec extends Specification { >> + >> + @Autobuild >> + private TypeScriptCompiler typeScriptCompiler; >> + >> + @Inject >> + @Shared >> + private ApplicationGlobals applicationGlobals >> + >> + def setupSpec(){ >> + applicationGlobals.storeContext(new PageTesterContext("/test")); >> + } >> + >> + def "Compile Hello World example"(){ >> + when: >> + def resource = new ClasspathResource("t5/webresources/greeter.ts") >> + def compiled = typeScriptCompiler.transform(resource, null) >> + then: >> + compiled.text == TypeScriptCompilerSpec.class.g >> etResourceAsStream('/t5/webresources/greeter-compiled.js').text >> + } >> + >> + def "Type information is preserved"(){ >> + when: >> + def resource = new ClasspathResource("t5/webresou >> rces/park-example.ts") >> + def compiled = typeScriptCompiler.transform(resource, null) >> + then: >> + compiled.text == TypeScriptCompilerSpec.class.g >> etResourceAsStream('/t5/webresources/park-example-compiled.js').text >> + } >> + >> + public static class TestModule { >> + >> + def contributeApplicationDefaults(MappedConfiguration >> configuration){ >> + configuration.add(InternalSymbols.APP_NAME, "test") >> + configuration.add("tapestry.app-package", "typescript") >> + configuration.add(SymbolConstants.MINIFICATION_ENABLED, false) >> + } >> + } >> +} >> >> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c0 >> 1c9/tapestry-webresources/src/test/resources/t5/ >> webresources/greeter-compiled.js >> ---------------------------------------------------------------------- >> diff --git >> a/tapestry-webresources/src/test/resources/t5/webresources/greeter-compiled.js >> b/tapestry-webresources/src/test/resources/t5/webresources/ >> greeter-compiled.js >> new file mode 100644 >> index 0000000..0794189 >> --- /dev/null >> +++ b/tapestry-webresources/src/test/resources/t5/webresources/ >> greeter-compiled.js >> @@ -0,0 +1,8 @@ >> +define(["require", "exports"], function (require, exports) { >> + "use strict"; >> + function greeter(person) { >> + return "Hello, " + person; >> + } >> + var user = "Jane User"; >> + document.body.innerHTML = greeter(user); >> +}); >> >> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c0 >> 1c9/tapestry-webresources/src/test/resources/t5/webresources/greeter.ts >> ---------------------------------------------------------------------- >> diff --git >> a/tapestry-webresources/src/test/resources/t5/webresources/greeter.ts >> b/tapestry-webresources/src/test/resources/t5/webresources/greeter.ts >> new file mode 100644 >> index 0000000..7fc2d1a >> --- /dev/null >> +++ b/tapestry-webresources/src/test/resources/t5/webresources/greeter.ts >> @@ -0,0 +1,7 @@ >> +function greeter(person) { >> + return "Hello, " + person; >> +} >> + >> +var user = "Jane User"; >> + >> +document.body.innerHTML = greeter(user); >> \ No newline at end of file >> >> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c0 >> 1c9/tapestry-webresources/src/test/resources/t5/ >> webresources/park-example-compiled.js >> ---------------------------------------------------------------------- >> diff --git >> a/tapestry-webresources/src/test/resources/t5/webresources/park-example-compiled.js >> b/tapestry-webresources/src/test/resources/t5/webresources/ >> park-example-compiled.js >> new file mode 100644 >> index 0000000..6d8e725 >> --- /dev/null >> +++ b/tapestry-webresources/src/test/resources/t5/webresources/ >> park-example-compiled.js >> @@ -0,0 +1,26 @@ >> +var __decorate = (this && this.__decorate) || function (decorators, >> target, key, desc) { >> + var c = arguments.length, r = c < 3 ? target : desc === null ? desc >> = Object.getOwnPropertyDescriptor(target, key) : desc, d; >> + if (typeof Reflect === "object" && typeof Reflect.decorate === >> "function") r = Reflect.decorate(decorators, target, key, desc); >> + else for (var i = decorators.length - 1; i >= 0; i--) if (d = >> decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, >> key)) || r; >> + return c > 3 && r && Object.defineProperty(target, key, r), r; >> +}; >> +var __metadata = (this && this.__metadata) || function (k, v) { >> + if (typeof Reflect === "object" && typeof Reflect.metadata === >> "function") return Reflect.metadata(k, v); >> +}; >> +define(["require", "exports"], function (require, exports) { >> + "use strict"; >> + var Pterodactyls = /** @class */ (function () { >> + function Pterodactyls() { >> + } >> + return Pterodactyls; >> + }()); >> + var Park = /** @class */ (function () { >> + function Park(x, y) { >> + } >> + Park = __decorate([ >> + Aviary, >> + __metadata("design:paramtypes", [Pterodactyls, String]) >> + ], Park); >> + return Park; >> + }()); >> +}); >> >> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c0 >> 1c9/tapestry-webresources/src/test/resources/t5/ >> webresources/park-example.ts >> ---------------------------------------------------------------------- >> diff --git >> a/tapestry-webresources/src/test/resources/t5/webresources/park-example.ts >> b/tapestry-webresources/src/test/resources/t5/webresources/ >> park-example.ts >> new file mode 100644 >> index 0000000..ce9b4f2 >> --- /dev/null >> +++ b/tapestry-webresources/src/test/resources/t5/webresources/ >> park-example.ts >> @@ -0,0 +1,6 @@ >> +class Pterodactyls {} >> + >> +@Aviary >> +class Park { >> + constructor(x: Pterodactyls, y: string) {} >> +} >> \ No newline at end of file >> >> > > > -- > Thiago > -- Thiago