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

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

package com.carrotgarden.maven.scalor.scalajs

import java.io.File

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

import com.carrotgarden.maven.scalor.base
import com.carrotgarden.maven.tools.Description
import com.carrotgarden.maven.scalor.util.Folder
import com.carrotgarden.maven.scalor.util.Error.Throw

/**
 * Linker build resource definitions for any scope.
 */
trait Build extends AnyRef
  with base.BuildAnyTarget
  with base.BuildAnyDependency {

  /**
   * Build mode for runtime JavaScript.
   */
  def linkerModeBuild : String

  /**
   * Build mode for runtime JavaScript.
   */
  def linkerModeBuildMin : String

  /**
   * Name of the generated runtime JavaScript.
   */
  def linkerRuntimeJS : String

  /**
   * Name of the generated runtime JavaScript.
   */
  def linkerRuntimeMinJS : String

  /**
   * Build mode for runtime JavaScript.
   */
  def linkerBuildMode : base.Mode.Type = {
    base.Mode.buildMode( linkerModeBuild )
  }

  /**
   * Build mode for runtime JavaScript.
   */
  def linkerBuildModeMin : base.Mode.Type = {
    base.Mode.buildMode( linkerModeBuildMin )
  }

  def linkerHasBuild( incremental : Boolean ) : Boolean = {
    base.Mode.hasBuildEnabled( linkerBuildMode, incremental )
  }

  def linkerHasBuildMin( incremental : Boolean ) : Boolean = {
    base.Mode.hasBuildEnabled( linkerBuildModeMin, incremental )
  }

  /**
   * Full path of the generated runtime JavaScript.
   */
  def linkerRuntimeFile : File = {
    val file = new File( buildTargetFolder, linkerRuntimeJS ).getCanonicalFile
    Folder.ensureParent( file )
    file
  }

  /**
   * Full path of the generated runtime JavaScript.
   */
  def linkerRuntimeMinFile : File = {
    val file = new File( buildTargetFolder, linkerRuntimeMinJS ).getCanonicalFile
    Folder.ensureParent( file )
    file
  }

}

/**
 * Scala.js linker build parameters for scope=main.
 */
