module.exports = function(grunt) { // Project configuration. grunt .initConfig({ pkg : grunt.file.readJSON('package.json'), uglify : { options : { beautify : false, keepFArgs: false, keepFName: false }, base : { files : { 'htdocs/simulator.min.js' : [ 'js-temp/ts/basecomponent.js', 'js-temp/ts/simulator.js', 'js-temp/ts/tristate.js', 'js-temp/ts/wire.js', 'js-temp/ts/polyfill.js', 'js-temp/ts/helper.js' ] } }, components : { files: [{ cwd: 'js-temp/components/', src: '*.js', expand: true, dest: 'htdocs/components/', rename: function (dst, src) { return dst + '/' + src.replace('.js', '.min.js'); } }], }, plugins : { files: [{ cwd: 'js-temp/plugins/', src: './**/*.js', expand: true, dest: 'htdocs/components/', rename: function (dst, src) { return dst + src.replace('.js', '.min.js').replace(/\.\/.*\//, '/'); } }], } }, ts: { base: { tsconfig: './tsconfig.json', src: ["ts/*.ts", "!components/*.ts", "!node_modules/**", "!plugins/**/*.ts", "!decl/**/*.ts"], options: { declaration: true, declarationDir: "decl" } }, components: { tsconfig: './tsconfig.json', src: ["!ts/*.ts", "components/*.ts", "!node_modules/**", "!plugins/**/*.ts", "decl/ts/*.ts", "!decl/components/*.ts"], options: { declaration: true, declarationDir: "decl" } }, plugins: { tsconfig: './tsconfig.json', src: ["plugins/**/*.ts", "!node_modules/**", "!components/*.ts", "!ts/*.ts", "decl/**/*.ts"], } }, svgmin: { options: { plugins: [ { removeViewBox: true }, { removeUselessStrokeAndFill: true }, { removeDoctype: false }, { cleanupIDs: false }, { collapseGroups: false }, { removeAttrs: [] }, { mergePaths: false }, { removeEmptyText: false }, { convertShapeToPath: false }, ] }, components: { files: [{ cwd: 'components/', src: '*.svg', expand: true, dest: 'htdocs/components/', rename: function (dst, src) { return dst + '/' + src.replace('.js', '.min.js'); } }] }, plugins : { files: [{ cwd: 'plugins/', src: '**/*.svg', expand: true, dest: 'htdocs/components/', rename: function (dst, src) { return dst + src.replace(/^.*\//, '\/'); } }], } }, watch : { tsbase : { files : [ 'ts/*.ts' ], tasks : [ 'ts:base' ] }, tscomponents : { files : [ 'ts/*.ts', 'components/*.ts' ], tasks : [ 'ts:components' ] }, tsplugins : { files : [ 'plugins/**/*.ts' ], tasks : [ 'ts:plugins' ] }, jsbase : { files : [ 'js-temp/*.js' ], tasks : [ 'uglify:base' ] }, jscomponents : { files : [ 'js-temp/components/*.js' ], tasks : [ 'newer:uglify:components' ] }, jsplugins : { files : [ 'js-temp/plugins/**/*.js' ], tasks : [ 'newer:uglify:plugins' ] }, componentssvg : { files : [ 'components/*.svg' ], tasks : [ 'newer:svgmin:components' ] }, pluginsvg : { files : [ 'plugins/**/*.svg' ], tasks : [ 'newer:svgmin:plugins' ] }, lessbase : { files : [ 'less/*.less' ], tasks : [ 'less:base' ] }, lesscomponents : { files : [ 'components/*.less'], tasks : [ 'less:components' ] }, lessplugins : { files : [ 'plugins/**/*.less'], tasks : [ 'less:plugins' ] }, }, less : { base : { options : { "strictImports" : true, "compress" : true }, files : { "htdocs/css/default.css" : "less/default.less", "htdocs/css/light.css" : "less/light.less", }, }, components : { options : { "strictImports" : true, "compress" : true }, files : { "htdocs/components/breadboard.css" : "components/breadboard.less" }, }, plugins : { options : { "strictImports" : true, "compress" : true }, files: [{ cwd: 'plugins/', src: '**/*.less', expand: true, dest: 'htdocs/components/', /* rename: function (dst, src) { return dst + src.replace(/^.*\//, '\/'); }*/ }], } } }); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-svgmin'); grunt.loadNpmTasks('grunt-newer'); grunt.loadNpmTasks('grunt-ts'); // Default task(s). grunt.registerTask('default', [ 'ts', 'less', 'uglify', 'svgmin', 'watch' ]); grunt.registerTask('release', [ 'ts', 'less', 'uglify', 'svgmin' ]); };