Discussion:
[1/3] tapestry-5 git commit: TAP5-2591: add support for TypeScript modules
Thiago H. de Paula Figueiredo
2017-11-30 16:12:03 UTC
Permalink
This is awesome! Thank you very much!
Repository: tapestry-5
refs/heads/master 80f65eb4b -> 0f2c01c9a
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/0f2c01c9/tapestry-
webresources/src/test/groovy/t5/webresources/tests/
TypeScriptCompilerSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-webresources/src/test/groovy/t5/webresources/
tests/TypeScriptCompilerSpec.groovy b/tapestry-webresources/src/
test/groovy/t5/webresources/tests/TypeScriptCompilerSpec.groovy
new file mode 100644
index 0000000..aafd30a
--- /dev/null
+++ b/tapestry-webresources/src/test/groovy/t5/webresources/
tests/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
+
AssetsModule])
+class TypeScriptCompilerSpec extends Specification {
+
+ private TypeScriptCompiler typeScriptCompiler;
+
+ private ApplicationGlobals applicationGlobals
+
+ def setupSpec(){
+ applicationGlobals.storeContext(new PageTesterContext("/test"));
+ }
+
+ def "Compile Hello World example"(){
+ def resource = new ClasspathResource("t5/webresources/greeter.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ compiled.text == TypeScriptCompilerSpec.class.
getResourceAsStream('/t5/webresources/greeter-compiled.js').text
+ }
+
+ def "Type information is preserved"(){
+ def resource = new ClasspathResource("t5/
webresources/park-example.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ compiled.text == TypeScriptCompilerSpec.class.
getResourceAsStream('/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/0f2c01c9/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/0f2c01c9/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/0f2c01c9/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";
+ function Pterodactyls() {
+ }
+ return Pterodactyls;
+ }());
+ 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/0f2c01c9/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 {}
+
+class Park {
+ constructor(x: Pterodactyls, y: string) {}
+}
\ No newline at end of file
--
Thiago
Thiago H. de Paula Figueiredo
2017-11-30 16:19:33 UTC
Permalink
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 <
Post by Thiago H. de Paula Figueiredo
This is awesome! Thank you very much!
Repository: tapestry-5
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
+
TypeScriptCompilerSpec.TestModule, AssetsModule])
+class TypeScriptCompilerSpec extends Specification {
+
+ private TypeScriptCompiler typeScriptCompiler;
+
+ private ApplicationGlobals applicationGlobals
+
+ def setupSpec(){
+ applicationGlobals.storeContext(new PageTesterContext("/test"));
+ }
+
+ def "Compile Hello World example"(){
+ def resource = new ClasspathResource("t5/webresources/greeter.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ compiled.text == TypeScriptCompilerSpec.class.g
etResourceAsStream('/t5/webresources/greeter-compiled.js').text
+ }
+
+ def "Type information is preserved"(){
+ def resource = new ClasspathResource("t5/webresou
rces/park-example.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ 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";
+ function Pterodactyls() {
+ }
+ return Pterodactyls;
+ }());
+ 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 {}
+
+class Park {
+ constructor(x: Pterodactyls, y: string) {}
+}
\ No newline at end of file
--
Thiago
--
Thiago
Jochen Kemnade
2017-12-01 11:11:53 UTC
Permalink
Hi Thiago,
Post by Thiago H. de Paula Figueiredo
Just one question: since 5.5 requires Java 8, couldn't we use its embedded
JavaScript support (Nashorn) instead of Mozilla's Rhino?
Yes, we could probably do that. But Rhino was already there, so I just
used it. But I guess we can always switch to Nashorn later.

Jochen
Post by Thiago H. de Paula Figueiredo
On Thu, Nov 30, 2017 at 2:12 PM, Thiago H. de Paula Figueiredo <
Post by Thiago H. de Paula Figueiredo
This is awesome! Thank you very much!
Repository: tapestry-5
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
+
TypeScriptCompilerSpec.TestModule, AssetsModule])
+class TypeScriptCompilerSpec extends Specification {
+
+ private TypeScriptCompiler typeScriptCompiler;
+
+ private ApplicationGlobals applicationGlobals
+
+ def setupSpec(){
+ applicationGlobals.storeContext(new PageTesterContext("/test"));
+ }
+
+ def "Compile Hello World example"(){
+ def resource = new ClasspathResource("t5/webresources/greeter.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ compiled.text == TypeScriptCompilerSpec.class.g
etResourceAsStream('/t5/webresources/greeter-compiled.js').text
+ }
+
+ def "Type information is preserved"(){
+ def resource = new ClasspathResource("t5/webresou
rces/park-example.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ 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";
+ function Pterodactyls() {
+ }
+ return Pterodactyls;
+ }());
+ 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 {}
+
+class Park {
+ constructor(x: Pterodactyls, y: string) {}
+}
\ No newline at end of file
--
Thiago
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-***@tapestry.apache.org
For additional commands, e-mail: dev-***@tapestry.apache.org
Thiago H. de Paula Figueiredo
2017-12-01 14:50:32 UTC
Permalink
Hello!

Why don't we do it before the first release with it? This way, we can avoid
possible result differences later.
Post by Jochen Kemnade
Hi Thiago,
Post by Thiago H. de Paula Figueiredo
Just one question: since 5.5 requires Java 8, couldn't we use its embedded
JavaScript support (Nashorn) instead of Mozilla's Rhino?
Yes, we could probably do that. But Rhino was already there, so I just
used it. But I guess we can always switch to Nashorn later.
Jochen
Post by Thiago H. de Paula Figueiredo
On Thu, Nov 30, 2017 at 2:12 PM, Thiago H. de Paula Figueiredo <
This is awesome! Thank you very much!
Repository: tapestry-5
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
+
TypeScriptCompilerSpec.TestModule, AssetsModule])
+class TypeScriptCompilerSpec extends Specification {
+
+ private TypeScriptCompiler typeScriptCompiler;
+
+ private ApplicationGlobals applicationGlobals
+
+ def setupSpec(){
+ applicationGlobals.storeContext(new PageTesterContext("/test"));
+ }
+
+ def "Compile Hello World example"(){
+ def resource = new ClasspathResource("t5/webresources/greeter.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ compiled.text == TypeScriptCompilerSpec.class.g
etResourceAsStream('/t5/webresources/greeter-compiled.js').text
+ }
+
+ def "Type information is preserved"(){
+ def resource = new ClasspathResource("t5/webresou
rces/park-example.ts")
+ def compiled = typeScriptCompiler.transform(resource, null)
+ 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";
+ function Pterodactyls() {
+ }
+ return Pterodactyls;
+ }());
+ 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 {}
+
+class Park {
+ constructor(x: Pterodactyls, y: string) {}
+}
\ No newline at end of file
--
Thiago
---------------------------------------------------------------------
--
Thiago
Loading...