node-breeze
Version:
A fork of breeze.js OData javascript library. Features are added to support Nodejs environment
136 lines (114 loc) • 4.44 kB
JavaScript
// Build for breeze.js
// include gulp
var gulp = require('gulp');
// include plug-ins
// var jshint = require('gulp-jshint');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var rimraf = require('gulp-rimraf');
var shell = require('gulp-shell');
var newer = require('gulp-newer');
var through = require('through');
var eventStream = require('event-stream');
var replace = require('gulp-replace');
var handlebars = require('gulp-compile-handlebars');
var srcDir = '../src/';
var destDir = './';
var yuidocDestDir = '../docs/api-docs/';
var yuidocThemeDir = '../docs/api-docs-theme/';
var baseFileNames = [ '_head.jsfrag', 'a??_*.js', '_tailbase.jsfrag'];
var fileNames = [ '_head.jsfrag', 'a??_*.js', 'b??_*.js', '_tail.jsfrag'];
buildMinify('', fileNames);
buildMinify('.base', baseFileNames);
gulp.task('copyBreezeExtns', function() {
return eventStream.concat(
// copy the 'embedded' adapters and remove the 'b00'
gulp.src( mapPath(srcDir, [ 'b00_breeze.*.*.js' ]))
.pipe(rename(function(path) {
// replace 'b??_breeze' with 'breeze.'
var name = path.basename;
path.basename = 'breeze' + name.substring(name.indexOf('.'))
}))
.pipe(gulp.dest(destDir + 'adapters')),
// copy the external adapters
gulp.src( mapPath(srcDir, [ 'breeze.*.*.js' ]))
.pipe(gulp.dest(destDir + 'adapters'))
);
});
gulp.task('dtsgen', function() {
return eventStream.concat(
buildTypescriptDefinition('breeze.d.ts', false),
buildTypescriptDefinition('index.d.ts', true)
);
});
gulp.task('copyForTests', ['minify'], function() {
testDir = '../test/breeze'
return gulp.src( mapPath(destDir, [ 'breeze.*']))
.pipe(gulp.dest(testDir))
});
gulp.task('yuidoc-full', ['yuidoc-clean'], function() {
return gulp.src( mapPath(srcDir, fileNames))
.pipe(concat('foo')) // just needed a method that would get n -> 1 would like something smaller.
.pipe(shell(['yuidoc --themedir ' + yuidocThemeDir + ' --outdir ' + yuidocDestDir + ' ' + "."],
{ cwd: srcDir}));
});
gulp.task('yuidoc-clean', function() {
return gulp.src(yuidocDestDir, { read: false }) // much faster
// .pipe(ignore('node_modules/**'))
.pipe(rimraf( { force: true} ));
});
// for the time being we don't make yuidoc do a clean first - because then we lose the 'newer' effect
// doesn't always work the first time;
gulp.task('yuidoc', function() {
return gulp.src( mapPath(srcDir, fileNames))
.pipe(newer(yuidocDestDir + 'data.json'))
.pipe(concat('foo')) // eat the stream but yield one to trigger yuidoc to run once
/* Clever alternative
.pipe(through(function(file) {
// pass first file through (don't care what it is; it's just a trigger)
this.queue(file);
// then end this stream by passing null to queue, ignoring all additional files
this.queue(null);
}))
*/
.pipe(shell(['yuidoc --themedir ' + yuidocThemeDir + ' --outdir ' + yuidocDestDir + ' ' + "."],
{ cwd: srcDir}));
});
gulp.task('intellisense', ['yuidoc'], function() {
var gen = require('./intellisense/intellisenseGenerator');
gen(yuidocDestDir);
return gulp.src(''); // hack to allow gulp chaining.
});
gulp.task('default', ['minify', 'minify.base', 'copyBreezeExtns', 'copyForTests', 'yuidoc', 'intellisense', 'dtsgen'], function() {
});
function buildMinify(extn, fileNames, destName) {
var destName = 'breeze' + extn + '.debug.js'
var minName = 'breeze' + extn + '.min.js'
gulp.task('minify' + extn, function() {
return gulp.src( mapPath(srcDir, fileNames))
.pipe(newer(destDir + destName))
.pipe(concat(destName, {newLine: ';'}))
.pipe(gulp.dest(destDir))
.pipe(uglify())
.pipe(rename(minName))
.pipe(gulp.dest(destDir));
});
}
function mapPath(dir, fileNames) {
return fileNames.map(function(fileName) {
return dir + fileName;
});
};
function buildTypescriptDefinition(filename, modules) {
var stream = gulp.src( mapPath('../typescript/', [ 'breeze.source.d.ts' ]))
.pipe(replace(/\/\/~/g, ''))
.pipe(handlebars({ modules: modules }));
if (modules) {
// Remove breeze prefix from all types
stream = stream.pipe(replace(/breeze\./g, ''));
}
return stream
.pipe(rename(filename))
.pipe(gulp.dest(destDir + 'typings'));
}