summaryrefslogtreecommitdiffstats
path: root/catalog-ui/Gruntfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/Gruntfile.js')
-rw-r--r--catalog-ui/Gruntfile.js807
1 files changed, 807 insertions, 0 deletions
diff --git a/catalog-ui/Gruntfile.js b/catalog-ui/Gruntfile.js
new file mode 100644
index 0000000000..619d8316a1
--- /dev/null
+++ b/catalog-ui/Gruntfile.js
@@ -0,0 +1,807 @@
+// Generated on 2015-04-28 using
+// generator-webapp 0.5.1
+'use strict';
+
+// # Globbing
+// for performance reasons we're only matching one level down:
+// 'test/spec/{,*/}*.js'
+// If you want to recursively match all subfolders, use:
+// 'test/spec/**/*.js'
+
+module.exports = function (grunt) {
+
+ // Time how long tasks take. Can help when optimizing build times
+ require('time-grunt')(grunt);
+
+ // Load grunt tasks automatically
+ require('load-grunt-tasks')(grunt);
+
+ // Configurable paths
+ var config = {
+ app: 'app',
+ appModuleName: 'sdcApp',
+ dist: 'app/dist'
+ };
+
+ // Define the configuration for all the tasks
+ grunt.initConfig({
+
+ // Project settings
+ config: config,
+
+ // Watches files for changes and runs tasks based on the changed files
+ watch: {
+ html: {
+ files: ['<%= config.app %>/scripts/**/*.html'],
+ tasks: ['ngtemplates:app']
+ },
+ less: {
+ files: ['<%= config.app %>/**/*.less'],
+ tasks: ['less:all']
+ },
+ ts: {
+ files: ['<%= config.app %>/scripts/**/*.ts'],
+ tasks: ['ts:all']
+ },
+ bower: {
+ files: ['bower.json'],
+ tasks: ['wiredep']
+ },
+
+ gruntfile: {
+ files: ['Gruntfile.js']
+ },
+
+ livereload: {
+ options: {
+ livereload: '<%= connect.options.livereload %>'
+ },
+ files: [
+ '<%= config.app %>/{,*/}*.html',
+ '<%= config.app %>/scripts/**/*.html',
+ '<%= config.app %>/scripts/**/*.css',
+ '.tmp/styles/{,*/}*.css',
+ '<%= config.app %>/images/{,*/}*'
+ ]
+ },
+ configurations: {
+ files: [
+ 'configurations/*.json'
+ ],
+ tasks: ['ngconstant']
+ }
+ },
+
+ ngconstant: {
+ options: {
+ dest: 'app/scripts/modules/configurations.js',
+ name: 'Sdc.Config'
+ },
+ main: {
+ constants: {
+ sdcConfig: grunt.file.readJSON(grunt.option('env') ? 'configurations/' + grunt.option('env') + '.json' : 'configurations/prod.json'),
+ sdcMenu: grunt.file.readJSON('configurations/menu.json')
+ }
+ }
+ },
+
+ express: {
+ options: {
+ port: process.env.PORT || 9000
+ },
+ mock: {
+ options: {
+ script: 'server-mock/mock-server.js'
+ }
+ }
+ },
+
+ ts: {
+ all: {
+ src: [
+ 'app/scripts/**/*.ts',
+ 'typings/**/*.ts'
+ ],
+ reference: 'app/scripts/references.ts'
+ },
+ single: {
+ src: []
+ }
+ },
+ ngtemplates: {
+ app: {
+ options: {
+ module: '<%= config.appModuleName %>',
+ prefix: '/'
+ },
+ src: [
+ '<%= config.app %>/scripts/**/*.html',
+ '!index.html'
+ ],
+ dest: '<%= config.app %>/scripts/templates.js'
+ }
+ },
+ less: {
+ all: {
+ options: {
+ paths: ['<%= config.app %>/scripts',
+ '<%= config.app %>/styles']
+ },
+ files: {
+ '<%= config.app %>/styles/app.css': '<%= config.app %>/styles/app.less'
+ }
+ },
+ single: {
+ paths: ['<%= config.app %>/scripts',
+ '<%= config.app %>/styles'],
+ files: []
+ }
+ },
+
+ injector: {
+ options: {},
+ // Inject application script files into index.html (doesn't include bower)
+ scripts_models: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_models -->',
+ endtag: '<!-- endinjector:js_models -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ [
+ '<%= config.app %>/scripts/models/**/*.js',
+ '!<%= config.app %>/scripts/models/**/*-tests.js'
+ ]
+ ]
+ }
+ },
+
+ scripts_utils: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_utils -->',
+ endtag: '<!-- endinjector:js_utils -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ [
+ '<%= config.app %>/scripts/utils/**/*.js',
+ '!<%= config.app %>/scripts/models/**/*-tests.js'
+ ]
+ ]
+ }
+ },
+
+ scripts_filters: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_filters -->',
+ endtag: '<!-- endinjector:js_filters -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ ['<%= config.app %>/scripts/filters/**/*.js',
+ '!<%= config.app %>/scripts/filters/**/*-tests.js'
+ ]
+ ]
+ }
+ },
+
+ scripts_directives: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_directives -->',
+ endtag: '<!-- endinjector:js_directives -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ ['<%= config.app %>/scripts/directives/**/*.js',
+ '!<%= config.app %>/scripts/directives/**/*-tests.js'
+ ]
+ ]
+ }
+ },
+
+ scripts_services: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_services -->',
+ endtag: '<!-- endinjector:js_services -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ ['<%= config.app %>/scripts/services/**/*.js',
+ '!<%= config.app %>/scripts/services/**/*-tests.js'
+ ]
+ ]
+ }
+ },
+
+ scripts_view_models: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ return '<script src="' + filePath + '"></script>';
+ },
+ starttag: '<!-- injector:js_view_models -->',
+ endtag: '<!-- endinjector:js_view_models -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ ['<%= config.app %>/scripts/view-models/**/*.js',
+ '!<%= config.app %>/scripts/view-models/**/*-tests.js']
+ ]
+ }
+ },
+
+ // Inject component less into app.less
+ less: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/scripts/', '../scripts/');
+ filePath = filePath.replace('/app/styles/', '');
+ return '@import \'' + filePath + '\';';
+ },
+ starttag: '// injector:less',
+ endtag: '// endinjector:less'
+ },
+ files: {
+ '<%= config.app %>/styles/app.less': [
+ '<%= config.app %>/styles/**/*.less',
+ '<%= config.app %>/scripts/**/*.less',
+ '!<%= config.app %>/styles/app.less'
+ ]
+ }
+ },
+
+ // Inject component css into index.html
+ css: {
+ options: {
+ transform: function (filePath) {
+ filePath = filePath.replace('/app/', '');
+ filePath = filePath.replace('/.tmp/', '');
+ return '<link rel="stylesheet" href="' + filePath + '">';
+ },
+ starttag: '<!-- injector:css -->',
+ endtag: '<!-- endinjector -->'
+ },
+ files: {
+ '<%= config.app %>/index.html': [
+ '<%= config.app %>/scripts/**/*.css',
+ '<%= config.app %>/styles/**/*.css',
+ '!<%= config.app %>/styles/app.css'
+ ]
+ }
+ }
+ },
+
+ // The actual grunt server settings
+ connect: {
+ options: {
+ port: 9000,
+ open: true,
+ livereload: 35729,
+ // Change this to '0.0.0.0' to access the server from outside
+ hostname: 'localhost'
+ },
+ livereload: {
+ options: {
+ middleware: function (connect) {
+ return [
+ connect().use(function (req, res, next) {
+ var mockApis = require('./configurations/mock.json').sdcConfig;
+ var userType;
+ switch (grunt.option('role')) {
+ case "admin":
+ userType = mockApis.userTypes.admin;
+ break;
+ case "tester":
+ userType = mockApis.userTypes.tester;
+ break;
+ case "governor":
+ userType = mockApis.userTypes.governor;
+ break;
+ case "ops":
+ userType = mockApis.userTypes.ops;
+ break;
+ case "designer":
+ userType = mockApis.userTypes.designer;
+ break;
+ case "product_strategist":
+ userType = mockApis.userTypes.product_strategist;
+ break;
+ case "product_manager":
+ userType = mockApis.userTypes.product_manager;
+ break;
+ default:
+ userType = mockApis.userTypes.designer;
+ }
+ res.cookie(mockApis.cookie.userIdSuffix, req.headers[mockApis.cookie.userIdSuffix] || userType.userId);
+ res.cookie(mockApis.cookie.userEmail, req.headers[mockApis.cookie.userEmail] || userType.email);
+ res.cookie(mockApis.cookie.userFirstName, req.headers[mockApis.cookie.userFirstName] || userType.firstName);
+ res.cookie(mockApis.cookie.userLastName, req.headers[mockApis.cookie.userLastName] || userType.lastName);
+ next();
+ }),
+ connect().use(require('http-proxy-middleware')(['/onboarding', '/onboarding-api'], {
+ target: 'http://feHost:8181/',
+ changeOrigin: true,
+ secure: false
+ })),
+ connect().use('/bower_components', connect.static('./bower_components')),
+ connect().use('/non_bower_components', connect.static('./non_bower_components')),
+ connect.static(config.app)
+ ];
+ }
+ }
+ },
+ dist: {
+ options: {
+ base: '<%= config.dist %>',
+ livereload: false
+ }
+ }
+ },
+
+ // Empties folders to start fresh
+ clean: {
+ generated: {
+ files: [{
+ dot: true,
+ src: [
+ '<%= config.app %>/scripts/**/*.js',
+ '<%= config.app %>/scripts/**/*.css',
+ '!<%= config.app %>/scripts/**/welcome/styles/*.css',
+ '<%= config.app %>/styles/**/*.css',
+ '<%= config.app %>/scripts/**/*.js.map'
+ ]
+ }]
+ },
+ dist: {
+ files: [{
+ dot: true,
+ src: [
+ '.tmp',
+ '<%= config.dist %>/*',
+ '!<%= config.dist %>/.git*'
+ ]
+ }]
+ },
+ server: '.tmp'
+ },
+ // Add vendor prefixed styles
+ autoprefixer: {
+ options: {
+ browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']
+ },
+ dist: {
+ files: [{
+ expand: true,
+ cwd: '.tmp/css/',
+ src: '{,*/**/}*.css',
+ dest: '.tmp/css/'
+ }]
+ }
+ },
+
+ // Automatically inject Bower components into the HTML file
+ wiredep: {
+ app: {
+ ignorePath: /^\/|\.\.\//,
+ src: ['<%= config.app %>/index.html']
+ }
+ },
+
+ // Renames files for browser caching purposes
+ rev: {
+ dist: {
+ files: {
+ src: [
+ '<%= config.dist %>/scripts/{,*/}*.js',
+ '<%= config.dist %>/styles/{,*/}*.css',
+ '<%= config.dist %>/images/{,*/}*.*',
+ '!<%= config.dist %>/images/resource-icons/{,*/}*.*',
+ '!<%= config.dist %>/images/service-icons/{,*/}*.*',
+ '!<%= config.dist %>/images/relationship-icons/{,*/}*.*',
+ '<%= config.dist %>/*.{ico,png}'
+ ]
+ }
+ }
+ },
+
+ // Reads HTML for usemin blocks to enable smart builds that automatically
+ // concat, minify and revision files. Creates configurations in memory so
+ // additional tasks can operate on them
+ useminPrepare: {
+ options: {
+ dest: '<%= config.dist %>'
+ },
+ sdc: {
+ src: ['<%= config.app %>/index.html']
+ },
+ html: '<%= config.app %>/index.html'
+ },
+
+ // Performs rewrites based on rev and the useminPrepare configuration
+ usemin: {
+ options: {
+ assetsDirs: [
+ '<%= config.dist %>',
+ '<%= config.dist %>/images',
+ '<%= config.dist %>/styles'
+ ],
+ // This is so we update image references in our ng-templates
+ patterns: {
+ js: [
+ [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images']
+ ]
+ }
+ },
+ html: ['<%= config.dist %>/{,*/}*.html'],
+ css: ['<%= config.dist %>/styles/{,*/}*.css'],
+ js: ['<%= config.dist %>/public/{,*/}*.js']
+ },
+
+ // The following *-min tasks produce minified files in the dist folder
+ imagemin: {
+ dist: {
+ files: [{
+ expand: true,
+ cwd: '<%= config.app %>/images',
+ src: '<%= config.app %>/**/*.{gif,jpeg,jpg,png}',
+ dest: '<%= config.dist %>/images'
+ }]
+ }
+ },
+
+ svgmin: {
+ dist: {
+ files: [{
+ expand: true,
+ cwd: '<%= config.app %>/images',
+ src: '{,*/}*.svg',
+ dest: '<%= config.dist %>/images'
+ }]
+ }
+ },
+
+ htmlmin: {
+ dist: {
+ options: {
+ collapseBooleanAttributes: true,
+ collapseWhitespace: true,
+ conservativeCollapse: true,
+ removeAttributeQuotes: true,
+ removeCommentsFromCDATA: true,
+ removeEmptyAttributes: true,
+ removeOptionalTags: true,
+ removeRedundantAttributes: true,
+ useShortDoctype: true
+ },
+ files: [{
+ expand: true,
+ cwd: '<%= config.dist %>',
+ src: '{,*/}*.html',
+ dest: '<%= config.dist %>'
+ }]
+ }
+ },
+
+// By default, your `index.html`'s <!-- Usemin block --> will take care
+// of minification. These next options are pre-configured if you do not
+// wish to use the Usemin blocks.
+ cssmin: {
+ dist: {
+ files: {
+ '<%= config.dist %>/styles/main.css': [
+ '.tmp/css/{,*/**/}*.css',
+ '<%= config.app %>/scripts/{,*/**/}*.css',
+ '<%= config.app %>/styles/app.css'
+ ]
+ }
+ }
+ },
+ uglify: {
+ dist: {
+ files: {
+ '<%= config.dist %>/scripts/scripts.js': [
+ '<%= config.dist %>/scripts/scripts.js'
+ ]
+ }
+ }
+ },
+ replace: {
+ cssReplace: {
+ src: ['<%= config.app %>/scripts/{,*/**/}*.css',
+ '<%= config.app %>/styles/{,*/**/}*.css'],
+ overwrite: true,
+ replacements: [
+ {
+ from: '../../../images/',
+ to: '../images/'
+ },
+ {
+ from: '../../images/',
+ to: '../images/'
+ },
+ {
+ from: '../../../fonts/',
+ to: '../fonts/'
+ },
+ {
+ from: '../../fonts/',
+ to: '../fonts/'
+ },
+ {
+ from: '../../../styles/images/',
+ to: 'images/'
+ }
+ ]
+ },
+ },
+ concat: {
+ dist: {
+ options: {
+ separator: ';\n'
+ },
+ src: ['<%= config.app %>/scripts/{,*/**/}*.js'],
+ dest: '.tmp/concat/scripts/scripts.js'
+ },
+ generated: {
+ options: {
+ separator: '\n'
+ }
+ }
+ },
+
+ // Copies remaining files to places other tasks can use
+ copy: {
+ dist: {
+ files: [{
+ expand: true,
+ dot: true,
+ cwd: '<%= config.app %>',
+ dest: '<%= config.dist %>',
+ src: [
+ '*.{ico,png,txt}',
+ '.htaccess',
+ // 'bower_components/**/*',
+ 'styles/images/**/*',
+ 'styles/fonts/**/*',
+ 'languages/**/*',
+ 'index.html'
+ ]
+ }, {
+ src: 'node_modules/apache-server-configs/dist/.htaccess',
+ dest: '<%= config.dist %>/.htaccess'
+ },
+ {
+ expand: true,
+ cwd: '.tmp/images',
+ dest: '<%= config.dist %>/images',
+ src: ['generated/*']
+ },
+ //TODO to remove this section after integration onboard finished
+ {
+ expand: true,
+ cwd: '<%= config.app %>/third-party',
+ dest: '<%= config.dist %>/third-party',
+ src: ['onboard_bundle_full.js']
+ },
+ {
+ expand: true,
+ dest: '<%= config.dist %>',
+ src: [
+ 'package.json'
+ ]
+ }
+ ]
+ },
+ styles: {
+ expand: true,
+ cwd: '<%= config.app %>/styles',
+ dest: '.tmp/css/',
+ src: '{,*/**/}*.css'
+ }
+ },
+
+ // Run some tasks in parallel to speed up build process
+ concurrent: {
+ server: ['copy:styles'],
+ test: ['copy:styles'],
+ dist: [
+ 'copy:styles',
+ 'imagemin'
+ ]
+ },
+
+ // Test settings
+ karma: {
+ dev: {
+ configFile: "tests/karma.unit.conf.js",
+ singleRun: true,
+ options: {
+ browsers: ['Chrome'],
+ coverageReporter: {
+ type: 'html',
+ dir: 'tests/Coverage'
+ }
+ }
+ },
+ debug: {
+ configFile: "tests/karma.unit.conf.js",
+ singleRun: false,
+ //comment out this line if you want to cancel the watch and see the UT log
+ background: true,
+ options: {
+ browsers: ['Chrome'],
+ reporters: [
+ 'junit',
+ 'dots',
+ 'progress'
+ ]
+ }
+ },
+ jenkins: {
+ configFile: "tests/karma.unit.conf.js",
+ singleRun: true,
+ options: {
+ browsers: ['PhantomJS'],
+ coverageReporter: {
+ type: 'text-summary',
+ dir: 'tests/Coverage',
+ file: 'coverage.txt'
+ }
+ }
+ }
+ },
+
+ tslint: {
+ options: {
+ configuration: 'tslint.json'
+ },
+ files: {
+ src: ['<%= config.app %>/**/*.ts']
+ }
+ }
+ });
+
+ grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) {
+
+ var env = grunt.option('env');
+
+ if (grunt.option('allow-remote')) {
+ grunt.config.set('connect.options.hostname', '0.0.0.0');
+ }
+ if (target === 'dist') {
+ return grunt.task.run(['build', 'connect:dist:keepalive']);
+ }
+
+
+ if (env === 'mock') {
+ grunt.task.run([
+ 'express:mock',
+ 'clean:generated',
+ 'ts:all',
+ 'ngtemplates:app',
+ 'injector',
+ 'less:all',
+ 'ngconstant',
+ 'wiredep',
+ 'concurrent:server',
+ 'autoprefixer',
+ 'connect:livereload',
+ 'watch:html',
+ 'watch:less'
+ ]);
+ }
+
+ grunt.task.run([
+ 'clean:generated',
+ 'ts:all',
+ 'ngtemplates:app',
+ 'injector',
+ 'less:all',
+ 'ngconstant',
+ 'wiredep',
+ 'concurrent:server',
+ 'autoprefixer',
+ 'connect:livereload',
+ 'watch'
+ ]);
+ });
+
+ grunt.registerTask('build', [
+ 'clean:generated',
+ 'less:all',
+ 'ts:all',
+ 'ngconstant',
+ 'ngtemplates:app',
+ 'wiredep',
+ 'replace',
+ 'clean:dist',
+ 'useminPrepare:sdc',
+ 'concurrent:dist',
+ 'autoprefixer:dist',
+ 'concat',
+ 'copy:dist',
+ 'cssmin',
+ 'uglify',
+ 'rev',
+ 'usemin'
+ ]);
+
+ grunt.registerTask("test", function (target) {
+
+ if (!(target === 'debug' || target === 'dev' || target === 'jenkins')) {
+ throw new Error("target available for test are <dev|debug|jenkins>");
+ }
+ var tasks = [
+ // "tslint:karma",
+ // "ngconstant",
+ //// "concurrent:test",
+ // "servicesIconConstants",
+ // "autoprefixer",
+ // "ngtemplates:testsTemplates",
+ // "connect:test"
+ ];
+
+ tasks.push('karma:' + target);
+ if (target === 'debug') {
+ if (grunt.config.get('watch.ts')) {
+ tasks.push("watch:ts");
+ } else {
+ throw new Error("target watch:ts is not available, verify that it exists in your Gruntfile");
+ }
+ }
+ grunt.task.run(tasks);
+ });
+
+
+ var lessSingleTask = function (filePath) {
+ var lessSingleFiles = [{
+ expand: true,
+ src: [filePath.replace(/\\/g, '/')],
+ ext: '.css'
+ }];
+ grunt.config('less.single.files', lessSingleFiles);
+ grunt.config('watch.less.tasks', 'less:single');
+
+ };
+
+ var tsSingleTask = function (filePath) {
+
+ var tsSingleData = {
+ src: [filePath.replace(/\\/g, '/')]
+ };
+ // grunt.config('ts.single', tsSingleData);
+
+ };
+
+ var singleTaskByTaskName = {
+ //less: lessSingleTask,
+ ts: tsSingleTask
+ };
+
+ var onGruntWatchEvent = function (action, filepath, target) {
+ if (singleTaskByTaskName[target]) {
+ singleTaskByTaskName[target].call(undefined, filepath);
+ }
+ };
+ grunt.event.on('watch', onGruntWatchEvent);
+};