UNPKG

jw-ng-forward

Version:

Temporary package. The default solution for those that want to write Angular 2.x style code in Angular 1.x

76 lines (75 loc) 3.45 kB
"use strict"; 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 get_injectable_name_1 = require("../util/get-injectable-name"); var providers_1 = require("../decorators/providers"); var opaque_token_1 = require("../classes/opaque-token"); var component_1 = require("./component"); function Inject() { var injects = []; for (var _i = 0; _i < arguments.length; _i++) { injects[_i] = arguments[_i]; } return function (t1, name, _a) { var t2 = (_a === void 0 ? { value: undefined } : _a).value; var targetIsClass = arguments.length === 1; var t = targetIsClass ? t1 : t2; var notStringBased = function (inj) { return typeof inj !== 'string' && !(inj instanceof opaque_token_1.OpaqueToken); }; var ensureInjectable = function (inj) { if (!writers_1.providerStore.get('name', inj) || !writers_1.providerStore.get('type', inj)) { throw new Error("Processing \"" + t.name + "\" @Inject parameter: \"" + (inj.name || inj.toString()) + "\" is not a valid injectable.\n\t\t\t\tPlease ensure " + (inj.name || inj.toString()) + " is injectable. Valid examples can be:\n\t\t\t\t- a string representing an ng1 provider, e.g. '$q'\n\t\t\t\t- an @Injectable ng-forward class\n\t\t\t\t- a Provider, e.g. provide(SOME_CONFIG, {asValue: 100})"); } return inj; }; var providers = injects .filter(notStringBased) .map(ensureInjectable); providers_1.Providers.apply(void 0, __spread(providers))(t, "while analyzing '" + t.name + "' injected providers"); var dependencies = injects.map(get_injectable_name_1.getInjectableName).filter(function (n) { return n !== undefined; }); if (writers_1.bundleStore.has('$inject', t)) { var parentInjects = writers_1.bundleStore.get('$inject', t); writers_1.bundleStore.set('$inject', __spread(dependencies, parentInjects), t); } else { writers_1.bundleStore.set('$inject', dependencies, t); } }; } exports.Inject = Inject; component_1.componentHooks.beforeCtrlInvoke(injectParentComponents); function injectParentComponents(caller, injects, controller, ddo, $injector, locals) { injects.forEach(function (inject) { if (!$injector.has(inject)) { var parent_1 = locals.$element; do { if (!parent_1.controller) continue; var parentCtrl = parent_1.controller(inject); if (parentCtrl) { locals[inject] = parentCtrl; return; } } while ((parent_1 = parent_1.parent()) && parent_1.length > 0); } }); }