chore(build): move to rollup for e2e, move to es6 imports and type definitions

move to rollup for e2e, move to es6 imports and type definitions
This commit is contained in:
Dan Bucholtz
2016-09-20 01:02:39 -05:00
parent bcec66c67b
commit 4c57873c09
26 changed files with 232 additions and 441 deletions

View File

@ -38,80 +38,83 @@
},
"devDependencies": {
"@angular/compiler-cli": "0.6.2",
"@types/glob": "^5.0.29",
"@types/gulp": "^3.8.29",
"@types/hammerjs": "^2.0.30",
"@types/jasmine": "^2.2.31",
"@types/merge2": "0.0.28",
"@types/mkdirp": "0.3.28",
"@types/connect": "3.4.30",
"@types/del": "2.2.31",
"@types/glob": "5.0.30",
"@types/gulp": "3.8.32",
"@types/gulp-watch": "4.1.29",
"@types/hammerjs": "2.0.33",
"@types/jasmine": "2.2.34",
"@types/lodash": "4.14.35",
"@types/merge2": "0.3.29",
"@types/mkdirp": "0.3.29",
"@types/node": "6.0.34",
"@types/protractor": "^1.5.17",
"@types/run-sequence": "0.0.27",
"@types/semver": "5.3.29",
"@types/protractor": "1.5.19",
"@types/run-sequence": "0.0.28",
"@types/semver": "5.3.30",
"@types/serve-static": "1.7.31",
"@types/through2": "2.0.29",
"canonical-path": "0.0.2",
"connect": "^3.3.4",
"connect": "3.5.0",
"core-js": "2.4.1",
"cpr": "^0.4.1",
"del": "^1.1.1",
"dgeni": "^0.4.1",
"dgeni-packages": "^0.10.18",
"event-stream": "^3.3.1",
"file-loader": "^0.9.0",
"glob": "^7.0.6",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^2.3.0",
"gulp-clean-css": "^2.0.12",
"gulp-concat": "^2.6.0",
"gulp-git": "^1.11.2",
"gulp-if": "^1.2.5",
"gulp-remember": "^0.3.0",
"gulp-rename": "~1.2.0",
"gulp-sass": "^2.0.4",
"gulp-scss-lint": "^0.3.9",
"gulp-shell": "^0.4.0",
"gulp-strip-debug": "^1.1.0",
"gulp-tslint": "^5.0.0",
"gulp-typescript": "^2.13.6",
"gulp-util": "^3.0.6",
"gulp-watch": "^4.2.4",
"html-entities": "^1.1.3",
"ionic-cz-conventional-changelog": "^1.0.0",
"jasmine-core": "^2.4.1",
"jasmine-node": "^1.14.5",
"karma": "^1.1.1",
"karma-browserstack-launcher": "^1.0.1",
"karma-chrome-launcher": "^1.0.1",
"karma-coverage": "^1.1.1",
"karma-firefox-launcher": "^1.0.0",
"karma-jasmine": "^1.0.2",
"karma-sauce-launcher": "^1.0.0",
"karma-sourcemap-loader": "^0.3.7",
"merge2": "^0.3.6",
"mkdirp": "^0.5.1",
"cpr": "2.0.0",
"del": "2.2.2",
"dgeni": "0.4.2",
"dgeni-packages": "0.16.0",
"event-stream": "3.3.4",
"file-loader": "0.9.0",
"glob": "7.0.6",
"gulp": "3.9.1",
"gulp-autoprefixer": "3.1.1",
"gulp-clean-css": "2.0.12",
"gulp-concat": "2.6.0",
"gulp-git": "1.11.3",
"gulp-if": "2.0.1",
"gulp-remember": "0.3.1",
"gulp-rename": "1.2.2",
"gulp-sass": "2.3.2",
"gulp-scss-lint": "0.4.0",
"gulp-shell": "0.5.2",
"gulp-strip-debug": "1.1.0",
"gulp-tslint": "6.1.1",
"gulp-typescript": "2.13.6",
"gulp-util": "3.0.7",
"gulp-watch": "4.3.9",
"html-entities": "1.2.0",
"ionic-cz-conventional-changelog": "1.0.0",
"jasmine-core": "2.5.2",
"jasmine-node": "1.14.5",
"karma": "1.3.0",
"karma-chrome-launcher": "2.0.0",
"karma-coverage": "1.1.1",
"karma-jasmine": "1.0.2",
"karma-sourcemap-loader": "0.3.7",
"merge2": "1.0.2",
"mkdirp": "0.5.1",
"node-html-encoder": "0.0.2",
"remap-istanbul": "^0.6.4",
"request": "2.53.0",
"resolve-bin": "^0.4.0",
"remap-istanbul": "0.6.4",
"request": "2.75.0",
"resolve-bin": "0.4.0",
"rollup": "0.36.0",
"rollup-plugin-commonjs": "5.0.4",
"rollup-plugin-multi-entry": "2.0.1",
"rollup-plugin-node-resolve": "2.0.0",
"rollup-plugin-uglify": "1.0.1",
"run-sequence": "^1.1.0",
"sassdoc": "^2.1.20",
"semver": "^5.0.1",
"serve-static": "^1.9.2",
"systemjs": "^0.19.37",
"through2": "^0.6.3",
"ts-node": "^0.7.3",
"tslint": "^3.15.1",
"run-sequence": "1.2.2",
"sassdoc": "2.1.20",
"semver": "5.3.0",
"serve-static": "1.11.1",
"systemjs": "0.19.38",
"through2": "2.0.1",
"ts-node": "1.3.0",
"tslint": "3.15.1",
"tslint-ionic-rules": "0.0.5",
"typescript": "rc",
"uglify": "0.1.5",
"vinyl": "^1.2.0",
"webpack": "^2.1.0-beta.20",
"webpack-dev-server": "^1.14.1",
"yargs": "^3.6.0",
"vinyl": "1.2.0",
"webpack": "2.1.0-beta.20",
"webpack-dev-server": "1.16.1",
"yargs": "5.0.0",
"zone.js": "0.6.21"
},
"config": {

View File

@ -1,11 +0,0 @@
import 'core-js/es6';
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import 'zone.js/dist/long-stack-trace-zone';
import { platformBrowser } from '@angular/platform-browser';
import { enableProdMode } from '@angular/core';
import { AppModuleNgFactory } from './AppModule.ngfactory';
enableProdMode();
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

View File

@ -1,21 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<!-- https://www.chromium.org/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" type="text/css" href="/dist/demos/scrollbar-fix.css">
<link ios-href="../output.ios.css" rel="stylesheet">
<link md-href="../output.md.css" rel="stylesheet">
<link wp-href="../output.wp.css" rel="stylesheet">
</head>
<body>
<ion-app>
</ion-app>
<script src="./index.js"></script>
</body>
</html>

View File

@ -1,22 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"lib": [
"dom",
"es2015"
],
"moduleResolution": "node",
"declaration": true,
"noImplicitAny": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"angularCompilerOptions": {
"skipMetadataEmit": true
},
"include": [
"dist/demos/**/entry.ts",
"dist/demos/**/AppModule.ts"
]
}

