logicsimulator/Gruntfile.js

202 lines
6.0 KiB
JavaScript

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' ]);
};