No description, website, or topics provided.
TypeScript JavaScript HTML
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.circleci ci: use angular/ngcontainer Jul 6, 2017
dist refactor: cleanup directory structure Jul 6, 2017
integration/webpack feat: use shorter loader name Jul 6, 2017
scripts refactor: cleanup directory structure Jul 6, 2017
src refactor: cleanup directory structure Jul 6, 2017
webpack-loader feat: use shorter loader name Jul 6, 2017
.editorconfig add editorconfig May 29, 2017
.gitignore ignore package-lock.json Jun 7, 2017
.npmignore
LICENSE wip: prep for release Mar 7, 2017
README.md
package.json
tsconfig.json test: use tslint no-unused-variable Jun 12, 2017
tslint.json test: use tslint no-unused-variable Jun 12, 2017
yarn.lock build: require ts2.4 only on dev Jul 6, 2017

README.md

CircleCI

Warning

This package is no longer being maitained. It's functionality has been moved to https://github.com/angular/devkit/tree/master/packages/angular_devkit/build_optimizer.

Angular Optimizer (NGO)

NGO contains Angular optimizations applicable to JavaScript code as a TypeScript transform pipeline.

Available optimizations

Transformations applied depend on file content:

Non-transform optimizations are applied via the Purify Plugin.

Some of these optimizations add /*@__PURE__*/ comments. These are used by UglifyJS to identify pure functions that can potentially be dropped.

Class fold

Static properties are folded into ES5 classes:

// input
var Clazz = (function () { function Clazz() { } return Clazz; }());
Clazz.prop = 1;

// output
var Clazz = (function () { function Clazz() { } Clazz.prop = 1; return Clazz; }());

Scrub file

Angular decorators, property decorators and constructor parameters are removed, while leaving non-Angular ones intact.

// input
import { Injectable, Input } from '@angular/core';
import { NotInjectable } from 'another-lib';
var Clazz = (function () { function Clazz() { } return Clazz; }());
Clazz.decorators = [{ type: Injectable }, { type: NotInjectable }];
Clazz.propDecorators = { 'ngIf': [{ type: Input }] };
Clazz.ctorParameters = function () { return [{type: Injector}]; };

// output
import { Injectable, Input } from '@angular/core';
import { NotInjectable } from 'another-lib';
var Clazz = (function () { function Clazz() { } return Clazz; }());
Clazz.decorators = [{ type: NotInjectable }];

Prefix functions

Adds /*@__PURE__*/ comments to top level downleveled class declarations and instantiation. Webpack library imports are also marked as /*@__PURE__*/ when used with Purify Plugin.

// input
var Clazz = (function () { function Clazz() { } return Clazz; }());
var newClazz = new Clazz();
var newClazzTwo = Clazz();

// output
var Clazz = /*@__PURE__*/ (function () { function Clazz() { } return Clazz; }());
var newClazz = /*@__PURE__*/ new Clazz();
var newClazzTwo = /*@__PURE__*/ Clazz();

Import tslib

TypeScript helpers (__extends/__decorate/__metadata/__param) are replaced with tslib imports whenever found.

// input
var __extends = (this && this.__extends) || function (d, b) {
  for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};

// output
import { __extends } from "tslib";

Purify Plugin

Performs regex based replacements on all files that add /*@__PURE__*/ comments to downleveled classes, TypeScript enums and webpack imports (used with Prefix functions)

Library Usage

import { ngo } from './ngo';

const transpiledContent = ngo({ content: input }).content;

Available options:

export interface NgoOptions {
  content?: string;
  inputFilePath?: string;
  outputFilePath?: string;
  emitSourceMap?: boolean;
  strict?: boolean;
}

Webpack loader and plugin usage:

const PurifyPlugin = require('ngo').PurifyPlugin;

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'ngo/webpack-loader'
        options: {
          sourceMap: false
        }
      }
    ]
  },
  plugins: [
    new PurifyPlugin()
  ]
}

CLI usage

ngo input.js
ngo input.js output.js
purify input.js
purify input.js output.js