The reason is, that problems in the jsf.js often breaks Tobago to be
unusable, and some application servers tent to need much time to update
there external libs (e.g. MyFaces) and some users of Tobago need much
time to update there application servers. I know the solution is not
pretty, but it fixes real world problems. I've spent too much time in
the last years to solve this category of problems, I'm exhausted.
Am 16.09.22 um 09:57 schrieb Thomas Andraschko:
I always wonder why you need it in tobago? doesnt you just reuse
jsf.js from the impl?
If we really really really need it, we could create something like a
myfaces-js repo and create a master and 2.3 branch there + release it
in NPM.
Otherwise i would just like to have the source in the myfaces-core
master branch and compile it. Multiple repos always makes everything
harder to release.
Am Fr., 16. Sept. 2022 um 09:30 Uhr schrieb Udo Schnurpfeil
<[email protected]>:
It would be nice to have a branch or project where the JSF 2.3
compatible version can live, because we may need it for fixes.
Maybe in Werners own project (but its not real community), or in
the Tobago project. The disadvantage is, that fixes for both
versions affects sources in different projects. It's a bit more
error-prone and more work...
Maybe we put the built in the branch of MyFaces 2.3 or 3 but do
not use it there, only releasing to NPM? This may a bit more
transparent.
Regards
Udo
Am 15.09.22 um 17:26 schrieb Thomas Andraschko:
I would only add it in 4.0 (Jakarta), all other branches are stable
Udo Schnurpfeil <[email protected]> schrieb am Do., 15. Sept.
2022, 16:43:
Hi,
in which versions of MyFaces this will be integrated? I think
there is a difference because of the jakarta namespace for
the new version.
In Tobago we integrate the generated js file directly in the
npm build process of Tobago. The JS will be provieded by
Tobago, NOT from the used JSF implemantation. The reason is
old (but might be right today), some application servers
bring old versions of JSF with them, and the JS was buggy.
My question:
Will it be possible in the future to get the JS via npm in
both versions (namespace javax and namespace jakarta).
Regards,
Udo
Am 09.09.22 um 19:19 schrieb Werner Punz:
Hi I think the build speed does not make a huge difference.
But I think the best option would be to simply make the
build optional and for normal builds just use the js
files, which of course
can be comitted together with the ts files.
Theoretically we do not need to rebuild every time, a simple
copy of the javascripts
to the target directory is enough. But a working build must
be in there for verification.
Timetable, second issue. I thought I could wrap things up
this week, but given I am on vacation next week, it will be
probably the week after.
I have a pretty well working myfaces setup already which
however atm still runs the build every time, but we can move
to "optional".
Atm 3 of my external integration tests fail on extreme
corner cases atm, I have to check why.
So I will need another 2-3 days the week after next to wrap
things up, I guess.
Werner
Am Fr., 9. Sept. 2022 um 12:44 Uhr schrieb Udo Schnurpfeil
<[email protected]>:
Hi Werner,
good to hear from you.
About the build process: All the JavaScript code of
Tobago was migrated to TypeScript and we use the
maven-frontend-plugin to compile it to JavaScript.
Because of the problems you have indicated, we build the
TS -> JS with Maven profile -Pfrontend to activate the NPM.
We commit the generated code as resources in the
project. So, we can build with or without regenerating
the JavaScript code.
advantage:
* normal build is faster
* independent from npm infrastructure
disadvantage:
* generated code under source control
* explicit re-generation is needed, sometimes
What is the best option for MyFaces core?
Regards,
Udo
Am 08.09.22 um 15:55 schrieb Werner Punz:
Sorry for my silence the last few days.
Given my long "hiatus" it took me a little bit to get
everything together again.
Following, I think i found a solution I think we can
live with
a) The main hosting for now of the scripts and the
monadish base lib still is on github, but
b) I basically added s small node project to the api,
which pulls the npm files from node and extracts the
sources and tests and pushes them into the myfaces
source structure, that way we can host the sources on
the myfaces side
c) You can run then a full build via node and also can
run all the tests on both projects
d) The final result is the jsf.js and the
jsf-development.js along with the corresponding map
files and a gz and br compressed version of the files
(for browsers which reques compressed files)
c and d) will be triggered by the maven frontend plugin
which is a shim over node (which also does a local
download and install of node and the subproject
dependencies)
The end result of the build process is the files at the
required location and given we now have mapping files
we can drop the special builds, so the
resource loader will become smaller.
The downside is, we now have node as intermediate step
for building the files and some node dependencies
(jsf_ts for loading the sources, but that is not
needed given we host them ourselfs, and a ton of
dependencies for the javascript based unit tests,
around mocha)
Unfortunately we cannot skip the entire node embedded
into maven part.given we want to start from typescript
level and want to have unit tests on top of it.
The easier way of course would be just to use the npm
packages and the final js files, but we want to have
the full build cycle.
So there are some dependencies for the build which are
outside of maven and apache. But normally organisations
have an npm proxy somewhere,
so that in case the node infrastructure goes down the
build systems survive. Does apache have something like
this? Myfaces probably is not the only Apache project
relying on node/npm infrastructure for their builds.
Werner
Am Di., 6. Sept. 2022 um 14:06 Uhr schrieb Werner Punz
<[email protected]>:
Yes i was just worried to drag npm into the build
process, but if everyone is fine going with the
frontend-plugin i am perfectly fine with it, as well.
This is the best way to combine npm and maven
builds atm anyway, because it simply relegates
whatever npm has to do to npm
and maven takes care of the rest. You even can set
local proxies and have full control over the npm
and node versions that way via maven.
Werner
Am Di., 6. Sept. 2022 um 14:03 Uhr schrieb
Melloware <[email protected]>:
Absolutely this is the way to go. It will
download node run your package.json script to
compile the TypeScript code and put it in the
right location all as part of the Maven Build.
On 9/6/2022 5:46 AM, Werner Punz wrote:
Just checked the code, it uses basically the
frontend maven plugin,
which is a maven shim over node:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.12.1</version>
<configuration>
<nodeVersion>v16.13.1</nodeVersion>
<npmVersion>8.1.2</npmVersion>
<installDirectory>${main.basedir}/target/node</installDirectory>
</configuration>
</plugin>
I can go this route, this would be the least
painful one because it basically just
downloads node and executes the node build as
is, if this is ok with the apache build process.
Werner
Am Di., 6. Sept. 2022 um 11:08 Uhr schrieb
Werner Punz <[email protected]>:
Sounds great I will have a look.
Thanks for the hint.
Werner
Am Di., 6. Sept. 2022 um 11:05 Uhr schrieb
Melloware Inc <[email protected]>:
Werner,
I can get the code building in maven
even if it’s in Typescript. We do
something similar in PF extensions.
Melloware
@melloware on GitHub
On Sep 6, 2022, at 4:52 AM, Werner
Punz <[email protected]> wrote:
Hi there is code reduction going on
in the build step anyway, but I also
can move the parts from mona-dish
over (which i had in the past)
Problem is that we still will be npm
dependent for testing libs etc... so
i cannot get npm entirely out of the
loop for testing purposes shim
libraries for testing etc...
That means if we move the ts code
over we have to introduce an npm
build step.
I will work on something here and
then we can all have a look whether
this should be the way to go.
Werner
Am Di., 6. Sept. 2022 um 10:35 Uhr
schrieb Thomas Andraschko
<[email protected]>:
Hi Werner,
great to hear that you are back
and hope you are fine again :)
IMO the reimplementation is great
and improves the maintainability
a lot for the future.
I would personally only push it
in the master (4.0 / jakarta.*),
all other branches are "stable"
and we should not touch them.
Therefore we are totally fine to
only support IE11+.
So it would be great if you can
also remove some older IE hacks
like
https://github.com/werpu/jsfs_js_ts/blob/master/src/main/typescript/impl/xhrCore/RequestDataResolver.ts#L113
Also it would be great if you can
further improve readability.
For me its absolutely mandatory
that all code is directly in
MyFaces and compiles with Maven
somehow.
So it would also be great if you
could only use a minimal of your
TS mona-dish lib, so we are as
clean and minimalistic as possible.
Best regards,
Thomas
Am Di., 6. Sept. 2022 um
10:21 Uhr schrieb Werner Punz
<[email protected]>:
I will add a short summary on
what we have:
The project atm is hosted on
github and basically 100% my
code (although split into 2
projects)
it is 100% implemented in
typescript and fortified with
a ton of unit tests. I have
yet given i did not work on
it for quite some time, check
the coverage percentage, but
it is high.
Downside is, I cut off a ton
of old browser support. I
think IE11 is still supported
but nothing below.
The code is way more readable
although some parts still can
be improved. Maintainability
was Prio #1 something the old
code which had to support a
ton of legacy browsers did
not have.
Downside is, it is 100%
typescript, so we need to
merge that into the myfaces
base one way or the other but
there is no way to avoid an
npm build step if we drag in
the package via npm or on
typescript level.
Another option simply would
be to fetch the compiled
sources but that leaves out
the connection to the
original sources entirely
(except for the sourcemaps),
which I would not prefer.
The implementation level is
atm jsf 2.x i have to check
whether we need
siginficant extensions for 3
when I stalled my work the
status was the js parts did
not change.
(one thing I have on my plan
for the next few days)
Werner
Am Di., 6. Sept. 2022 um
10:13 Uhr schrieb Werner Punz
<[email protected]>:
Hi Sorry for my long
absence.
Thing is I had severe
health problems last year
with a disc prolapse
becoming acute, and had a
ton of private stuff on
my back this year on top
of my job.
However I have now picked
up the work on the JSF,js
Typescript again.
I have yet to check the
latest specs of JSF given
i was out of the loop for
a year if anything
significant needs to be
added.
The Scripts themselve
work and have been in
usage in Tobago for quite
a while.
I am just asking whether
we want them to add to
myfaces or not. If yes
then I would start the
work to add them as a
build option.
But I want the community
decide on this.
Lets start a discussion.
Werner