Hello,
First post here and I have a feeling it may not be Tapestry related but
wanted to reach out here just in case!
I recently joined a project that has been maintained for a few years and is
currently using Tapestry 5.7.2
Tasked with upgrading some frontend components, I wanted to use typescript
and got it running using the setup in tapestry-webresources using the Rhino
library.
This worked great on my machine and on the web server, but in the last week
some colleagues needed to work on the same code and discovered that
typescript wasn’t getting transpiled on their local setup.
Rhino complains about a “missing name after the . operator” but references
the typescript.js file at line 1467 (exception at the end of this message) –
ie the file used to transpile the other .ts files as far as I’ve understood.
( Please correct me if I’m mistaken)
I’ve tested this on 8 different colleague machines with only a 50% success
rate unfortunately. We are all running what should be identical setups, so
it’s quite confusing why some don’t work.
It doesn’t seem to depend on node or tsc command line tools, and
Looking into it, I’m thinking it’s some sort of file reading issue – there
are similar issues on Rhino’s github but unresolved there too.
A suggested fix was to change every someObject.delete to someObject[‘delete’]
but I don’t think editing typescript.js is the right solution here.
The error comes from ‘delete’ being a reserved word in javascript, and so
this is most probably an issue with Rhino’s javascript parser.
I wondered if anyone has ever come across this issue before or might have
some better ideas on what else to check?
And just as more general question – can anyone recommend a better setup for
handling typescript in Tapestry? My next goal is to bring in npm packages
and potentially work on replacing requireJS with something like webpack, but
I’ve seen on previous threads here that there’s been limited success?
I’ve been considering running npm scripts at Tapestry build time to
‘pre-compile’ all the frontend code in a separate directory and then hand it
back to requireJS by dumping the javascript files into /modules.. but that
feels like overkill.
I’d appreciate any ideas people might have, happy to test anything out at
this point.
Cheers,
Jonathan
Original Exception:
Exception: org.apache.tapestry5.ioc.internal.OperationException
Message: missing name after . operator
(classpath:org/apache/tapestry5/webresources/internal/typescript.js#1467)
trace: Streaming compressed module custom-file
Streaming classpath:META-INF/modules/custom-file.ts
(compressed)
Compiling classpath:META-INF/modules/custom-file.ts from
TS to JavaScript
Creating Rhino executor for source(s)
classpath:org/apache/tapestry5/webresources/internal/typescript.js,
classpath:org/apache/tapestry5/webresources/internal/invoke-typescript.js.
Loading script
classpath:org/apache/tapestry5/webresources/internal/typescript.js.
Exception: org.mozilla.javascript.EvaluatorException
Message: missing name after . operator
(classpath:org/apache/tapestry5/webresources/internal/typescript.js#1467)
columnNumber: 37
lineNumber: 1467
lineSource: class_1.prototype.delete = function (key) {
scriptStackTrace:
sourceName:
classpath:org/apache/tapestry5/webresources/internal/typescript.js