libs/code-demos/assets/runner/ng2/ng2-runner.js
var { join } = require('path');
var Builder = require('systemjs-builder');
const UglifyJS = require('uglify-js');
const rel = 'libs/code-demos/assets/runner/ng2/';
const { readFileSync, writeFileSync } = require('fs');
const config = {
transpiler: 'ts',
warnings: true,
typescriptOptions: {
target: 'es5',
module: 'system',
moduleResolution: 'node',
sourceMap: true,
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['es2015', 'dom', 'tslib'],
noImplicitAny: true,
suppressImplicitAnyIndexErrors: true
},
meta: {
typescript: {
exports: 'ts'
}
},
paths: {
'npm:': 'node_modules/',
'rxjs/': 'node_modules/rxjs/'
},
// map tells the System loader where to look for things
map: {
// our app is within the app folder
app: 'src',
tslib: 'npm:tslib/tslib.js',
// angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/compiler/testing':
'npm:@angular/compiler/bundles/compiler-testing.umd.js',
'@angular/platform-browser':
'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/material/autocomplete':
'npm:@angular/material/bundles/material-autocomplete.umd.js',
'@angular/material/badge':
'npm:@angular/material/bundles/material-badge.umd.js',
'@angular/material/bottom-sheet':
'npm:@angular/material/bundles/material-bottom-sheet.umd.js',
'@angular/material/button':
'npm:@angular/material/bundles/material-button.umd.js',
'@angular/material/button-toggle':
'npm:@angular/material/bundles/material-button-toggle.umd.js',
'@angular/material/card':
'npm:@angular/material/bundles/material-card.umd.js',
'@angular/material/checkbox':
'npm:@angular/material/bundles/material-checkbox.umd.js',
'@angular/material/chips':
'npm:@angular/material/bundles/material-chips.umd.js',
'@angular/material/core':
'npm:@angular/material/bundles/material-core.umd.js',
'@angular/material/datepicker':
'npm:@angular/material/bundles/material-datepicker.umd.js',
'@angular/material/dialog':
'npm:@angular/material/bundles/material-dialog.umd.js',
'@angular/material/divider':
'npm:@angular/material/bundles/material-divider.umd.js',
'@angular/material/expansion':
'npm:@angular/material/bundles/material-expansion.umd.js',
'@angular/material/form-field':
'npm:@angular/material/bundles/material-form-field.umd.js',
'@angular/material/grid-list':
'npm:@angular/material/bundles/material-grid-list.umd.js',
'@angular/material/icon':
'npm:@angular/material/bundles/material-icon.umd.js',
'@angular/material/input':
'npm:@angular/material/bundles/material-input.umd.js',
'@angular/material/list':
'npm:@angular/material/bundles/material-list.umd.js',
'@angular/material/menu':
'npm:@angular/material/bundles/material-menu.umd.js',
'@angular/material/paginator':
'npm:@angular/material/bundles/material-paginator.umd.js',
'@angular/material/progress-bar':
'npm:@angular/material/bundles/material-progress-bar.umd.js',
'@angular/material/progress-spinner':
'npm:@angular/material/bundles/material-progress-spinner.umd.js',
'@angular/material/radio':
'npm:@angular/material/bundles/material-radio.umd.js',
'@angular/material/select':
'npm:@angular/material/bundles/material-select.umd.js',
'@angular/material/sidenav':
'npm:@angular/material/bundles/material-sidenav.umd.js',
'@angular/material/slide-toggle':
'npm:@angular/material/bundles/material-slide-toggle.umd.js',
'@angular/material/slider':
'npm:@angular/material/bundles/material-slider.umd.js',
'@angular/material/snack-bar':
'npm:@angular/material/bundles/material-snack-bar.umd.js',
'@angular/material/sort':
'npm:@angular/material/bundles/material-sort.umd.js',
'@angular/material/stepper':
'npm:@angular/material/bundles/material-stepper.umd.js',
'@angular/material/table':
'npm:@angular/material/bundles/material-table.umd.js',
'@angular/material/tabs':
'npm:@angular/material/bundles/material-tabs.umd.js',
'@angular/material/toolbar':
'npm:@angular/material/bundles/material-toolbar.umd.js',
'@angular/material/tooltip':
'npm:@angular/material/bundles/material-tooltip.umd.js',
'@angular/material/tree':
'npm:@angular/material/bundles/material-tree.umd.js',
'@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',
'@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js',
'@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js',
'@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js',
'@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',
'@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js',
'@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js',
'@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js',
'@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js',
'@angular/cdk/tree': 'npm:@angular/cdk/bundles/cdk-tree.umd.js',
'@angular/cdk/stepper': 'npm:@angular/cdk/bundles/cdk-stepper.umd.js',
'@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js',
'@angular/cdk/text-field': 'npm:@angular/cdk/bundles/cdk-text-field.umd.js',
'@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js',
'@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js',
'@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',
'@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js',
'@angular/cdk/collections':
'npm:@angular/cdk/bundles/cdk-collections.umd.js',
'@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
'@angular/animations/browser':
'npm:@angular/animations/bundles/animations-browser.umd.js',
'@angular/platform-browser/animations':
'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
'@angular/platform-browser/testing':
'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
'@angular/platform-browser-dynamic':
'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/platform-browser-dynamic/testing':
'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
// other libraries
'rxjs/operators': 'npm:rxjs/operators',
rxjs: 'npm:rxjs',
typescript: 'npm:typescript/lib/typescript.js',
ts: 'npm:plugin-typescript/lib',
'angular2-in-memory-web-api': 'npm:angular2-in-memory-web-api',
googlemaps: 'npm:googlemaps/lib/index.js'
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
app: {
main: './main',
defaultExtension: 'ts'
},
ts: {
main: 'plugin.js'
},
'rxjs/operators': {
main: 'index'
},
rxjs: {
main: 'index'
},
'angular2-in-memory-web-api': {
main: 'index',
defaultExtension: 'js'
}
}
};
const inputFileName = join(rel, 'basic.ts');
const outputFileName = join(rel, 'ng-bundle.js');
const builder = new Builder('./', config);
builder
.bundle(inputFileName, outputFileName)
.then(function() {
const content = readFileSync(outputFileName, { encoding: 'utf-8' });
const minified = UglifyJS.minify(content);
if (minified.error) {
return Promise.reject(minified.error);
} else {
writeFileSync(outputFileName, minified.code);
console.log('Build complete');
console.log('Original File size (kb):', content.length / 1000);
console.log('Minified File size (kb): ', minified.code.length / 1000);
}
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});