5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg/**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * The contents of this file are subject to the terms of the Common Development and
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Distribution License (the License). You may not use this file except in compliance with the
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * License.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * specific language governing permission and limitations under the License.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * When distributing Covered Software, include this CDDL Header Notice in each file and include
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Header, with the fields enclosed by brackets [] replaced by your own identifying
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * information: "Portions copyright [year] [name of copyright owner]".
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler * Copyright 2015-2016 ForgeRock AS.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg/* global module, require, process */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburgvar _ = require("lodash"),
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg mavenSrcPath = "/src/main/js",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg mavenTestPath = "/src/test/js";
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburgfunction mavenProjectSource (projectDir) {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg return [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg projectDir + mavenSrcPath,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg projectDir + "/src/main/resources"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ];
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg}
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburgfunction mavenProjectTestSource (projectDir) {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg return [
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg projectDir + mavenTestPath,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg projectDir + "/src/test/resources"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ];
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg}
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburgmodule.exports = function (grunt) {
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler var compositionDirectory = "target/XUI",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compiledDirectory = "target/compiled",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler transpiledDirectory = "target/transpiled",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg testClassesDirectory = "target/test-classes",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg forgeRockCommonsDirectory = process.env.FORGEROCK_UI_SRC + "/forgerock-ui-commons",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg forgeRockUiDirectory = process.env.FORGEROCK_UI_SRC + "/forgerock-ui-user",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg targetVersion = grunt.option("target-version") || "dev",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg buildCompositionDirs = _.flatten([
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "target/dependencies",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // When building, dependencies are downloaded and expanded by Maven
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "target/dependencies-expanded/forgerock-ui-user",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // This must come last so that it overwrites any conflicting files!
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg mavenProjectSource(".")
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg watchCompositionDirs = _.flatten([
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // When watching, we want to get the dependencies directly from the source
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg mavenProjectSource(forgeRockCommonsDirectory),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg mavenProjectSource(forgeRockUiDirectory),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // This must come last so that it overwrites any conflicting files!
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg mavenProjectSource(".")
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]),
9798bfcb5c34f3b87217b619263fece5e9ffeec0Joe Bandenburg testWatchDirs = _.flatten([
494bebac1636810e5ff37c205fd77a119144957aJoe Bandenburg mavenProjectTestSource(".")
9798bfcb5c34f3b87217b619263fece5e9ffeec0Joe Bandenburg ]),
9798bfcb5c34f3b87217b619263fece5e9ffeec0Joe Bandenburg testInputDirs = _.flatten([
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg mavenProjectTestSource(".")
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg nonCompiledFiles = [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.html",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.ico",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.json",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.png",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.eot",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.svg",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.woff",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.woff2",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "**/*.otf",
a4ca5e5077f7c2ed4bf14c3f5701955f716778f9Julian Kigwana "css/bootstrap-3.3.5-custom.css",
a4ca5e5077f7c2ed4bf14c3f5701955f716778f9Julian Kigwana "themes/**/*.*"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ],
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg serverDeployDirectory = process.env.OPENAM_HOME + "/XUI";
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.initConfig({
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler babel: {
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg options: {
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg env: {
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg development: {
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg sourceMaps: true
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg }
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg },
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler ignore: ["libs/"],
b8487a2e9ef077be108e3811d9f67b6c896132efPhil Ostler presets: ["es2015", "react"],
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler plugins: [
bbc8bc4d0e315247d18a454007056531c1b450b7Eugenia Sergueeva ["transform-es2015-classes", { "loose": true }],
bbc8bc4d0e315247d18a454007056531c1b450b7Eugenia Sergueeva "transform-object-rest-spread"
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler ]
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg },
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler transpileJS: {
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler files: [{
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler expand: true,
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler cwd: compositionDirectory,
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg src: ["**/*.js"],
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler dest: transpiledDirectory
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler }]
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg },
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler transpileJSM: {
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg files: [{
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg expand: true,
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg cwd: compositionDirectory,
b8487a2e9ef077be108e3811d9f67b6c896132efPhil Ostler src: ["**/*.jsm", "**/*.jsx"],
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg dest: transpiledDirectory,
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg rename: function (dest, src) {
b8487a2e9ef077be108e3811d9f67b6c896132efPhil Ostler return dest + "/" + src.replace(".jsm", ".js").replace(".jsx", ".js");
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg }
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg }],
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg options: {
b6326f13fb241b995957bcf7d2fcd6617b4f03dcPhil Ostler plugins: ["transform-es2015-modules-amd"]
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg }
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler }
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg copy: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Copy all the sources and resources from this project and all dependencies into the composition directory.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * TODO: This copying shouldn't really be necessary, but is required because the dependencies are all over
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * the place. If we move to using npm for our dependencies, this can be greatly simplified.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compose: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg files: buildCompositionDirs.map(function (dir) {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg return {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg expand: true,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg cwd: dir,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: ["**"],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: compositionDirectory
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg };
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg })
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Copy files that do not need to be compiled into the compiled directory.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compiled: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg files: [{
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg expand: true,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg cwd: compositionDirectory,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: nonCompiledFiles.concat([
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "!main.js", // Output by r.js
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "!index.html" // Output by grunt-text-replace
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: compiledDirectory
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }]
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler },
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler /**
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler * Copy files that have been transpiled into the compiled directory.
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler */
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler transpiled: {
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler files: [{
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler expand: true,
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler cwd: transpiledDirectory,
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg src: [
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg "**/*.js",
54cd2ed06b000c8254eeb068ffbd13d0412bc6e8Joe Bandenburg "!main.js" // Output by r.js
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg ],
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler dest: compiledDirectory
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler }]
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg eslint: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Check the JavaScript source code for common mistakes and style issues.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg lint: {
494bebac1636810e5ff37c205fd77a119144957aJoe Bandenburg src: [
494bebac1636810e5ff37c205fd77a119144957aJoe Bandenburg "." + mavenSrcPath + "/**/*.js",
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg "." + mavenSrcPath + "/**/*.jsm",
2320987b7667ae7c20dfe0fde71ea4ed23110549Phil Ostler "." + mavenSrcPath + "/**/*.jsx",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg "!." + mavenSrcPath + "/libs/**/*.js",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg "." + mavenTestPath + "/**/*.js"
494bebac1636810e5ff37c205fd77a119144957aJoe Bandenburg ],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg options: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg format: require.resolve("eslint-formatter-warning-summary")
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg karma: {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg options: {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg configFile: "karma.conf.js"
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg },
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg build: {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg singleRun: true,
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg reporters: "progress"
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg },
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg dev: {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg }
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg less: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Compile LESS source code into minified CSS files.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compile: {
1b982f1e22faf9f1b7855d0828e6d26a03d7984fPhil Ostler files: [{
8e4852c36d7dda230310402d7caf3c78db77ab04Joe Bandenburg src: compositionDirectory + "/css/structure.less",
8e4852c36d7dda230310402d7caf3c78db77ab04Joe Bandenburg dest: compiledDirectory + "/css/structure.css"
8e4852c36d7dda230310402d7caf3c78db77ab04Joe Bandenburg }, {
8e4852c36d7dda230310402d7caf3c78db77ab04Joe Bandenburg src: compositionDirectory + "/css/theme.less",
8e4852c36d7dda230310402d7caf3c78db77ab04Joe Bandenburg dest: compiledDirectory + "/css/theme.css"
1b982f1e22faf9f1b7855d0828e6d26a03d7984fPhil Ostler }, {
1b982f1e22faf9f1b7855d0828e6d26a03d7984fPhil Ostler src: compositionDirectory + "/css/styles-admin.less",
1b982f1e22faf9f1b7855d0828e6d26a03d7984fPhil Ostler dest: compiledDirectory + "/css/styles-admin.css"
1b982f1e22faf9f1b7855d0828e6d26a03d7984fPhil Ostler }],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg options: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compress: true,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg plugins: [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg new (require("less-plugin-clean-css"))({})
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg relativeUrls: true
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg replace: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Include the version of AM in the index file.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * This is needed to force the browser to refetch JavaScript files when a new version of AM is deployed.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg buildNumber: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: compositionDirectory + "/index.html",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: compiledDirectory + "/index.html",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg replacements: [{
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg from: "${version}",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg to: targetVersion
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }]
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg requirejs: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Concatenate and uglify the JavaScript.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compile: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg options: {
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler baseUrl: transpiledDirectory,
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler mainConfigFile: transpiledDirectory + "/main.js",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg out: compiledDirectory + "/main.js",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg include: ["main"],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg preserveLicenseComments: false,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg generateSourceMaps: true,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg optimize: "uglify2",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // These files are excluded from optimization so that the UI can be customized without having to
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg // repackage it.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg excludeShallow: [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "config/AppConfiguration",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "config/ThemeConfiguration"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Sync is used when watching to speed up the build.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg sync: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Copy all the sources and resources from this project and all dependencies into the composition directory.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compose: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg files: watchCompositionDirs.map(function (dir) {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg return {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg cwd: dir,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: ["**"],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: compositionDirectory
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg };
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compareUsing: "md5"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Copy files that do not need to be compiled into the compiled directory.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg *
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Note that this also copies main.js because the requirejs step is not being performed when watching (it
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * is too slow).
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compiled: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg files: [{
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg cwd: compositionDirectory,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: nonCompiledFiles.concat([
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "!index.html" // Output by grunt-text-replace
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]),
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: compiledDirectory
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compareUsing: "md5"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler /**
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler * Copy files that have been transpiled (with their source maps) into the compiled directory.
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler */
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler transpiled: {
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler files: [{
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler cwd: transpiledDirectory,
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg src: [
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg "**/*.js",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler "**/*.js.map"
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg ],
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler dest: compiledDirectory
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler }],
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler compareUsing: "md5"
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler },
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg /**
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg * Copy the test source files into the test-classes target directory.
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg */
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg test: {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg files: testInputDirs.map(function (inputDirectory) {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg return {
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg cwd: inputDirectory,
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg src: ["**"],
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg dest: testClassesDirectory
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg };
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg }),
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg verbose: true,
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg compareUsing: "md5" // Avoids spurious syncs of touched, but otherwise unchanged, files (e.g. CSS)
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Copy the compiled files to the server deploy directory.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg server: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg files: [{
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg cwd: compiledDirectory,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg src: ["**"],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg dest: serverDeployDirectory
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }],
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg verbose: true,
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg compareUsing: "md5" // Avoids spurious syncs of touched, but otherwise unchanged, files (e.g. CSS)
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg },
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg watch: {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Redeploy whenever any source files change.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg source: {
9798bfcb5c34f3b87217b619263fece5e9ffeec0Joe Bandenburg files: watchCompositionDirs.concat(testWatchDirs).map(function (dir) {
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg return dir + "/**";
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }),
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg tasks: ["deploy"]
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg }
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg });
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler grunt.loadNpmTasks("grunt-babel");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-contrib-copy");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-contrib-less");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-contrib-requirejs");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-contrib-watch");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-eslint");
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg grunt.loadNpmTasks("grunt-karma");
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler grunt.loadNpmTasks("grunt-newer");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-sync");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.loadNpmTasks("grunt-text-replace");
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Resync the compiled directory and deploy to the web server.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.registerTask("deploy", [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "sync:compose",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler "newer:babel",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "less",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "replace",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "sync:compiled",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler "sync:transpiled",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg "sync:test",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "sync:server"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]);
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg /**
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg * Rebuild the compiled directory. Maven then packs this directory into the final archive artefact.
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg */
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.registerTask("build", [
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "copy:compose",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "eslint",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler "babel",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "requirejs",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "less",
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg "replace",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg "copy:compiled",
825396f66be8e99fa60124ac9497cf1b454c43b7Phil Ostler "copy:transpiled",
01f87b9746ac246340e0e98d25e03193d83b071fJoe Bandenburg "karma:build"
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg ]);
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
7c7cf27656c20d2fa7d94f706d645561ff7ee26bJoe Bandenburg grunt.registerTask("dev", ["copy:compose", "babel", "deploy", "watch"]);
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.registerTask("prod", ["build"]);
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg grunt.registerTask("default", ["dev"]);
5003b4008868032decd27b09f87bc1222ce1b783Joe Bandenburg};