trait BuildMain extends Build
  with BuildMainDependency
  with BuildMainTarget {

  @Description( """
  Build mode for non-optimized linkerMainRuntimeJs.
  Normally uses always, to link during both Maven full build and Eclipse incremental build.
  Available build modes:
  always - link during both full and incremental build
  never  - do not produce runtime at all
  full   - link only during full build
  incr   - link only during incremental build
""" ) @Parameter( property = "scalor.linkerMainBuildMode", defaultValue = "always" ) var linkerMainBuildMode : String = _ @Description( """ Build mode for optimized/minified linkerMainRuntimeMinJs. Normally uses full, to link only during Maven full build and skip Eclipse incremental build. Available build modes:
  always - link during both full and incremental build
  never  - do not produce runtime at all
  full   - link only during full build
  incr   - link only during incremental build
""" ) @Parameter( property = "scalor.linkerMainBuildModeMin", defaultValue = "full" ) var linkerMainBuildModeMin : String = _ @Description( """ Non-optimized runtime script. Relative path of the generated runtime JavaScript file for scope=main, mode=development. File is packaged inside linkerMainTargetFolder Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerMainRuntimeJs", defaultValue = "${project.artifactId}/${project.version}/runtime.js" ) var linkerMainRuntimeJs : String = _ @Description( """ Linker optimized/minified runtime script. Relative path of the generated runtime JavaScript file for scope=main, mode=production. File is packaged inside linkerMainTargetFolder Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerMainRuntimeMinJs", defaultValue = "${project.artifactId}/${project.version}/runtime.min.js" ) var linkerMainRuntimeMinJs : String = _ override def linkerModeBuild = linkerMainBuildMode override def linkerModeBuildMin = linkerMainBuildModeMin override def linkerRuntimeJS = linkerMainRuntimeJs override def linkerRuntimeMinJS = linkerMainRuntimeMinJs } trait BuildMainDependency extends base.BuildAnyDependency { @Description( """ Folders with classes generated by current project and included in linker class path. Normally includes build output from scope=[macro,main] (target/classes). """ ) @Parameter( property = "scalor.linkerMainDependencyFolders", defaultValue = "${project.build.outputDirectory}" ) var linkerMainDependencyFolders : Array[ File ] = Array.empty @Description( """ Provide linker class path from project dependency artifacts based on these scopes. Scopes reference. """ ) @Parameter( property = "scalor.linkerMainDependencyScopes", defaultValue = "provided" ) var linkerMainDependencyScopes : Array[ String ] = Array.empty override def buildDependencyFolders = linkerMainDependencyFolders override def buildDependencyScopes = linkerMainDependencyScopes } trait BuildMainTarget extends base.BuildAnyTarget { @Description( """ Build target directory for the generated runtime JavaScript file with scope=main. Normally packaged inside target/classes. Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerMainTargetFolder", defaultValue = "${project.build.outputDirectory}/META-INF/resources/webjars" ) var linkerMainTargetFolder : File = _ override def buildTargetFolder = linkerMainTargetFolder } /** * Scala.js linker build parameters for scope=test. */ trait BuildTest extends Build with BuildTestTarget with BuildTestDependency { @Description( """ Build mode for non-optimized linkerTestRuntimeJs. Normally uses always, to link during both Maven full build and Eclipse incremental build. Available build modes:
  always - link during both full and incremental build
  never  - do not produce runtime at all
  full   - link only during full build
  incr   - link only during incremental build
""" ) @Parameter( property = "scalor.linkerTestBuildMode", defaultValue = "always" ) var linkerTestBuildMode : String = _ @Description( """ Build mode for optimized/minified linkerTestRuntimeMinJs. Normally uses never, since test runtime is not intended as deployment artifact. Available build modes:
  always - link during both full and incremental build
  never  - do not produce runtime at all
  full   - link only during full build
  incr   - link only during incremental build
""" ) @Parameter( property = "scalor.linkerTestBuildModeMin", defaultValue = "never" ) var linkerTestBuildModeMin : String = _ @Description( """ Non-optimized runtime script. Relative path of the generated runtime JavaScript file for scope=test, mode=development. File is packaged inside linkerTestTargetFolder Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerTestRuntimeJs", defaultValue = "${project.artifactId}/${project.version}/runtime-test.js" ) var linkerTestRuntimeJs : String = _ @Description( """ Linker optimized/minified runtime script. Relative path of the generated runtime JavaScript file for scope=test, mode=production. File is packaged inside linkerTestTargetFolder Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerTestRuntimeMinJs", defaultValue = "${project.artifactId}/${project.version}/runtime-test.min.js" ) var linkerTestRuntimeMinJs : String = _ override def linkerModeBuild = linkerTestBuildMode override def linkerModeBuildMin = linkerTestBuildModeMin override def linkerRuntimeJS = linkerTestRuntimeJs override def linkerRuntimeMinJS = linkerTestRuntimeMinJs } trait BuildTestDependency extends base.BuildAnyDependency { @Description( """ Folders with classes generated by current project and included in linker class path. Normally includes build output from scope=[macro,main,test] (target/test-classes, target/classes). """ ) @Parameter( property = "scalor.linkerTestDependencyFolders", defaultValue = "${project.build.testOutputDirectory},${project.build.outputDirectory}" ) var linkerTestDependencyFolders : Array[ File ] = Array.empty @Description( """ Provide linker class path from project dependencies selected by these scopes. Scopes reference. """ ) @Parameter( property = "scalor.linkerTestDependencyScopes", defaultValue = "provided,test" ) var linkerTestDependencyScopes : Array[ String ] = Array.empty override def buildDependencyFolders = linkerTestDependencyFolders override def buildDependencyScopes = linkerTestDependencyScopes } trait BuildTestTarget extends base.BuildAnyTarget { @Description( """ Build target directory for the generated runtime JavaScript file with scope=test. Normally packaged inside target/test-classes. Normally follows webjars convention. """ ) @Parameter( property = "scalor.linkerTestTargetFolder", defaultValue = "${project.build.testOutputDirectory}/META-INF/resources/webjars" ) var linkerTestTargetFolder : File = _ override def buildTargetFolder = linkerTestTargetFolder }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy