ej2-samples/gulpfile.js

270 строки
9.2 KiB
JavaScript

var glob = require('glob');
var fs = require('fs');
var gulp = require('gulp');
var path = require('path');
var shelljs = global.shelljs || require('shelljs');
var webpackGulp = require('webpack-stream');
var webpack = require('webpack');
var platform = 'typescript';
var sampleList;
var commonConfig = require('./config.json');
gulp.task('scripts', function (done) {
var ts = require('gulp-typescript');
var tsProject = ts.createProject('tsconfig.json', {
typescript: require('typescript')
});
var srcLocation = ["./src/**/*.ts", "./spec/**/*.ts", "!./src/*/samples/**/*.ts", "!./src/node_modules/**/*.d.ts", "!./src/node_modules/**/*.ts"];
var tsResult = gulp.src(srcLocation, {
base: '.'
})
.pipe(ts(tsProject))
.on('error', function (e) {
done(e);
process.exit(1);
});
tsResult.js
.pipe(gulp.dest('./'))
.on('error', function (e) {
done(e);
process.exit(1);
})
.on('end', function () {
done();
});
});
gulp.task('bundle', function (done) {
var webpackConfig = require(fs.realpathSync('./webpack.config.js'));
gulp.src('')
.pipe(webpackGulp(webpackConfig, webpack))
.pipe(gulp.dest('.'))
.on('end', function () {
done();
})
.on('error', function (e) {
done(e);
process.exit(1);
});
});
gulp.task('whole-bundle', function (done) {
if (shelljs.exec('node --max-old-space-size=7168 ./node_modules/gulp/bin/gulp.js bundle').code !== 0) {
process.exit(1);
} else {
done();
}
});
gulp.task('build', function(done){
var runSequence = require('run-sequence');
runSequence('create-locale', 'combine-samplelists', 'styles', 'scripts', 'skip-chunks', 'whole-bundle', done);
})
var jsoncombine = require('gulp-jsoncombine');
var elasticlunr = require('elasticlunr');
var sampleOrder = '';
var sampleList;
gulp.task('combine-samplelists', function () {
combineSampleList(platform, false);
});
gulp.task('styles', function() {
var styleFiles = glob.sync('./node_modules/@syncfusion/ej2/*.css');
for(var i=0; i < styleFiles.length; i++) {
shelljs.cp('-R',styleFiles[i], './styles');
}
});
gulp.task('skip-chunks', function () {
var skipComp = [];
var compPaths = glob.sync(`./src/*/`, {
silent: true,
ignore: [`./src/common/**/`, `./src`]
});
for (let compPath of compPaths) {
if (!fs.existsSync(`${compPath}/common.js`)) {
var componentName = compPath.replace('./src/', '').replace('/', '');
skipComp.push(componentName);
}
}
if (skipComp.length > 0) {
var skipContent = fs.readFileSync(path.resolve('./src/skipChunk.js'), 'utf-8');
skipContent = `${skipContent.split('[')[0]}${JSON.stringify(skipComp)}`;
fs.writeFileSync(path.resolve('./src/skipChunk.js'), skipContent, 'utf-8');
}
});
function combineSampleList(platform, done) {
var filename = platform === 'javascript' ? 'samplelist.js' : 'sampleList.ts';
sampleOrder = JSON.parse(fs.readFileSync(`./src/common/sampleOrder.json`));
var sampleListPath = `./src/common/`;
if (sampleList && sampleList.length) {
var controls = getControls();
sampleOrder = getSampleOrder(controls);
}
return gulp.src(commonConfig.samplejson)
.pipe(jsoncombine(`${filename}`, function (data) {
var result = [];
var subCategory = [];
var intId = 0;
var curDirectory = '';
var addUID = function (pid, dt) {
for (var i = 0; i < dt.length; i++) {
dt[i].uid = pid + i;
if (dt[i].hasOwnProperty('samples')) {
curDirectory = dt[i].directory;
subCategory = [];
addUID('00' + intId + i, dt[i].samples);
intId++;
} else {
var index = subCategory.indexOf(dt[i].category);
if (index !== -1) {
dt[i].order = index;
} else {
subCategory.push(dt[i].category);
dt[i].order = subCategory.length - 1;
}
}
}
};
var orderKeys = Object.keys(sampleOrder);
for (var i = 0; i < orderKeys.length; i++) {
console.log('Category : ' + orderKeys[i]);
var components = sampleOrder[orderKeys[i]];
for (var j = 0; j < components.length; j++) {
console.log('Component : ' + components[j]);
var currentData = getSamples(data, components[j]);
currentData.order = i;
result.push(currentData);
}
}
addUID('0', result);
generateSearchIndex(result, sampleListPath, platform);
var configProps = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
var commonChunkSkip = configProps.cssComponent || [];
var sList = `${platform === 'javascript' ?
'window.samplesList =' : 'export let samplesList : any ='}` + JSON.stringify(result) + ';\n\n' +
`${platform === 'typescript' ? `\n\n export let skipCommonChunk: string[] = ${JSON.stringify(commonChunkSkip)};` : ''}`;
return new Buffer(sList);
}))
.pipe(gulp.dest(sampleListPath))
}
function getSamples(data, component) {
var dataList = Object.keys(data);
for (var i = 0; i < dataList.length; i++) {
var currentData = data[dataList[i]];
if (component === currentData.name) {
return currentData;
}
}
}
function generateSearchIndex(sampleArray, samplelistpath, platform) {
var searchindexpath = platform === 'javascript' ? `${samplelistpath}search-index.js` :
`${samplelistpath}search-index.json`;
elasticlunr.clearStopWords();
var instance = elasticlunr(function () {
this.addField('component');
this.addField('name');
this.setRef('uid');
});
for (let sampleCollection of sampleArray) {
var component = sampleCollection.name;
var directory = sampleCollection.directory;
var puid = sampleCollection.uid;
var hideOnDevice = sampleCollection.hideOnDevice;
for (let sample of sampleCollection.samples) {
sample.component = component;
sample.dir = directory;
sample.parentId = puid;
sample.hideOnDevice = hideOnDevice;
instance.addDoc(sample);
}
}
fs.writeFileSync(searchindexpath, `${platform === 'javascript' ? 'window.searchIndex =' : ''}` + JSON.stringify(instance.toJSON()));
}
gulp.task('create-locale', function (done) {
createLocale(platform, done);
});
function createLocale(platform, done) {
var fileExt = platform === 'javascript' ? '.js' : '.ts';
var localePath = `${platform === 'javascript' ? `./dist` : `./src/common`}`;
if (!fs.existsSync(localePath)) {
shelljs.mkdir('-p', localePath);
}
var localeJson = glob.sync('./src/**/locale.json', {
silent: true
});
if (localeJson.length) {
// baseUtil;
var obj = {};
for (var i = 0; i < localeJson.length; i++) {
var compentLocale = JSON.parse(fs.readFileSync(localeJson[i]));
obj = extend({}, obj, compentLocale, true);
}
fs.writeFileSync(`${localePath}/locale-string${fileExt}`,
`${platform === 'javascript' ? 'window.Locale=' : 'export let Locale: Object='}` + JSON.stringify(obj) + ';');
done();
} else {
fs.writeFileSync(`${localePath}/locale-string${fileExt}`,
`${platform === 'javascript' ? 'window.Locale=' : 'export let Locale: Object={}'}`);
done();
}
}
function extend(copied, first, second, deep) {
var result = copied || {};
var length = arguments.length;
if (deep) {
length = length - 1;
}
var _loop_1 = function (i) {
if (!arguments_1[i]) {
return 'continue';
}
var obj1 = arguments_1[i];
Object.keys(obj1).forEach(function (key) {
var src = result[key];
var copy = obj1[key];
var clone;
if (deep && isObject(copy)) {
clone = isObject(src) ? src : {};
result[key] = extend({}, clone, copy, true);
}
else {
result[key] = copy;
}
});
};
var arguments_1 = arguments;
for (var i = 1; i < length; i++) {
_loop_1(i);
}
return result;
}
function isObject(obj) {
var objCon = {};
return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);
}
function isNullOrUndefined(value) {
return value === undefined || value === null;
}
gulp.task('serve', ['build'], function (done) {
var browserSync = require('browser-sync');
var bs = browserSync.create('Essential TypeScript');
var options = {
server: {
baseDir: './'
},
ui: false
};
bs.init(options, done);
});