ng-closure-builder
AST builder to manipulate AngularJS files based in Google closure.
It is designed to manipulate angular modules and ES6 classes written with Google's closure compiler.
Installation
npm install ng-closure-builder
Usage
This library exposes a Transformer class that receives the contents of a JavaScript file. You can chain multiple calls and when you are done call toString() to get the transformed file.
ES6 classes
const Transformer = require('../lib/transformer');
const fileContents = fs.readFileSync('path', 'utf-8');
const transformed = new Transformer(fileContents)
.injectConstructor('someService', 'foo.bar.SomeService', 'SomeService')
.toString();
console.log(transformed);
Functions
addGoogRequire(identifier, namespace)
Adds a goog.require at the top of the file.
const <identifier> goog.require('<namespace>');
injectConstructor(injectableName, namespace, injectableType)
Adds an injectable to a constructor and a goog.require at the top
const transformed = new Transformer(fileContents)
.injectConstructor('someService', 'foo.bar.SomeService', 'SomeService')
.toString();
Before:
goog.module('foo.bar.SomeComponent');
class SomeComponent {
/**
* @ngInject
*/
constructor() {
}
}
After:
goog.module('foo.bar.SomeComponent');
const SomeService = goog.require('foo.bar.SomeService');
class SomeComponent {
/**
* @param {!SomeService} someService
* @ngInject
*/
constructor(someService) {
/** @private {!SomeService} */
this.someService_ = someService;
}
}
Angular modules
addModule(moduleName)
Adds an angular module as a dependency to the current module. Use it with addGoogRequire() to import the module dependency.
const transformed = new Transformer(fileContents)
.addGoogRequire('AndresModule', 'foo.bar.AndresModule')
.addModule('AndresModule')
.toString();
Before:
goog.module('foo.bar.FooBarModule');
const FooBarModule = angular.module('foo.bar.FooBarModule', []);
After:
goog.module('foo.bar.FooBarModule');
const AndresModule = goog.require('foo.bar.AndresModule');
const FooBarModule = angular.module('foo.bar.FooBarModule', [AndresModule.name]);
addService(serviceName, className, namespace)
Adds a service to the module along with the goog.require for the service class.
const transformed = new Transformer(initialModule)
.addService('someService', 'SomeService', 'foo.bar.SomeService')
.toString();
Before:
goog.module('foo.bar.FooBarModule');
const FooBarModule = angular.module('foo.bar.FooBarModule', []);
After:
goog.module('foo.bar.FooBarModule');
const SomeService = goog.require('foo.bar.SomeService');
const FooBarModule = angular.module('foo.bar.FooBarModule', []);
FooBarModule.service('someService', SomeService);