zyro23 / grails-spring-websocket

93 stars 28 forks source link

Error minifing 'stomp.umd.js' when creating application .jar (bootJar) #73

Open gsartori opened 2 weeks ago

gsartori commented 2 weeks ago

How to reproduce

  1. Forge a grails app (with suggested defaults): https://start.grails.org/
  2. Add the dependency:

implementation 'io.github.zyro23:grails-spring-websocket:2.6.0-RC1'

  1. Execute bootJar

Results

We get the following exception:

Closure uglify JS Exception
java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.

null
  Node(OPTCHAIN_CALL): spring-websocket.unminified.js:502:12
            origOnClose?.call(webSocket, {
  Parent(EXPR_RESULT): spring-websocket.unminified.js:502:12
            origOnClose?.call(webSocket, {

    at com.google.common.base.Preconditions.checkState(Preconditions.java:492)
    at com.google.javascript.jscomp.InlineFunctions$CallVisitor.visit(InlineFunctions.java:425)
    at com.google.javascript.jscomp.InlineFunctions$FindCandidatesReferences.visit(InlineFunctions.java:494)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:909)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:902)
    at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:948)
    at com.google.javascript.jscomp.NodeTraversal.handleFunction(NodeTraversal.java:854)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:880)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:902)
    at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:948)
    at com.google.javascript.jscomp.NodeTraversal.handleFunction(NodeTraversal.java:854)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:880)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:902)
    at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:948)
    at com.google.javascript.jscomp.NodeTraversal.handleFunction(NodeTraversal.java:854)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:880)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.handleScript(NodeTraversal.java:842)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:877)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1037)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:905)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:415)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:425)
    at com.google.javascript.jscomp.InlineFunctions.process(InlineFunctions.java:124)
    at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:317)
    at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:462)
    at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:232)
    at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2438)
    at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:808)
    at com.google.javascript.jscomp.CompilerExecutor.lambda$runInCompilerThread$0(CompilerExecutor.java:101)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalStateException
    ... 47 more

May be worth providing the minified js instead of the unminified one?

gsartori commented 2 weeks ago

It looks like is a Google Closure Compiler issue, the following configuration works (the only drawback is that the size of JS files is less optimized):

assets {
    minifyCss = true
    minifyJs = true
    minifyOptions = [
            //SIMPLE (default) or ADVANCED or WHITESPACE_ONLY
            optimizationLevel: 'WHITESPACE_ONLY',
    ]
}
zyro23 commented 2 weeks ago

i do not think this is a problem with stomp.js nor with closure-compiler but with asset-pipeline-gradle that pulls an old closure compiler version. ref: https://github.com/bertramdev/asset-pipeline/blob/rel-4.4.0/asset-pipeline-gradle/build.gradle#L41

i was able to reproduce the problem locally and for me, overriding the dependency version in build.gradle in the buildSrc directory worked:

// buildSrc/build.gradle

// ...
dependencies {
// ...
implementation("com.google.javascript:closure-compiler-unshaded:v20240317")
// ...
}

would u mind giving that a try?

and if that works, i think we could piggyback onto https://github.com/bertramdev/asset-pipeline/issues/326 asking for an update to v20240317?

gsartori commented 2 weeks ago

Okay, I tested it, it worked, thank you!

zyro23 commented 2 weeks ago

nice. thanks. then i guess the stomp.js issue you created can be closed?

i will amend the readme with this workaround until there is an asset-pipeline update available.

zyro23 commented 2 weeks ago

id prefer to keep this issue open until an asset-pipeline update is available and the workaround is no longer necessary.

but stomp-js/stompjs#634 can be closed?

thank you.

gsartori commented 2 weeks ago

Yes, I've closed it