All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.carrotgarden.maven.scalor.scalajs.Params.scala Maven / Gradle / Ivy

package com.carrotgarden.maven.scalor.scalajs

import org.apache.maven.plugins.annotations.Parameter

import com.carrotgarden.maven.scalor.base
import com.carrotgarden.maven.tools.Description

trait ParamsLinkAny extends AnyRef
  with ParamsRegex
  with ParamsLogging
  with ParamsLibrary
  with ParamsOptsAny
  with ParamsInitListAny {

}

trait ParamsLinkMain extends ParamsLinkAny
  with ParamsOptsMain
  with ParamsInitListMain {

}

trait ParamsLinkTest extends ParamsLinkAny
  with ParamsOptsTest
  with ParamsInitListTest {

}

trait ParamsRegex {

  @Description( """
  Regular expression used to discover Scala.js IR classes from class path.
  """ )
  @Parameter(
    property     = "scalor.linkerClassRegex",
    defaultValue = ".+[.]sjsir"
  )
  var linkerClassRegex : String = _

}

/**
 * List of Scala.js module initializers.
 */
trait ParamsInitListAny {

  @Description( """
  Regular expression used to extract Scala.js module initializer configuration.
  Must provide extractor for pattern: packageName.ClassName.methodName(arg0,arg1,...).
  Must provide exactly 3 capture groups: class, method, arguments.
  Arguments separator is hard-coded comma , not part of this regex.
  """ )
  @Parameter(
    property     = "scalor.linkerInitializerRegex",
    defaultValue = ParamsInitListAny.initializerRegex
  )
  var linkerInitializerRegex : String = _

  /**
   * List of Scala.js module initializers.
   */
  def linkerInitializerList : Array[ String ]

}

object ParamsInitListAny {

  final val initializerRegex = """([a-zA-Z_.0-9]+)[.]([a-zA-Z_0-9]+)[(]([^()]*)[)]"""

