UNPKG

@trademe/ensure

Version:

Utility decorators for Angular applications

41 lines 1.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Dependencies: var ensure_error_1 = require("../ensure-error"); function Singleton() { return function (injectable) { var singleton = createSingleton(injectable); setPrototype(injectable, singleton); setMetadata(injectable, singleton); setName(injectable, singleton); return singleton; }; } exports.Singleton = Singleton; function createSingleton(injectable) { var instantiated = null; return function singleton() { if (!instantiated) { instantiated = true; this._reset = function () { return instantiated = false; }; return injectable.apply(this, arguments); } throw new ensure_error_1.EnsureError("\n " + injectable.name + " is a singleton and must not be instantiated multiple times.\n "); }; } function setMetadata(injectable, singleton) { for (var _i = 0, _a = Reflect.getOwnMetadataKeys(injectable); _i < _a.length; _i++) { var key = _a[_i]; var metadata = Reflect.getOwnMetadata(key, injectable); Reflect.defineMetadata(key, metadata, singleton); } } function setName(injectable, singleton) { var fnName = injectable.name + "Singleton"; singleton.prototype.toString = function () { return fnName; }; Object.defineProperty(singleton, 'name', { value: fnName }); } function setPrototype(injectable, singleton) { singleton.prototype = Object.create(injectable.prototype); } //# sourceMappingURL=singleton.js.map