nycJSorg/angular-presentation

View on GitHub
libs/code-demos/assets/runner/ng2/ng2-runner.js

Summary

Maintainability
A
0 mins
Test Coverage
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);
  });