View File

@ -1,18 +0,0 @@
var entryData = require('./webpackEntryPoints.json');
var path = require('path');
module.exports = {
devtool: "source-map",
entry: entryData,
output: {
"path": path.join(__dirname, '../../'),
"filename": "[name].js"
},
resolve: {
extensions: ["", ".js", ".json"],
mainFields: ["main", "browser"]
}
};

View File

@ -1,42 +0,0 @@
{
"dist/demos/action-sheet/index": "./dist/demos/action-sheet/entry",
"dist/demos/alert/index": "./dist/demos/alert/entry",
"dist/demos/button/index": "./dist/demos/button/entry",
"dist/demos/checkbox/index": "./dist/demos/checkbox/entry",
"dist/demos/config/index": "./dist/demos/config/entry",
"dist/demos/datetime/index": "./dist/demos/datetime/entry",
"dist/demos/events/index": "./dist/demos/events/entry",
"dist/demos/hide-when/index": "./dist/demos/hide-when/entry",
"dist/demos/icon/index": "./dist/demos/icon/entry",
"dist/demos/infinite-scroll/index": "./dist/demos/infinite-scroll/entry",
"dist/demos/input/index": "./dist/demos/input/entry",
"dist/demos/item-reorder/index": "./dist/demos/item-reorder/entry",
"dist/demos/item-sliding/index": "./dist/demos/item-sliding/entry",
"dist/demos/item/index": "./dist/demos/item/entry",
"dist/demos/label/index": "./dist/demos/label/entry",
"dist/demos/list/index": "./dist/demos/list/entry",
"dist/demos/loading/index": "./dist/demos/loading/entry",
"dist/demos/local-storage/index": "./dist/demos/local-storage/entry",
"dist/demos/menu/index": "./dist/demos/menu/entry",
"dist/demos/modal/index": "./dist/demos/modal/entry",
"dist/demos/nav-params/index": "./dist/demos/nav-params/entry",
"dist/demos/navbar/index": "./dist/demos/navbar/entry",
"dist/demos/navigation/index": "./dist/demos/navigation/entry",
"dist/demos/platform/index": "./dist/demos/platform/entry",
"dist/demos/popover/index": "./dist/demos/popover/entry",
"dist/demos/radio/index": "./dist/demos/radio/entry",
"dist/demos/range/index": "./dist/demos/range/entry",
"dist/demos/refresher/index": "./dist/demos/refresher/entry",
"dist/demos/scroll/index": "./dist/demos/scroll/entry",
"dist/demos/searchbar/index": "./dist/demos/searchbar/entry",
"dist/demos/segment/index": "./dist/demos/segment/entry",
"dist/demos/select/index": "./dist/demos/select/entry",
"dist/demos/show-when/index": "./dist/demos/show-when/entry",
"dist/demos/slides/index": "./dist/demos/slides/entry",
"dist/demos/tabs/index": "./dist/demos/tabs/entry",
"dist/demos/textarea/index": "./dist/demos/textarea/entry",
"dist/demos/title/index": "./dist/demos/title/entry",
"dist/demos/toast/index": "./dist/demos/toast/entry",
"dist/demos/toggle/index": "./dist/demos/toggle/entry",
"dist/demos/toolbar/index": "./dist/demos/toolbar/entry"
}

