2016-08-19 10:59:45 -07:00
|
|
|
import {task, watch} from 'gulp';
|
2017-05-04 23:47:37 +02:00
|
|
|
import {DIST_ROOT, SOURCE_ROOT, PROJECT_ROOT, DIST_BUNDLES, DIST_MATERIAL} from '../constants';
|
2016-08-19 10:59:45 -07:00
|
|
|
import {
|
2017-03-24 14:06:45 -07:00
|
|
|
sassBuildTask, tsBuildTask, copyTask, buildAppTask, sequenceTask, triggerLivereload,
|
|
|
|
|
serverTask
|
2017-03-14 19:31:15 +01:00
|
|
|
} from '../util/task_helpers';
|
2017-03-24 14:06:45 -07:00
|
|
|
import {join} from 'path';
|
2017-05-04 23:47:37 +02:00
|
|
|
import {copyFiles} from '../util/copy-files';
|
|
|
|
|
|
|
|
|
|
// These imports don't have any typings provided.
|
|
|
|
|
const firebaseTools = require('firebase-tools');
|
2016-08-19 10:59:45 -07:00
|
|
|
|
2017-03-24 14:06:45 -07:00
|
|
|
const appDir = join(SOURCE_ROOT, 'demo-app');
|
|
|
|
|
const outDir = join(DIST_ROOT, 'packages', 'demo-app');
|
2016-08-19 10:59:45 -07:00
|
|
|
|
2017-05-04 23:47:37 +02:00
|
|
|
/** Array of vendors that are required to serve the demo-app. */
|
|
|
|
|
const appVendors = [
|
|
|
|
|
'@angular', 'systemjs', 'zone.js', 'rxjs', 'hammerjs', 'core-js', 'web-animations-js'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
/** Glob that matches all required vendors for the demo-app. */
|
|
|
|
|
const vendorGlob = `+(${appVendors.join('|')})/**/*.+(html|css|js|map)`;
|
|
|
|
|
|
2016-08-19 10:59:45 -07:00
|
|
|
task(':watch:devapp', () => {
|
2017-03-24 14:06:45 -07:00
|
|
|
watch(join(appDir, '**/*.ts'), [':build:devapp:ts', triggerLivereload]);
|
|
|
|
|
watch(join(appDir, '**/*.scss'), [':build:devapp:scss', triggerLivereload]);
|
|
|
|
|
watch(join(appDir, '**/*.html'), [':build:devapp:assets', triggerLivereload]);
|
2016-08-19 10:59:45 -07:00
|
|
|
});
|
|
|
|
|
|
2017-03-17 21:25:01 +01:00
|
|
|
/** Path to the demo-app tsconfig file. */
|
2017-03-29 20:13:33 +02:00
|
|
|
const tsconfigPath = join(appDir, 'tsconfig-build.json');
|
2016-08-19 10:59:45 -07:00
|
|
|
|
2017-03-17 21:25:01 +01:00
|
|
|
task(':build:devapp:ts', tsBuildTask(tsconfigPath));
|
2017-02-23 13:32:46 -08:00
|
|
|
task(':build:devapp:scss', sassBuildTask(outDir, appDir));
|
2016-08-19 10:59:45 -07:00
|
|
|
task(':build:devapp:assets', copyTask(appDir, outDir));
|
|
|
|
|
task('build:devapp', buildAppTask('devapp'));
|
|
|
|
|
|
2017-03-24 14:06:45 -07:00
|
|
|
task(':serve:devapp', serverTask(outDir, true));
|
2016-11-09 02:26:29 +01:00
|
|
|
|
2016-08-19 10:59:45 -07:00
|
|
|
task('serve:devapp', ['build:devapp'], sequenceTask(
|
2017-04-25 18:50:47 +02:00
|
|
|
[':serve:devapp', 'material:watch', ':watch:devapp']
|
2016-08-19 10:59:45 -07:00
|
|
|
));
|
2017-05-04 23:47:37 +02:00
|
|
|
|
|
|
|
|
/** Task that copies all vendors into the demo-app package. Allows hosting the app on firebase. */
|
|
|
|
|
task('stage-deploy:devapp', ['build:devapp'], () => {
|
|
|
|
|
copyFiles(join(PROJECT_ROOT, 'node_modules'), vendorGlob, join(outDir, 'node_modules'));
|
|
|
|
|
copyFiles(DIST_BUNDLES, '*.+(js|map)', join(outDir, 'dist/bundles'));
|
|
|
|
|
copyFiles(DIST_MATERIAL, '**/prebuilt/*.+(css|map)', join(outDir, 'dist/packages/material'));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task that deploys the demo-app to Firebase. Firebase project will be the one that is
|
|
|
|
|
* set for project directory using the Firebase CLI.
|
|
|
|
|
*/
|
|
|
|
|
task('deploy:devapp', ['stage-deploy:devapp'], () => {
|
|
|
|
|
return firebaseTools.deploy({cwd: PROJECT_ROOT, only: 'hosting'})
|
|
|
|
|
// Firebase tools opens a persistent websocket connection and the process will never exit.
|
|
|
|
|
.then(() => { console.log('Successfully deployed the demo-app to firebase'); process.exit(0); })
|
|
|
|
|
.catch((err: any) => { console.log(err); process.exit(1); });
|
|
|
|
|
});
|