playable
Version:
Video player based on HTML5Video
98 lines • 3.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.asClass = exports.asFunction = exports.asValue = exports.makeFluidInterface = exports.PROPERTY_FOR_DEPENDENCIES = void 0;
var tslib_1 = require("tslib");
var tslib_2 = require("tslib");
var NotAFunctionError_1 = (0, tslib_1.__importDefault)(require("./errors/NotAFunctionError"));
var Lifetime_1 = (0, tslib_1.__importDefault)(require("./constants/Lifetime"));
exports.PROPERTY_FOR_DEPENDENCIES = 'dependencies';
var makeFluidInterface = function (obj) {
var setLifetime = function (value) {
obj.lifetime = value;
return obj;
};
return {
setLifetime: setLifetime,
transient: function () { return setLifetime(Lifetime_1.default.TRANSIENT); },
scoped: function () { return setLifetime(Lifetime_1.default.SCOPED); },
singleton: function () { return setLifetime(Lifetime_1.default.SINGLETON); },
};
};
exports.makeFluidInterface = makeFluidInterface;
var asValue = function (value) {
var resolve = function () { return value; };
return {
resolve: resolve,
lifetime: Lifetime_1.default.TRANSIENT,
};
};
exports.asValue = asValue;
var asFunction = function (fn, options) {
if (typeof fn !== 'function') {
throw new NotAFunctionError_1.default('asFunction', 'function', typeof fn);
}
var defaults = {
lifetime: Lifetime_1.default.TRANSIENT,
};
options = (0, tslib_2.__assign)({}, defaults, options);
var resolve = generateResolve(fn);
var result = {
resolve: resolve,
lifetime: options.lifetime,
};
result.resolve = resolve.bind(result);
(0, tslib_2.__assign)(result, (0, exports.makeFluidInterface)(result));
return result;
};
exports.asFunction = asFunction;
var asClass = function (Type, options) {
if (typeof Type !== 'function') {
throw new NotAFunctionError_1.default('asClass', 'class', typeof Type);
}
var defaults = {
lifetime: Lifetime_1.default.TRANSIENT,
};
options = (0, tslib_2.__assign)({}, defaults, options);
// A function to handle object construction for us, as to make the generateResolve more reusable
var newClass = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return new (Type.bind.apply(Type, (0, tslib_1.__spreadArray)([void 0], args, false)))();
};
var resolve = generateResolve(newClass, Type);
var result = {
resolve: resolve,
lifetime: options.lifetime,
};
result.resolve = resolve.bind(result);
(0, tslib_2.__assign)(result, (0, exports.makeFluidInterface)(result));
return result;
};
exports.asClass = asClass;
function generateResolve(fn, dependencyParseTarget) {
// If the function used for dependency parsing is falsy, use the supplied function
if (!dependencyParseTarget) {
dependencyParseTarget = fn;
}
// Try to resolve the dependencies
var dependencies = dependencyParseTarget[exports.PROPERTY_FOR_DEPENDENCIES] || [];
// Use a regular function instead of an arrow function to facilitate binding to the registration.
return function resolve(container) {
if (dependencies.length > 0) {
var wrappedModules = dependencies.reduce(function (wrapper, dependency) {
wrapper[dependency] = container.resolve(dependency);
return wrapper;
}, {});
return fn(wrappedModules, container);
}
return fn(container);
};
}
exports.default = {
asValue: exports.asValue,
asFunction: exports.asFunction,
asClass: exports.asClass,
};
//# sourceMappingURL=registrations.js.map