View File

@ -43,9 +43,7 @@
document.body.classList.remove('rtl');
}
</script>
<script src="/webpack-dev-server.js"></script>
<script src="../../../../../../dist/ionic-angular/polyfills/polyfills.js"></script>
<script src="../../../../vendor.js"></script>
<script src="./index.js"></script>
<script src="../../../../polyfills/polyfills.ng.js"></script>
<script src="./app.bundle.js"></script>
</body>
</html>

View File

@ -1,18 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"lib": [
"dom",
"es2015"
],
"moduleResolution": "node",
"declaration": true,
"noImplicitAny": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"angularCompilerOptions": {
"skipMetadataEmit": true
}
}

View File

@ -1,5 +0,0 @@
import 'core-js/es6';
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import 'zone.js/dist/proxy';
import 'zone.js/dist/long-stack-trace-zone';

View File

@ -1,10 +0,0 @@
// Angular 2
import '@angular/platform-browser';
import '@angular/platform-browser-dynamic';
import '@angular/common';
import '@angular/core';
import '@angular/http';
// RxJS
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';

View File

@ -1,34 +0,0 @@
var entryData = require('./webpackEntryPoints.json');
var path = require('path')
entryData["dist/e2e/vendor"] = "./scripts/e2e/vendor";
entryData["dist/e2e/polyfills"] = "./scripts/e2e/polyfills";
module.exports = {
devtool: "source-map",
entry: entryData,
output: {
"path": path.join(__dirname, '../../'),
"filename": "[name].js"
},
resolve: {
extensions: ["", ".js", ".json"],
mainFields: ["module", "browser"]
},
module: {
loaders: [
{
test : /\.css$/,
loader : 'file-loader?config=cssLoader'
}
]
},
cssLoader: {
name: 'test/css/[name]-[hash].[ext]'
},
};

View File

@ -1,7 +1,11 @@
declare module 'dgeni';
declare module 'event-stream';
declare module 'gulp-if';
declare module 'gulp-scss-lint';
declare module 'gulp-tslint';
declare module 'html-entities';
declare module 'rollup';
declare module 'rollup-plugin-commonjs';
declare module 'rollup-plugin-node-resolve';
declare module 'vinyl';
declare module 'yargs';

View File

@ -1,5 +1,5 @@
import { COMMONJS_MODULE, DIST_BUILD_ROOT, DIST_BUILD_COMMONJS_ROOT, ES_MODULE } from '../constants';
import { task } from 'gulp';
import { COMMONJS_MODULE, DIST_BUILD_ROOT, DIST_BUILD_COMMONJS_ROOT, ES_MODULE } from '../constants';
import { copySourceToDest, copySwiperToPath, createTempTsConfig, deleteFiles, runNgc} from '../util';

View File

