jw-ng-forward
Version:
Temporary package. The default solution for those that want to write Angular 2.x style code in Angular 1.x
97 lines (96 loc) • 4.15 kB
JavaScript
;
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
var writers_1 = require("../writers");
var module_1 = require("./module");
var inject_1 = require("../decorators/inject");
var get_injectable_name_1 = require("../util/get-injectable-name");
var providers_1 = require("../decorators/providers");
var injectable_1 = require("../decorators/injectable");
var TYPE = 'provider';
var Provider = (function () {
function Provider(token, _a) {
var useClass = _a.useClass, useValue = _a.useValue, useConstant = _a.useConstant, useFactory = _a.useFactory, deps = _a.deps;
this.isProvider = true;
this._dependencies = [];
try {
this.token = get_injectable_name_1.getInjectableNameWithJitCreation(token);
}
catch (e) {
throw new Error("new Provider() Error: Invalid token " + token);
}
Object.assign(this, { useClass: useClass, useValue: useValue, useConstant: useConstant, useFactory: useFactory });
if (!useClass && !useValue && !useConstant && !useFactory) {
throw new Error("new Provider(" + token + ") Error: No usage provided (i.e. useClass, useValue, useConstant, useFactory)");
}
if (deps) {
inject_1.Inject.apply(void 0, __spread(deps))(this.useFactory);
providers_1.Providers.apply(void 0, __spread(deps.filter(function (d) { return typeof d !== 'string'; })))(this.useFactory, "while analyzing Provider '" + this.token + "' useFactory deps");
this._dependencies = writers_1.bundleStore.get('$inject', this.useFactory);
}
writers_1.providerStore.set('name', this.token, this);
writers_1.providerStore.set('type', TYPE, this);
}
Object.defineProperty(Provider.prototype, "type", {
get: function () {
var _this = this;
if (this._type)
return this._type;
this._type = Object.keys(this).find(function (k) { return k.startsWith('use') && _this[k] !== undefined; });
return this._type;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Provider.prototype, "dependencies", {
get: function () {
return this._dependencies;
},
enumerable: true,
configurable: true
});
return Provider;
}());
exports.Provider = Provider;
module_1.Module.addProvider(TYPE, function (provider, name, injects, ngModule) {
switch (provider.type) {
case 'useValue':
ngModule.value(provider.token, provider.useValue);
break;
case 'useConstant':
ngModule.constant(provider.token, provider.useConstant);
break;
case 'useClass':
injects = writers_1.bundleStore.get('$inject', provider.useClass) || [];
module_1.Module.getParser(injectable_1.INJECTABLE)(provider.useClass, provider.token, injects, ngModule);
break;
case 'useFactory':
ngModule.factory(provider.token, __spread(provider.dependencies, [provider.useFactory]));
break;
default:
break;
}
});
exports.provide = function (token, _a) {
var useClass = _a.useClass, useValue = _a.useValue, useConstant = _a.useConstant, useFactory = _a.useFactory, deps = _a.deps;
return new Provider(token, { useClass: useClass, useValue: useValue, useConstant: useConstant, useFactory: useFactory, deps: deps });
};