I think:

for version 4.0: replace it

for version 2.3, 2.3-next, 3.0: it should be configurable - of course only if it is to be integrated there at all

Udo

Am 23.09.22 um 09:56 schrieb Werner Punz:
Hi I would need an answer, to my original question, now that I have picked up the work on MyFaces again. Are we going to completely replace the scripts or at allow some kind of dual mode where users can switch between old and new
for some period of time?

Werner



Am Do., 22. Sept. 2022 um 12:50 Uhr schrieb Werner Punz <werner.p...@gmail.com>:

    Re Myfaces 2.3, not sure, the idea of the new codebase was to get
    a cleaner code and get rid of all this dead old browser legacy
    support
    which messed up the readability with tons of fallbacks for
    everything we did)

    So that we can have a cleaner more maintainable codebase to move
    forward onwards.
    If you want to integrate it into a stable version then I would
    make a fork or switch the codebases via context param.
    Neither really is a solution. I would recommend for Tobago to
    leave it in for now until the baseline is higher than 2.3!
    It is the same codebase in the long run anyway.


    Am Do., 22. Sept. 2022 um 12:46 Uhr schrieb Werner Punz
    <werner.p...@gmail.com>:

        Hi sorry for being silent for so long. I was on vacation last
        week as announced but I have picked up work again.
        Following I was basically spending this week, to fix a ton of
        smaller issues I ran along in mona-dish and the typescript
        codebase.
        Also I did some code improvement in the jsf.js codebase to get
        rid of some legacy code which is covered in a better way now
        regarding
        file inputs.
        Also the github project which is my main workbench for the
        scripts now integrates the streams and query lib on source
        level so that the code maps
        are down to the last and only dependency reachable as well.
        (see https://github.com/werpu/jsfs_js_ts for the latest
        codebase before it makes it into myfaces)

        I will now pick up the integration into myfaces again.
        Question is:
        Do we still want to have the old scripts reachable or not?
        If not we can drop a ton of custom code in the resource
        loaders, because all the compressed, uncompressed single file
        stuff is not needed anymore.
        The new implementation can provide sourcemaps, so the users
        can always reach the sources for debugging.
        A simple development/production flag should be enough to serve
        the files mangled or unmangled, subsequent source map requests
        done by the browser can do the rest.

        Also one advantage of the new codebase is that files with gzip
        and brotli compression are generated with the rest of the
        build and the server can serve those as well
        reducing bandwidth.

        Downside is if we do not provide the old scripts then some
        legacy browsers won't have a working impl anymore.

        Werner



        Am Fr., 16. Sept. 2022 um 10:39 Uhr schrieb Udo Schnurpfeil
        <lof...@apache.org>:

            Tobago 4 works with the jsf.js from MyFaces only with
            several modifications.

            Tobago 5 was migrated to use Werner's Typescript
            implementation. It works without patches 😁. This version
            was never released with MyFaces, and you don't want,
            because it's stable (I think that is fine). But the
            consequence is: there is no MyFaces 2.3 based application
            server working with Tobago when we remove the jsf.js from
            Tobago.

            Am 16.09.22 um 10:21 schrieb Thomas Andraschko:
            Isnt that maybe outdated?
            the last fixes on our JS was in 2018:
            
https://github.com/apache/myfaces/commits/2.3.x/api/src/main/javascript/META-INF/resources/myfaces

            Am Fr., 16. Sept. 2022 um 10:18 Uhr schrieb Udo
            Schnurpfeil <lof...@apache.org>:

                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 <lof...@apache.org>:

                    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 <lof...@apache.org> 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 <lof...@apache.org>:

                            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
                            <werner.p...@gmail.com>:

                                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
                                <melloware...@gmail.com>:

                                    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 <werner.p...@gmail.com>:

                                        Sounds great I will have
                                        a look.

                                        Thanks for the hint.

                                        Werner


                                        Am Di., 6. Sept. 2022 um
                                        11:05 Uhr schrieb
                                        Melloware Inc
                                        <melloware...@gmail.com>:

                                            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
                                            <werner.p...@gmail.com>
                                            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
                                            <andraschko.tho...@gmail.com>:

                                                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
                                                <werner.p...@gmail.com>:

                                                    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
                                                    <werner.p...@gmail.com>:

                                                        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

Reply via email to