@ -1,12 +1,18 @@
import * as del from 'del';
import { task } from 'gulp';
task('clean', (done: () => void) => {
const del = require('del');
del(['dist/**'], done);
task('clean', (done: Function) => {
del(['dist/**']).then(() => {
done();
}).catch(err => {
done(err);
});
});
task('clean.src', (done: () => void) => {
const del = require('del');
del(['src/**/*.js', 'src/**/*.d.ts', '!src/components/slides/swiper-widget.*'], done);
task('clean.src', (done: Function) => {
del(['src/**/*.js', 'src/**/*.d.ts', '!src/components/slides/swiper-widget.*']).then(() => {
done();
}).catch(err => {
done(err);
});
});

View File

@ -1,12 +1,11 @@
const gulp = require('gulp');
import * as gulp from 'gulp';
gulp.task('default', help);
gulp.task('help', help);
function help() {
const taskList = Object.keys(gulp.tasks)
const taskList = Object.keys((gulp as any).tasks)
.filter(taskName => taskName !== 'default' && taskName !== 'help')
.sort()
.map(taskName => taskName = ' ' + taskName);

View File

@ -1,5 +1,6 @@
import { dirname, join } from 'path';
import { exec } from 'child_process';
import { dirname, join } from 'path';
import * as glob from 'glob';
import { task } from 'gulp';
import * as rollup from 'rollup';

View File

@ -1,15 +1,16 @@
import { createReadStream, writeFileSync } from 'fs';
import { join, relative } from 'path';
import { DEMOS_ROOT, DEMOS_SRC_ROOT } from '../constants';
import { src, dest, task } from 'gulp';
import * as Dgeni from 'dgeni';
import { split, map } from 'event-stream';
import { src, dest, task } from 'gulp';
import { AllHtmlEntities } from 'html-entities';
import * as mkdirp from 'mkdirp';
import { valid }from 'semver';
import { argv } from 'yargs';
import { DEMOS_ROOT, DEMOS_SRC_ROOT } from '../constants';
task('docs', () => {
const docVersion = argv['doc-version'] || 'nightly';
@ -28,7 +29,7 @@ task('docs', () => {
}
});
task('docs.copyDemos', [], () => {
task('docs.copyDemos', ['demos.build'], () => {
const config = require('../../config.json');
const outputDir = join(config.docsDest, 'dist', 'demos');
return src([`${DEMOS_ROOT}/css`, `${DEMOS_ROOT}/fonts`, `${DEMOS_ROOT}/polyfills`, `${DEMOS_SRC_ROOT}`])

View File

@ -1,28 +1,38 @@
import { COMMONJS_MODULE, DIST_E2E_COMPONENTS_ROOT, DIST_E2E_ROOT, DIST_NAME, E2E_NAME, LOCAL_SERVER_PORT, PROJECT_ROOT, SCRIPTS_ROOT, SRC_COMPONENTS_ROOT, SRC_ROOT } from '../constants';
import {dest, src, start, task} from 'gulp';
import * as path from 'path';
import { accessSync, F_OK, readFileSync, writeFileSync } from 'fs';
import { dirname, join } from 'path';
import { compileSass, copyFonts, createTempTsConfig, createTimestamp, deleteFiles, runNgc, runWebpack, setSassIonicVersion, writePolyfills } from '../util';
import * as glob from 'glob';
import {dest, src, start, task} from 'gulp';
import * as gulpif from 'gulp-if';
import * as watch from 'gulp-watch';
import { template } from 'lodash';
import * as rollup from 'rollup';
import * as nodeResolve from 'rollup-plugin-node-resolve';
import * as commonjs from 'rollup-plugin-commonjs';
import * as runSequence from 'run-sequence';
import { obj } from 'through2';
import * as VinylFile from 'vinyl';
import { argv } from 'yargs';
import { DIST_E2E_COMPONENTS_ROOT, DIST_E2E_ROOT, DIST_NAME, E2E_NAME, ES_MODULE, LOCAL_SERVER_PORT, PROJECT_ROOT, SCRIPTS_ROOT, SRC_COMPONENTS_ROOT, SRC_ROOT } from '../constants';
import { compileSass, copyFonts, createTempTsConfig, createTimestamp, deleteFiles, runNgc, setSassIonicVersion, writePolyfills } from '../util';
task('e2e', e2eBuild);
function e2eBuild(done: Function) {
const runSequence = require('run-sequence');
runSequence('e2e.polyfill', 'e2e.copySource', 'e2e.compileTests', 'e2e.copyExternalDependencies', 'e2e.sass', 'e2e.fonts', 'e2e.beforeWebpack', 'e2e.runWebpack', done);
function e2eBuild(done: (err: any) => void) {
runSequence('e2e.polyfill', 'e2e.copySource', 'e2e.compileTests', 'e2e.copyExternalDependencies', 'e2e.sass', 'e2e.fonts', 'e2e.bundle', done);
}
task('e2e.copyAndCompile', (done: Function) => {
const runSequence = require('run-sequence');
runSequence('e2e.copySource', 'e2e.compileTests', 'e2e.beforeWebpack', 'e2e.runWebpack', done);
task('e2e.polyfill', () => {
writePolyfills('dist/e2e/polyfills');
});
task('e2e.copyAndCompile', (done: (err: any) => void) => {
runSequence('e2e.copySource', 'e2e.compileTests', 'e2e.bundle', done);
});
task('e2e.copySource', (done: Function) => {
const gulpif = require('gulp-if');
const _ = require('lodash');
const VinylFile = require('vinyl');
const through2 = require('through2');
const buildConfig = require('../../build/config');
const stream = src([`${SRC_ROOT}/**/*`, `!${SRC_ROOT}/**/*.spec.ts`])
@ -36,16 +46,16 @@ task('e2e.copySource', (done: Function) => {
const indexTemplate = readFileSync('scripts/e2e/index.html');
const indexTs = readFileSync('scripts/e2e/entry.ts');
return through2.obj(function(file, enc, next) {
return obj(function(file, enc, next) {
this.push(new VinylFile({
base: file.base,
contents: new Buffer(indexTemplate),
path: path.join(path.dirname(file.path), 'index.html'),
path: join(dirname(file.path), 'index.html'),
}));
this.push(new VinylFile({
base: file.base,
contents: new Buffer(indexTs),
path: path.join(path.dirname(file.path), 'entry.ts'),
path: join(dirname(file.path), 'entry.ts'),
}));
next(null, file);
});
@ -58,11 +68,11 @@ task('e2e.copySource', (done: Function) => {
'windows'
];
let testTemplate = _.template(readFileSync('scripts/e2e/e2e.template.js'));
let testTemplate = template(readFileSync('scripts/e2e/e2e.template.js').toString());
return through2.obj(function(file, enc, next) {
return obj(function(file, enc, next) {
let self = this;
let relativePath = path.dirname(file.path.replace(/^.*?src(\/|\\)components(\/|\\)/, ''));
let relativePath = dirname(file.path.replace(/^.*?src(\/|\\)components(\/|\\)/, ''));
let contents = file.contents.toString();
platforms.forEach(function(platform) {
@ -96,7 +106,7 @@ function buildE2ETests(folderInfo: any, done: Function) {
`./components/${folderInfo.componentName}/test/${folderInfo.componentTest}/entry.ts`,
];
}
createTempTsConfig(includeGlob, COMMONJS_MODULE, `${DIST_E2E_ROOT}/tsconfig.json`);
createTempTsConfig(includeGlob, ES_MODULE, `${DIST_E2E_ROOT}/tsconfig.json`);
runNgc(`${DIST_E2E_ROOT}/tsconfig.json`, (err) => {
if (err) {
done(err);
@ -108,7 +118,6 @@ function buildE2ETests(folderInfo: any, done: Function) {
}
function getFolderInfo() {
const argv = require('yargs').argv;
let componentName: string = null;
let componentTest: string = null;
const folder: string = argv.folder || argv.f;
@ -137,49 +146,79 @@ task('e2e.fonts', () => {
return copyFonts(`${DIST_E2E_ROOT}/fonts`);
});
task('e2e.beforeWebpack', (done) => {
/**
* Find all AppModule.ts files because the act as the entry points
* for each e2e test.
*/
let glob = require('glob');
let includeGlob = `${DIST_E2E_ROOT}/components/*/test/*/app-module.js`;
task('e2e.bundle', (done) => {
let includeGlob = `${DIST_E2E_ROOT}/components/*/test/*/entry.js`;
let folderInfo = getFolderInfo();
if (folderInfo.componentName && folderInfo.componentTest) {
includeGlob = `${DIST_E2E_ROOT}/components/${folderInfo.componentName}/test/${folderInfo.componentTest}/app-module.js`;
includeGlob = `${DIST_E2E_ROOT}/components/${folderInfo.componentName}/test/${folderInfo.componentTest}/entry.js`;
}
glob(includeGlob, {}, function(er, files) {
var directories = files.map(function(file) {
return path.dirname(file);
return dirname(file);
});
var webpackEntryPoints = directories.reduce(function(endObj, dir) {
let relativePath = dir.replace(process.cwd() + '/', './');
endObj[relativePath + '/index'] = relativePath + '/entry';
return endObj;
}, {});
let indexFileContents = directories.map(function(dir) {
let testName = dir.replace(`${DIST_E2E_ROOT}/components/`, '');
let fileName = dir.replace(`${PROJECT_ROOT}`, '');
return `<p><a href="${fileName}/index.html">${testName}</a></p>`;
}, []);
writeFileSync('./scripts/e2e/webpackEntryPoints.json', JSON.stringify(webpackEntryPoints, null, 2));
writeFileSync(`${DIST_E2E_ROOT}/index.html`,
'<!DOCTYPE html><html lang="en"><head></head><body style="width: 500px; margin: 100px auto">\n' +
indexFileContents.join('\n') +
'</center></body></html>'
);
done();
createBundles(files).then(() => {
done();
}).catch(err => {
done(err);
});
});
});
task('e2e.runWebpack', (done: Function) => {
const webpackConfigPath = `${SCRIPTS_ROOT}/e2e/webpack.config.js`;
runWebpack(webpackConfigPath, done);
});
function createBundles(files: string[]) {
let start;
if (!files) {
return Promise.reject(new Error('list of files is null'));
} else if ( files.length === 0) {
return Promise.resolve();
} else {
const outputFileName = join(dirname(files[0]), 'app.bundle.js');
start = Date.now();
return bundle(files[0], outputFileName).then(() => {
const end = Date.now();
const seconds = (end - start) / 1000;
console.log(`Took ${seconds} seconds to process ${files[0]}`);
const remainingFiles = files.concat();
remainingFiles.shift();
return createBundles(remainingFiles);
}).catch(err => {
return Promise.reject(err);
});
}
}
function bundle(inputFile: string, outputFile: string): Promise<any> {
console.log(`Starting rollup on ${inputFile} ... writing to ${outputFile}`);
return rollup.rollup({
entry: inputFile,
plugins: [
commonjs(),
nodeResolve({
module: true,
jsnext: true,
main: true,
extensions: ['.js']
})
]
}).then(bundle => {
return bundle.write({
format: 'iife',
dest: outputFile,
});
});
}
task('e2e.watch', ['e2e.copyExternalDependencies', 'e2e.sass', 'e2e.fonts'], (done: Function) => {
const folderInfo = getFolderInfo();
@ -188,7 +227,7 @@ task('e2e.watch', ['e2e.copyExternalDependencies', 'e2e.sass', 'e2e.fonts'], (do
return;
}
const e2eTestPath = path.join(SRC_COMPONENTS_ROOT, folderInfo.componentName, 'test', folderInfo.componentTest, 'app-module.ts');
const e2eTestPath = join(SRC_COMPONENTS_ROOT, folderInfo.componentName, 'test', folderInfo.componentTest, 'app-module.ts');
try {
accessSync(e2eTestPath, F_OK);
@ -210,18 +249,12 @@ task('e2e.watch', ['e2e.copyExternalDependencies', 'e2e.sass', 'e2e.fonts'], (do
}
});
task('e2e.polyfill', () => {
writePolyfills('dist/e2e/polyfills');
});
function e2eWatch(componentName: string, componentTest: string) {
const watch = require('gulp-watch');
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const config = require('../../e2e/webpack.config.js');
config.output.path = path.join(__dirname, '../../../');
config.output.path = join(__dirname, '../../../');
config.entry = {
'dist/e2e/vendor': './scripts/e2e/vendor',
'dist-e2e/polyfills': './scripts/e2e/polyfills'

View File

@ -1,20 +1,19 @@
import { task, src } from 'gulp';
import * as scsslint from 'gulp-scss-lint';
import * as tslint from 'gulp-tslint';
task('lint', ['lint.sass', 'lint.ts']);
task('lint.ts', () => {
const tslint = require('gulp-tslint');
return src([
'src/**/*.ts'
]).pipe(tslint())
.pipe(tslint.report('verbose'));
]).pipe(tslint({
formatter: 'verbose'
}))
.pipe(tslint.report());
});
task('lint.sass', function() {
const scsslint = require('gulp-scss-lint');
return src([
'src/**/*.scss',
'!src/components/*/test/**/*',

View File

@ -1,26 +1,30 @@
import { spawn, exec } from 'child_process';
import { writeFileSync } from 'fs';
import { dest, src, task } from 'gulp';
import * as runSequence from 'run-sequence';
import { DIST_BUILD_ROOT, SRC_ROOT, PROJECT_ROOT } from '../constants';
import { compileSass, copyFonts, createTimestamp, setSassIonicVersion, writePolyfills } from '../util';
task('nightly', (done: Function) => {
const runSequence = require('run-sequence');
task('nightly', (done: (err: any) => void) => {
runSequence('release.nightlyPackage', 'release.publishNightly', done);
});
task('release.prepareNightly', (done: Function) => {
const runSequence = require('run-sequence');
runSequence(/*'release.pullLatest', 'validate', */'release.copyTools', 'release.copyNpmInfo', 'release.preparePackageJsonTemplate', 'release.nightlyPackageJson', done);
task('release.prepareNightly', (done: (err: any) => void) => {
runSequence(/*'release.pullLatest', 'validate',*/ 'release.copyTools', 'release.copyNpmInfo', 'release.preparePackageJsonTemplate', 'release.nightlyPackageJson', done);
});
task('release.nightlyPackage', (done: Function) => {
const runSequence = require('run-sequence');
runSequence('clean', /*'release.prepareNightly',*/ 'release.polyfill', 'compile.release', 'release.prepareNightly', 'release.compileSass', 'release.fonts', 'release.scss', done);
task('release.nightlyPackage', (done: (err: any) => void) => {
runSequence('clean', 'release.polyfill', 'compile.release', 'release.prepareNightly', 'release.compileSass', 'release.fonts', 'release.scss', done);
});
task('release.polyfill', () => {
writePolyfills('dist/ionic-angular/polyfills');
});
task('release.publishNightly', (done: Function) => {
const spawn = require('child_process').spawn;
const npmCmd = spawn('npm', ['publish', '--tag=nightly', DIST_BUILD_ROOT]);
npmCmd.stdout.on('data', function (data) {
console.log(data.toString());
@ -48,29 +52,26 @@ task('release.scss', () => {
});
task('release.pullLatest', (done: Function) => {
const gulpGit = require('gulp-git');
gulpGit.pull('origin', ['master'], err => {
done(err);
exec('git pull origin master', (err: Error, stdout: string, stderr: string) => {
console.log(stdout);
console.log(stderr);
if (err) {
done(err);
} else if (stderr && stderr.length > 0) {
done(new Error('There are outstanding changes. Commit changes in order to perform a release.'));
} else {
done();
}
});
});
task('release.prepareChangelog', () => {
const changelog = require('gulp-conventional-changelog');
return gulp.src(`${PROJECT_ROOT}/CHANGELOG.md`)
.pipe(changelog({
preset: 'angular'
}))
.pipe(gulp.dest(`${PROJECT_ROOT}`));
});
task('release.prepareRootPackageJson', () => {
const semver = require('semver');
const fs = require('fs');
let packageJSON = require('./package.json');
packageJSON.version = semver.inc(packageJSON.version, 'prerelease', 'beta');
fs.writeFileSync('package.json', JSON.stringify(packageJSON, null, 2));
return src(`${PROJECT_ROOT}/CHANGELOG.md`)
.pipe(changelog({
preset: 'angular'
}))
.pipe(dest(`${PROJECT_ROOT}`));
});
task('release.copyTools', () => {
@ -82,7 +83,6 @@ task('release.copyNpmInfo', () => {
});
task('release.preparePackageJsonTemplate', () => {
const fs = require('fs');
let templatePackageJSON = require(`${PROJECT_ROOT}/scripts/npm/package.json`);
const sourcePackageJSON = require(`${PROJECT_ROOT}/package.json`);
// copy source package.json data to template
@ -100,11 +100,10 @@ task('release.preparePackageJsonTemplate', () => {
}
}
fs.writeFileSync(`${DIST_BUILD_ROOT}` + '/package.json', JSON.stringify(templatePackageJSON, null, 2));
writeFileSync(`${DIST_BUILD_ROOT}` + '/package.json', JSON.stringify(templatePackageJSON, null, 2));
});
task('release.nightlyPackageJson', () => {
const fs = require('fs');
const packageJson: any = require(`${DIST_BUILD_ROOT}/package.json`);
packageJson.version = packageJson.version.split('-')
@ -112,10 +111,6 @@ task('release.nightlyPackageJson', () => {
.concat(createTimestamp())
.join('-');
fs.writeFileSync(`${DIST_BUILD_ROOT}/package.json`, JSON.stringify(packageJson, null, 2));
writeFileSync(`${DIST_BUILD_ROOT}/package.json`, JSON.stringify(packageJson, null, 2));
setSassIonicVersion(packageJson.version);
});
task('release.polyfill', () => {
writePolyfills('dist/ionic-angular/polyfills');
});

View File

@ -1,7 +1,14 @@
import { spawn } from 'child_process';
import { createServer } from 'http';
import { join, resolve } from 'path';
import * as connect from 'connect';
import { task } from 'gulp';
import * as serveStatic from 'serve-static';
import { argv } from 'yargs';
import { DIST_E2E_COMPONENTS_ROOT, PROJECT_ROOT, SCRIPTS_ROOT } from '../constants';
import { mergeObjects } from '../util';
import * as path from 'path';
task('snapshot', ['e2e'], (done: Function) => {
@ -18,8 +25,7 @@ task('snapshot.quick', ['e2e.sass'], (done: Function) => {
function snapshot(quickMode: boolean, callback: Function) {
const snapshotConfig = require('../../snapshot/snapshot.config').config;
const protractorConfigFile = path.resolve(SCRIPTS_ROOT, 'snapshot/protractor.config.js');
const argv = require('yargs').argv;
const protractorConfigFile = resolve(SCRIPTS_ROOT, 'snapshot/protractor.config.js');
const snapshotDefaults = snapshotConfig.platformDefaults || {};
const snapshotValues: any = mergeObjects(snapshotDefaults, argv || {});
@ -39,7 +45,7 @@ function snapshot(quickMode: boolean, callback: Function) {
e2eSpecs = folderArgPaths[1];
}
}
const specs = path.join(DIST_E2E_COMPONENTS_ROOT, component, 'test', e2eSpecs, '*e2e.js');
const specs = join(DIST_E2E_COMPONENTS_ROOT, component, 'test', e2eSpecs, '*e2e.js');
console.log(`[snapshot] Specs: ${specs}`);
const testId = generateTestId();
@ -65,17 +71,13 @@ function snapshot(quickMode: boolean, callback: Function) {
}
function protractor(callback, args, testId: string) {
const connect = require('connect');
const http = require('http');
const serveStatic = require('serve-static');
const buildConfig = require('../../build/config');
const app = connect().use(serveStatic(PROJECT_ROOT));
const protractorHttpServer = http.createServer(app).listen(buildConfig.protractorPort);
const protractorHttpServer = createServer(app).listen(buildConfig.protractorPort);
console.log(`Serving ${process.cwd()} on http://localhost:${buildConfig.protractorPort}`);
const cp = require('child_process');
const child = cp.spawn('protractor', args, {
const child = spawn('protractor', args, {
stdio: [process.stdin, process.stdout, 'pipe']
});

View File

@ -1,7 +1,6 @@
import { DIST_VENDOR_ROOT, NPM_VENDOR_FILES, PROJECT_ROOT, SCRIPTS_ROOT } from '../constants';
import path = require('path');
import { join } from 'path';
import { dest, src, task } from 'gulp';
import { DIST_VENDOR_ROOT, NPM_VENDOR_FILES, PROJECT_ROOT, SCRIPTS_ROOT } from '../constants';
task('test', ['test.assembleVendorJs', 'compile.karma'], (done: Function) => {
karmaTest(false, done);
@ -22,7 +21,7 @@ function karmaTest(watch: boolean, done: Function) {
const argv = require('yargs').argv;
let karmaConfig = {
configFile: path.join(SCRIPTS_ROOT, 'karma/karma.conf.js'),
configFile: join(SCRIPTS_ROOT, 'karma/karma.conf.js'),
};
if (watch) {
@ -41,9 +40,9 @@ function karmaTest(watch: boolean, done: Function) {
task('test.assembleVendorJs', () => {
const files = NPM_VENDOR_FILES.map((root) => {
const glob = path.join(root, '**/*.+(js|js.map)');
return src(path.join('node_modules', glob))
.pipe(dest(path.join(DIST_VENDOR_ROOT, root)));
const glob = join(root, '**/*.+(js|js.map)');
return src(join('node_modules', glob))
.pipe(dest(join(DIST_VENDOR_ROOT, root)));
});
const gulpMerge = require('merge2');
return gulpMerge(files);

View File

@ -3,8 +3,6 @@ import { SRC_ROOT, SRC_COMPONENTS_ROOT } from '../constants';
import * as path from 'path';
import * as fs from 'fs';
task('theme', (done: () => void) => {
let opts: GenerateThemeOptions = {
src: path.join(SRC_COMPONENTS_ROOT),

View File

@ -11,8 +11,6 @@ export function config(config) {
plugins: [
require('karma-jasmine'),
require('karma-coverage'),
require('karma-browserstack-launcher'),
require('karma-sauce-launcher'),
require('karma-sourcemap-loader'),
require('karma-chrome-launcher'),
require('karma-firefox-launcher'),

View File

@ -1,35 +0,0 @@
var webpack = require('webpack');
module.exports = {
entry: [
"./dist/index.js"
],
output: {
path: 'dist/bundles',
filename: 'ionic.min.js',
libraryTarget: 'commonjs2'
},
externals: [
{
'angular2/core': {
commonjs2: ['angular2', 'core']
},
'angular2/common': {
commonjs2: ['angular2', 'common']
},
'angular2/http': {
commonjs2: ['angular2', 'http']
},
'angular2/platform/browser': {
commonjs2: ['angular2', 'platform', 'browser']
},
'angular2/instrumentation': {
commonjs2: ['angular2', 'instrumentation']
},
}
],
plugins:[ new webpack.optimize.UglifyJsPlugin({
compress: { warnings: false },
sourceMap: false
})]
};

View File

@ -1,29 +0,0 @@
module.exports = {
entry: [
"./dist/index.js"
],
output: {
path: 'dist/bundles',
filename: 'ionic.js',
libraryTarget: 'commonjs2'
},
externals: [
{
'@angular/core': {
commonjs2: ['angular2', 'core']
},
'@angular/common': {
commonjs2: ['angular2', 'common']
},
'@angular/forms' : {
commonjs2: ['angular2', 'forms']
},
'@angular/http': {
commonjs2: ['angular2', 'http']
},
'@angular/platform-browser': {
commonjs2: ['angular2', 'platform', 'browser']
},
}
]
};