@angular-devkit/build-optimizer
    TypeScript icon, indicating that this package has built-in type declarations

    0.1301.4 • Public • Published

    Angular Build Optimizer

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

    This package is deprecated and should not be used. It has always been experimental (never hit 1.0.0) and was an internal package for the Angular CLI. All the relevant functionality has been moved into @angular-devkit/build-angular.

    Available optimizations

    Transformations applied depend on file content:

    Some of these optimizations add /*@__PURE__*/ comments. These are used by JS optimization tools 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, Component } from '@angular/core';
    import { NotInjectable, NotComponent, NotInput } 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 }];
    };
    var ComponentClazz = (function () {
      function ComponentClazz() {}
      __decorate([Input(), __metadata('design:type', Object)], Clazz.prototype, 'selected', void 0);
      __decorate(
        [NotInput(), __metadata('design:type', Object)],
        Clazz.prototype,
        'notSelected',
        void 0,
      );
      ComponentClazz = __decorate(
        [
          NotComponent(),
          Component({
            selector: 'app-root',
            templateUrl: './app.component.html',
            styleUrls: ['./app.component.css'],
          }),
        ],
        ComponentClazz,
      );
      return ComponentClazz;
    })();
    
    // output
    import { Injectable, Input, Component } from '@angular/core';
    import { NotInjectable, NotComponent } from 'another-lib';
    var Clazz = (function () {
      function Clazz() {}
      return Clazz;
    })();
    Clazz.decorators = [{ type: NotInjectable }];
    var ComponentClazz = (function () {
      function ComponentClazz() {}
      __decorate(
        [NotInput(), __metadata('design:type', Object)],
        Clazz.prototype,
        'notSelected',
        void 0,
      );
      ComponentClazz = __decorate([NotComponent()], ComponentClazz);
      return ComponentClazz;
    })();

    Prefix functions

    Adds /*@__PURE__*/ comments to top level downleveled class declarations and instantiation.

    Warning: this transform assumes the file is a pure module. It should not be used with unpure modules.

    // 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();

    Prefix Classes

    Adds /*@__PURE__*/ to downleveled TypeScript classes.

    // input
    var ReplayEvent = (function () {
      function ReplayEvent(time, value) {
        this.time = time;
        this.value = value;
      }
      return ReplayEvent;
    })();
    
    // output
    var ReplayEvent = /*@__PURE__*/ (function () {
      function ReplayEvent(time, value) {
        this.time = time;
        this.value = value;
      }
      return ReplayEvent;
    })();

    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';

    Wrap enums

    Wrap downleveled TypeScript enums in a function, and adds /*@__PURE__*/ comment.

    // input
    var ChangeDetectionStrategy;
    (function (ChangeDetectionStrategy) {
      ChangeDetectionStrategy[(ChangeDetectionStrategy['OnPush'] = 0)] = 'OnPush';
      ChangeDetectionStrategy[(ChangeDetectionStrategy['Default'] = 1)] = 'Default';
    })(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
    
    // output
    var ChangeDetectionStrategy = /*@__PURE__*/ (function () {
      var ChangeDetectionStrategy = {};
      ChangeDetectionStrategy[(ChangeDetectionStrategy['OnPush'] = 0)] = 'OnPush';
      ChangeDetectionStrategy[(ChangeDetectionStrategy['Default'] = 1)] = 'Default';
      return ChangeDetectionStrategy;
    })();

    Library Usage

    import { buildOptimizer } from '@angular-devkit/build-optimizer';
    
    const transpiledContent = buildOptimizer({ content: input }).content;

    Available options:

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

    Webpack loader usage:

    import { BuildOptimizerWebpackPlugin } from '@angular-devkit/build-optimizer';
    
    module.exports = {
      plugins: [
        new BuildOptimizerWebpackPlugin(),
      ]
      module: {
        rules: [
          {
            test: /\.js$/,
            loader: '@angular-devkit/build-optimizer/webpack-loader',
            options: {
              sourceMap: false
            }
          }
        ]
      }
    }

    CLI usage

    build-optimizer input.js
    build-optimizer input.js output.js

    Install

    npm i @angular-devkit/build-optimizer

    DownloadsWeekly Downloads

    1,680,896

    Version

    0.1301.4

    License

    MIT

    Unpacked Size

    87.6 kB

    Total Files

    28

    Last publish

    Collaborators

    • angular
    • angular-devkit
    • google-wombot