UNPKG

ag-grid

Version:

Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components

226 lines (197 loc) 7.39 kB
const gulp = require('gulp'); const path = require('path'); const clean = require('gulp-clean'); const rename = require("gulp-rename"); const autoprefixer = require('autoprefixer'); const gulpTypescript = require('gulp-typescript'); const typescript = require('typescript'); const header = require('gulp-header'); const merge = require('merge2'); const pkg = require('./package.json'); const webpack = require('webpack'); const webpackStream = require('webpack-stream'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const filter = require('gulp-filter'); const named = require('vinyl-named'); const replace = require('gulp-replace'); const bundleTemplate = '// <%= pkg.name %> v<%= pkg.version %>\n'; const headerTemplate = ['/**', ' * <%= pkg.name %> - <%= pkg.description %>', ' * @version v<%= pkg.version %>', ' * @link <%= pkg.homepage %>', ' * @license <%= pkg.license %>', ' */', ''].join('\n'); const dtsHeaderTemplate = '// Type definitions for <%= pkg.name %> v<%= pkg.version %>\n' + '// Project: <%= pkg.homepage %>\n' + '// Definitions by: Niall Crosby <https://github.com/ag-grid/>\n'; gulp.task('default', ['webpack-all']); gulp.task('release', ['webpack-all']); gulp.task('webpack-all', ['webpack', 'webpack-minify', 'webpack-noStyle', 'webpack-minify-noStyle'], tscSrcTask); gulp.task('webpack-minify-noStyle', ['tsc', 'scss'], webpackTask.bind(null, true, false)); gulp.task('webpack-noStyle', ['tsc', 'scss'], webpackTask.bind(null, false, false)); gulp.task('webpack-minify', ['tsc', 'scss'], webpackTask.bind(null, true, true)); gulp.task('webpack', ['tsc', 'scss'], webpackTask.bind(null, false, true)); gulp.task('scss-watch', ['scss-no-clean'], scssWatch); gulp.task('scss-no-clean', scssTask); gulp.task('tsc', ['tsc-src'], tscMainTask); gulp.task('tsc-src', ['cleanDist'], tscSrcTask); gulp.task('tsc-main', ['cleanMain'], tscMainTask); gulp.task('scss', ['cleanDist'], scssTask); gulp.task('cleanDist', cleanDist); gulp.task('cleanMain', cleanMain); gulp.task('cleanForCI', ['cleanDist', 'cleanMain']); gulp.task('publishForCI', () => { return gulp.src("./ag-grid-*.tgz") .pipe(rename("ag-grid.tgz")) .pipe(gulp.dest("c:/ci/ag-grid/")); }); function scssWatch() { gulp.watch('./src/styles/!**/!*', ['scss-no-clean']); } function cleanDist() { return gulp .src('dist', {read: false}) .pipe(clean()); } function cleanMain() { return gulp .src(['./main.d.ts', 'main.js'], {read: false}) .pipe(clean()); } function tscSrcTask() { const project = gulpTypescript.createProject('./tsconfig.json', {typescript: typescript}); const tsResult = gulp .src('src/ts/**/*.ts') .pipe(gulpTypescript(project)); return merge([ tsResult.dts .pipe(header(dtsHeaderTemplate, {pkg: pkg})) .pipe(gulp.dest('dist/lib')), tsResult.js .pipe(header(headerTemplate, {pkg: pkg})) .pipe(gulp.dest('dist/lib')) ]) } function tscMainTask() { const project = gulpTypescript.createProject('./tsconfig-main.json', {typescript: typescript}); const tsResult = gulp .src('./src/ts/main.ts') .pipe(gulpTypescript(project)); return merge([ tsResult.dts .pipe(replace("\"./", "\"./dist/lib/")) .pipe(header(dtsHeaderTemplate, {pkg: pkg})) .pipe(rename("main.d.ts")) .pipe(gulp.dest('./')), tsResult.js .pipe(replace("require(\"./", "require(\"./dist/lib/")) .pipe(header(headerTemplate, {pkg: pkg})) .pipe(rename("main.js")) .pipe(gulp.dest('./')) ]) } function webpackTask(minify, styles) { const plugins = []; if (minify) { plugins.push(new webpack.optimize.UglifyJsPlugin({compress: {warnings: false}})); } const mainFile = styles ? './main-with-styles.js' : './main.js'; let fileName = 'ag-grid'; fileName += minify ? '.min' : ''; fileName += styles ? '' : '.noStyle'; fileName += '.js'; return gulp.src('src/entry.js') .pipe(webpackStream({ entry: { main: mainFile }, output: { path: path.join(__dirname, "dist"), filename: fileName, library: ["agGrid"], libraryTarget: "umd" }, //devtool: 'inline-source-map', module: { loaders: [ {test: /\.css$/, loader: "style-loader!css-loader"} ] }, plugins: plugins })) .pipe(header(bundleTemplate, {pkg: pkg})) .pipe(gulp.dest('./dist/')); } function scssTask() { const svgMinOptions = { plugins: [ {cleanupAttrs: true}, {removeDoctype: true}, {removeComments: true}, {removeMetadata: true}, {removeTitle: true}, {removeDesc: true}, {removeEditorsNSData: true}, {removeUselessStrokeAndFill: true}, {cleanupIDs: true}, {collapseGroups: true}, {convertShapeToPath: true} ] }; // Uncompressed return gulp.src(['src/styles/*.scss', '!src/styles/_*.scss']) .pipe(named()) .pipe(webpackStream({ module: { rules: [ { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', //resolve-url-loader may be chained before sass-loader if necessary use: [ {loader: 'css-loader', options: {minimize: false}}, 'sass-loader', { loader: 'postcss-loader', options: {syntax: 'postcss-scss', plugins: [autoprefixer()]} }, ] }) }, { test: /\.(svg)$/, use: [ 'cache-loader', { loader: 'url-loader', options: { limit: 8192 } }, { loader: 'image-webpack-loader', options: { svgo: svgMinOptions } }, { loader: 'svg-colorize-loader', options: { color1: "#000000", color2: "#FFFFFF" } } ] } ] }, plugins: [ new ExtractTextPlugin('[name].css') ] })) .pipe(filter("**/*.css")) .pipe(gulp.dest('dist/styles/')); }