Skip to content

Commit

Permalink
chore(build): Working on new build process
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeRyanDev committed Nov 2, 2015
1 parent 2ce7fd0 commit d232cb2
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 58 deletions.
1 change: 1 addition & 0 deletions build/index.js
@@ -0,0 +1 @@
module.exports = require('./cjs');
1 change: 1 addition & 0 deletions build/tests.js
@@ -0,0 +1 @@
module.exports = require('./cjs/tests');
156 changes: 114 additions & 42 deletions gulpfile.babel.js
@@ -1,29 +1,79 @@
import gulp from 'gulp';
import ts from 'gulp-typescript';
import {rollup} from 'rollup';
import {rollup} from 'rollup-babel';
import babel from 'gulp-babel';
import rename from 'gulp-rename';
import rimraf from 'rimraf';
import uglify from 'gulp-uglify';
import {Server as KarmaServer, LOG} from 'karma';
import {join} from 'path';
import runSequence from 'run-sequence';
import sourcemaps from 'gulp-sourcemaps';
import merge from 'merge2';
import del from 'del';
import replace from 'gulp-replace';
import filter from 'gulp-filter';
import concat from 'gulp-concat';

let tsconfig = require('./tsconfig.json');
let tsProject = ts.createProject('tsconfig.json');

gulp.task('clean-dist', done => {
rimraf('./dist', done);
const tsconfig = require('./tsconfig.json');
const tsProject = ts.createProject('tsconfig.json', {
declaration: true,
noLib: true,
outDir: 'es6'
});

gulp.task('build/ts-to-es6', () => {
async function deleteDistFolder(){
await del(['./dist']);
}

function typescriptToES6(){
let result = tsProject.src()
.pipe(sourcemaps.init())
.pipe(ts(tsProject));

return merge([
result.js.pipe(sourcemaps.write()).pipe(gulp.dest('dist')),
result.dts.pipe(gulp.dest('dist'))
]);
}

return result.js.pipe(gulp.dest('dist'));
});
function buildES6Dist(){
let transpile = gulp.src('./dist/lib/**/*.js')
.pipe(filter(['**/*', '!**/*.spec.js']))
.pipe(replace('@reactivex/rxjs/dist/es6', '@reactivex/rxjs/dist/cjs'))
.pipe(gulp.dest('./dist/es6'));

let move = gulp.src('./dist/lib/**/*.d.ts')
.pipe(filter(['**/*', '!**/*.spec.d.ts']))
.pipe(gulp.dest('./dist/es6'));

return merge([ transpile, move ]);
}

function buildCJSDist(){
let transpile = gulp.src('./dist/es6/**/*.js')
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(babel({ modules: 'common', stage: 0 }))
.pipe(sourcemaps.write())
.pipe(gulp.dest('./dist/cjs'));

let move = gulp.src('./dist/es6/**/*.d.ts')
.pipe(gulp.dest('./dist/cjs'));

return merge([ transpile, move ]);
}

function testES6(done){
let server = new KarmaServer({
configFile: join(__dirname, 'karma.conf.js'),
singleRun: true,
reporters: ['dots']
}, done);

gulp.task('build/rollup-es6', (async () => {
server.start();
}

async function rollupES6(){
let bundle = await rollup({
entry: './dist/lib/index.js',
external: ['reflect-metadata']
Expand All @@ -32,37 +82,56 @@ gulp.task('build/rollup-es6', (async () => {
await bundle.write({
dest: './dist/ng-forward.es6.js'
});
}));
}

gulp.task('build/es6-to-umd-es5', () => {
function bundleToES5(){
return gulp.src('./dist/ng-forward.es6.js')
.pipe(rename('ng-forward.js'))
.pipe(babel({ modules: 'umd' }))
.pipe(babel({ modules: 'umd', stage: 0 }))
.pipe(rename('ng-forward.es5.js'))
.pipe(gulp.dest('./dist'));
}

function createSFXBundle(){
return gulp.src([
'./node_modules/babel-core/browser-polyfill.js',
'./node_modules/reflect-metadata/Reflect.js',
'./dist/ng-forward.es5.js'
])
.pipe(concat('ng-forward.dist.js'))
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
.pipe(gulp.dest('./dist'))
}

gulp.task('test', (done) => {
let server = new KarmaServer({
configFile: join(__dirname, 'karma.conf.js'),
singleRun: true,
reporters: ['dots']
}, done);
async function cleanupDistFolder(){
await del([
'./dist/lib',
'./dist/ng-forward.es6.js',
'./dist/ng-forward.es5.js'
]);
}

server.start();
});
function createPackage(){
return gulp.src(['./package.json', './build/**.js'])
.pipe(gulp.dest('./dist'));
}

gulp.task('clean-dist', deleteDistFolder);
gulp.task('build/ts-to-es6', ['clean-dist'], typescriptToES6);
gulp.task('build/test', ['build/ts-to-es6'], testES6);
gulp.task('build/lib-to-es6', ['build/test'], buildES6Dist);
gulp.task('build/es6-to-cjs', ['build/lib-to-es6'], buildCJSDist);
gulp.task('build/rollup', ['build/es6-to-cjs'], rollupES6);
gulp.task('build/bundle-to-es5', ['build/rollup'], bundleToES5);
gulp.task('build/create-sfx-bundle', ['build/bundle-to-es5'], createSFXBundle);
gulp.task('build/cleanup', ['build/create-sfx-bundle'], cleanupDistFolder);
gulp.task('build', ['build/cleanup'], createPackage);

gulp.task('test/karma-watch', (done) => {
let server = new KarmaServer({
configFile: join(__dirname, 'karma.conf.js'),
}, done);

server.start();
});

gulp.task('test/files-watch', () => {
gulp.watch('lib/**/*.ts', ['build/ts-to-es6']);
});


// gulp.task('build', ['build/rollup']);

gulp.task('dev', done => {
runSequence(
Expand All @@ -75,15 +144,18 @@ gulp.task('dev', done => {
)
});

gulp.task('build', done => {
runSequence(
'clean-dist',
'build/ts-to-es6',
'build/rollup-es6',
'build/es6-to-umd-es5',
'test',
done
)
gulp.task('default', ['build']);



gulp.task('test/karma-watch', (done) => {
let server = new KarmaServer({
configFile: join(__dirname, 'karma.conf.js'),
}, done);

server.start();
});

gulp.task('default', ['build']);
gulp.task('test/files-watch', () => {
gulp.watch('lib/**/*.ts', ['build/ts-to-es6']);
});
2 changes: 1 addition & 1 deletion lib/properties/outputs-builder.ts
Expand Up @@ -5,7 +5,7 @@
// ## Setup
// Import the EventEmitter class
import EventEmitter from '../events/event-emitter';
import INgForwardJQuery from "../util/jqlite-extensions";
import {INgForwardJQuery} from "../util/jqlite-extensions";
import CustomEvent from '../util/custom-event';

// ## Function
Expand Down
4 changes: 2 additions & 2 deletions lib/testing/test-component-builder.ts
Expand Up @@ -83,7 +83,7 @@ export class RootTestComponent {
* @param ComponentClass
* @returns {RootTestComponent}
*/
export const compileComponent = (ComponentClass:any) => {
export function compileComponent(ComponentClass:any){

let selector = bundleStore.get('selector', ComponentClass);
let rootTestScope, debugElement, componentInstance, $injector;
Expand Down Expand Up @@ -114,7 +114,7 @@ export const compileComponent = (ComponentClass:any) => {
* @param selector
* @returns {{parentScope: *, element: *, controller: *, isolateScope: *}}
*/
export const compileHtmlAndScope = ({html, initialScope, selector}) => {
export function compileHtmlAndScope({html, initialScope, selector}){

let parentScope, element, controller, isolateScope;

Expand Down
10 changes: 6 additions & 4 deletions lib/tests/utils.ts
@@ -1,18 +1,20 @@
import {ng} from './angular';
import '../util/jqlite-extensions';
import {TestComponentBuilder} from '../testing/test-component-builder';
import * as tcb from '../testing/test-component-builder';
import {Component} from '../decorators/component';

export const quickRootTestComponent = ({
export function quickRootTestComponent({
providers=[],
directives=[],
template='<div></div>'
}) => {
}){

ng.useReal();

@Component({ selector: 'test', template, directives, providers })
class Test {}

return new TestComponentBuilder().create(Test);
let builder = new tcb.TestComponentBuilder();

return builder.create(Test);
};
12 changes: 6 additions & 6 deletions lib/util/decorator-factory.ts
Expand Up @@ -2,7 +2,7 @@ import {providerStore} from '../writers';

const randomInt = () => Math.floor(Math.random() * 100);

interface UniqueNameDecorator{
export interface UniqueNameDecorator{
(maybeT: any): any;
clearNameCache(): void;
}
Expand Down Expand Up @@ -31,12 +31,12 @@ export default function(type: string, strategyType: string = 'provider'): Unique
providerStore.set('name', name, t);
names.add(name);
};

if (typeof maybeT === 'string') {
if(names.has(maybeT)) {
throw NAME_TAKEN_ERROR(maybeT);
}

return (t: any) : void => {
providerStore.set('type', type, t);
providerStore.set('name', maybeT, t);
Expand All @@ -46,12 +46,12 @@ export default function(type: string, strategyType: string = 'provider'): Unique
else if (maybeT === undefined) {
return (t: any) : void => writeWithUniqueName(t);
}

writeWithUniqueName(maybeT)
};

d.clearNameCache = () => names.clear();

return d;
})();
};
2 changes: 1 addition & 1 deletion lib/util/jqlite-extensions.ts
Expand Up @@ -20,7 +20,7 @@ export interface INgForwardJQuery extends IAugmentedJQuery {
find(element: any): INgForwardJQuery;
find(obj: JQuery): INgForwardJQuery;

nativeElement: HTMLElement;
nativeElement: IAugmentedJQuery.HTMLElement;
componentInstance: any;
componentViewChildren: INgForwardJQuery[];
getLocal(injectable:any): any;
Expand Down
8 changes: 7 additions & 1 deletion package.json
Expand Up @@ -42,9 +42,13 @@
"babel": "^5.8.29",
"babelify": "^6.4.0",
"chai": "^3.4.0",
"del": "^2.0.2",
"gulp": "^3.9.0",
"gulp-babel": "^5.3.0",
"gulp-concat": "^2.6.0",
"gulp-filter": "^3.0.1",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.5.4",
"gulp-sourcemaps": "^1.6.0",
"gulp-typescript": "^2.9.2",
"gulp-uglify": "^1.4.2",
Expand All @@ -57,9 +61,11 @@
"karma-phantomjs-shim": "^1.1.1",
"karma-sinon-chai": "ngUpgraders/karma-lolex-sinon-chai",
"karma-sourcemap-loader": "^0.3.6",
"merge2": "^0.3.6",
"mocha": "^2.3.3",
"rimraf": "^2.4.3",
"rollup": "^0.19.2",
"rollup": "^0.20.2",
"rollup-babel": "^0.6.1",
"run-sequence": "^1.1.4",
"sinon": "^1.17.2",
"sinon-chai": "^2.8.0",
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Expand Up @@ -4,7 +4,7 @@
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es6",
"declaration": false,
"declaration": true,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
Expand Down

0 comments on commit d232cb2

Please sign in to comment.