  final val initializerDescription = """
  List of Scala.js module initializer declarations.
  Module initializers are JavaScript equivalent to Java main method convention.
  They are invoked when linker-generated runtime.js script is loaded in Node.js or Browser JS-VM.
  Each list entry must be a fully qualified class name of Scala object, 
  with method name, with argument list, which follows Java main contract,
  and is annotated with @JSExportTopLevel, @JSExport.
  For example, the following pom.xml plugin configuration entry:
<linkerTestInitializerList>
   <initializer>test.Init.main(build=${project.artifactId},stamp=${maven.build.timestamp})</initializer>
</linkerTestInitializerList>
must be accompanied by Scala object in file test/Init.scala:
package test
import scala.scalajs.js.annotation._
@JSExportTopLevel( "test.Init" )
object Init {
  @JSExport
  // Arguments contain "build" and "stamp" entries from pom.xml.
  def main( args : Array[ String ] ) : Unit = {
    // This module output is printed on JS-VM console (Node.js or Browser).
    println( s"init-main: ${args(0)} ${args(1)}" )
  }
}
This list is empty by default. Extractor parameter: linkerInitializerRegex. """ } trait ParamsInitListMain extends ParamsInitListAny { @Description( ParamsInitListAny.initializerDescription ) @Parameter( property = "scalor.linkerMainInitializerList", defaultValue = "" ) var linkerMainInitializerList : Array[ String ] = Array.empty override def linkerInitializerList = linkerMainInitializerList } trait ParamsInitListTest extends ParamsInitListAny { import ParamsInitListAny._ @Description( ParamsInitListAny.initializerDescription ) @Parameter( property = "scalor.linkerTestInitializerList", defaultValue = "" ) var linkerTestInitializerList : Array[ String ] = Array.empty override def linkerInitializerList = linkerTestInitializerList } trait ParamsLibrary { @Description( """ Regular expression used to discover Scala.js core sjsir library from class path. This regular expression is matched against resolved project depenencies in given scope. Regular expression in the form: ${groupId}:${artifactId}. Enablement parameter: linkerLibraryDetect. """ ) @Parameter( property = "scalor.linkerLibraryRegex", defaultValue = "org.scala-js:scalajs-library_.+" ) var linkerLibraryRegex : String = _ @Description( """ Invoke Scala.js linker only when Scala.js library is detected in project dependencies with given scope. Detection parameter: linkerLibraryRegex. """ ) @Parameter( property = "scalor.linkerLibraryDetect", defaultValue = "true" ) var linkerLibraryDetect : Boolean = _ } trait ParamsLogging { @Description( """ Enable logging of linker options. Use to review actual Scala.js linker invocation configuration. """ ) @Parameter( property = "scalor.linkerLogOptions", defaultValue = "false" ) var linkerLogOptions : Boolean = _ @Description( """ Enable logging of Scala.js linker runtime.js. Use to review actual generated output runtime.js location. """ ) @Parameter( property = "scalor.linkerLogRuntime", defaultValue = "true" ) var linkerLogRuntime : Boolean = _ @Description( """ Enable logging of Scala.js linker class path. Use to review actual resources used for *.sjsir class discovery. """ ) @Parameter( property = "scalor.linkerLogClassPath", defaultValue = "false" ) var linkerLogClassPath : Boolean = _ @Description( """ Enable logging of Scala.js linker build phase statistics, including phase durations. Use to review linker performance profile. """ ) @Parameter( property = "scalor.linkerLogBuildStats", defaultValue = "false" ) var linkerLogBuildStats : Boolean = _ @Description( """ Enable logging of Scala.js linker update result of M2E incremental change detection. Use to review actual *.sjsir classes which triggered Eclipse linker build. """ ) @Parameter( property = "scalor.linkerLogUpdateResult", defaultValue = "false" ) var linkerLogUpdateResult : Boolean = _ } /** * Linker invocation options. */ trait ParamsOptsAny extends base.ParamsAny { /** */ def linkerRuntimeOptions : String /** */ def linkerRuntimeMinOptions : String } /** * Linker invocation options for scope=main. */ trait ParamsOptsMain extends ParamsOptsAny { @Description( """ Build options for non-optimized linkerMainRuntimeJs. Scala.js linker options for scope=main, mode=development. Scala.js linker options reference: StandardLinker.scala Uses simple json format. """ ) @Parameter( property = "scalor.linkerMainBuildOptions", defaultValue = """ { "checkIR":false, "parallel":true, "batchMode":false, "sourceMap":true, "optimizer":false, "prettyPrint":true, "closureCompiler":false } """ ) var linkerMainBuildOptions : String = _ @Description( """ Build options for optimized/minified linkerMainRuntimeMinJs. Scala.js linker options for scope=main, mode=production. Scala.js linker options reference: StandardLinker.scala Uses simple json format. """ ) @Parameter( property = "scalor.linkerMainBuildOptionsMin", defaultValue = """ { "checkIR":false, "parallel":true, "batchMode":true, "sourceMap":true, "optimizer":true, "prettyPrint":false, "closureCompiler":true } """ ) var linkerMainBuildOptionsMin : String = _ override def linkerRuntimeOptions = linkerMainBuildOptions override def linkerRuntimeMinOptions = linkerMainBuildOptionsMin } /** * Linker invocation options for scope=test. */ trait ParamsOptsTest extends ParamsOptsAny { @Description( """ Build options for non-optimized linkerTestRuntimeJs. Scala.js linker options for scope=test, mode=development. Scala.js linker options reference: StandardLinker.scala Uses simple json format. """ ) @Parameter( property = "scalor.linkerTestBuildOptions", defaultValue = """ { "checkIR":false, "parallel":true, "batchMode":false, "sourceMap":true, "optimizer":false, "prettyPrint":true, "closureCompiler":false } """ ) var linkerTestBuildOptions : String = _ @Description( """ Build options for optimized/minified linkerTestRuntimeMinJs. Scala.js linker options for scope=test, mode=production. Scala.js linker options reference: StandardLinker.scala Uses simple json format. """ ) @Parameter( property = "scalor.linkerTestBuildOptionsMin", defaultValue = """ { "checkIR":false, "parallel":true, "batchMode":true, "sourceMap":true, "optimizer":true, "prettyPrint":false, "closureCompiler":true } """ ) var linkerTestBuildOptionsMin : String = _ override def linkerRuntimeOptions = linkerTestBuildOptions override def linkerRuntimeMinOptions = linkerTestBuildOptionsMin }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy