diff --git a/package.json b/package.json index 595f62a60d..0687e43a78 100644 --- a/package.json +++ b/package.json @@ -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": { diff --git a/scripts/demos/entry.ts b/scripts/demos/entry.ts deleted file mode 100644 index 498752e03a..0000000000 --- a/scripts/demos/entry.ts +++ /dev/null @@ -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); \ No newline at end of file diff --git a/scripts/demos/index.html b/scripts/demos/index.html deleted file mode 100644 index d3aa0fa0c6..0000000000 --- a/scripts/demos/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/demos/ngcConfig.json b/scripts/demos/ngcConfig.json deleted file mode 100644 index d1da36cf58..0000000000 --- a/scripts/demos/ngcConfig.json +++ /dev/null @@ -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" - ] -} \ No newline at end of file diff --git a/scripts/demos/webpack.config.js b/scripts/demos/webpack.config.js deleted file mode 100644 index 367f9bf664..0000000000 --- a/scripts/demos/webpack.config.js +++ /dev/null @@ -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"] - } -}; diff --git a/scripts/demos/webpackEntryPoints.json b/scripts/demos/webpackEntryPoints.json deleted file mode 100644 index b6b8125a4f..0000000000 --- a/scripts/demos/webpackEntryPoints.json +++ /dev/null @@ -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" -} \ No newline at end of file diff --git a/scripts/e2e/index.html b/scripts/e2e/index.html index d12089e413..1c5a9893f6 100644 --- a/scripts/e2e/index.html +++ b/scripts/e2e/index.html @@ -43,9 +43,7 @@ document.body.classList.remove('rtl'); } - - - - + + diff --git a/scripts/e2e/ngcConfig.json b/scripts/e2e/ngcConfig.json deleted file mode 100644 index 7d7153d815..0000000000 --- a/scripts/e2e/ngcConfig.json +++ /dev/null @@ -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 - } -} \ No newline at end of file diff --git a/scripts/e2e/polyfills.js b/scripts/e2e/polyfills.js deleted file mode 100644 index 4109cee608..0000000000 --- a/scripts/e2e/polyfills.js +++ /dev/null @@ -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'; diff --git a/scripts/e2e/vendor.js b/scripts/e2e/vendor.js deleted file mode 100644 index f5e56e98d7..0000000000 --- a/scripts/e2e/vendor.js +++ /dev/null @@ -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'; diff --git a/scripts/e2e/webpack.config.js b/scripts/e2e/webpack.config.js deleted file mode 100644 index b35348b5eb..0000000000 --- a/scripts/e2e/webpack.config.js +++ /dev/null @@ -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]' - }, -}; diff --git a/scripts/gulp/declarations.d.ts b/scripts/gulp/declarations.d.ts index 54588cef7b..9c8ab144dc 100644 --- a/scripts/gulp/declarations.d.ts +++ b/scripts/gulp/declarations.d.ts @@ -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'; \ No newline at end of file diff --git a/scripts/gulp/tasks/build.ts b/scripts/gulp/tasks/build.ts index 2b3350a1b1..f48bfd7b18 100644 --- a/scripts/gulp/tasks/build.ts +++ b/scripts/gulp/tasks/build.ts @@ -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'; diff --git a/scripts/gulp/tasks/clean.ts b/scripts/gulp/tasks/clean.ts index 44bea66c0c..c25304593f 100644 --- a/scripts/gulp/tasks/clean.ts +++ b/scripts/gulp/tasks/clean.ts @@ -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); + }); }); diff --git a/scripts/gulp/tasks/default.ts b/scripts/gulp/tasks/default.ts index 9a549dd381..ba9c5d7704 100644 --- a/scripts/gulp/tasks/default.ts +++ b/scripts/gulp/tasks/default.ts @@ -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); diff --git a/scripts/gulp/tasks/demos.ts b/scripts/gulp/tasks/demos.ts index d58640eb9d..208b21399d 100644 --- a/scripts/gulp/tasks/demos.ts +++ b/scripts/gulp/tasks/demos.ts @@ -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'; diff --git a/scripts/gulp/tasks/docs.ts b/scripts/gulp/tasks/docs.ts index dac03bafc1..1654ec7e30 100644 --- a/scripts/gulp/tasks/docs.ts +++ b/scripts/gulp/tasks/docs.ts @@ -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}`]) diff --git a/scripts/gulp/tasks/e2e.ts b/scripts/gulp/tasks/e2e.ts index 86726a8f73..5eaefb1d21 100644 --- a/scripts/gulp/tasks/e2e.ts +++ b/scripts/gulp/tasks/e2e.ts @@ -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 `

${testName}

`; }, []); - writeFileSync('./scripts/e2e/webpackEntryPoints.json', JSON.stringify(webpackEntryPoints, null, 2)); writeFileSync(`${DIST_E2E_ROOT}/index.html`, '\n' + indexFileContents.join('\n') + '' ); - 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 { + 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' diff --git a/scripts/gulp/tasks/lint.ts b/scripts/gulp/tasks/lint.ts index f7820bc8d9..c4e87ad802 100644 --- a/scripts/gulp/tasks/lint.ts +++ b/scripts/gulp/tasks/lint.ts @@ -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/**/*', diff --git a/scripts/gulp/tasks/release.ts b/scripts/gulp/tasks/release.ts index 55cfef6c3e..1a949c4d67 100644 --- a/scripts/gulp/tasks/release.ts +++ b/scripts/gulp/tasks/release.ts @@ -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'); -}); diff --git a/scripts/gulp/tasks/snapshot.ts b/scripts/gulp/tasks/snapshot.ts index f0b7b78d1a..bb14e3ea82 100644 --- a/scripts/gulp/tasks/snapshot.ts +++ b/scripts/gulp/tasks/snapshot.ts @@ -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'] }); diff --git a/scripts/gulp/tasks/test.ts b/scripts/gulp/tasks/test.ts index dd22f38ee3..2f5f0bdeed 100644 --- a/scripts/gulp/tasks/test.ts +++ b/scripts/gulp/tasks/test.ts @@ -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); diff --git a/scripts/gulp/tasks/theme.ts b/scripts/gulp/tasks/theme.ts index 27b0ea25fb..90fc8587a2 100644 --- a/scripts/gulp/tasks/theme.ts +++ b/scripts/gulp/tasks/theme.ts @@ -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), diff --git a/scripts/karma/karma.config.ts b/scripts/karma/karma.config.ts index 0c02b8d6f8..7e4764c6e5 100644 --- a/scripts/karma/karma.config.ts +++ b/scripts/karma/karma.config.ts @@ -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'), diff --git a/scripts/npm/ionic.min.webpack.config.js b/scripts/npm/ionic.min.webpack.config.js deleted file mode 100644 index 2c85011869..0000000000 --- a/scripts/npm/ionic.min.webpack.config.js +++ /dev/null @@ -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 - })] -}; diff --git a/scripts/npm/ionic.webpack.config.js b/scripts/npm/ionic.webpack.config.js deleted file mode 100644 index 7862b17038..0000000000 --- a/scripts/npm/ionic.webpack.config.js +++ /dev/null @@ -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'] - }, - } - ] -};