lakutata
Version:
An IoC-based universal application framework.
286 lines (226 loc) • 5.82 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, {
value: "Module"
});
const e = require("./Errors.cjs");
const r = require("./InjectionMode.cjs");
const n = require("./Lifetime.cjs");
const t = require("./ParamParser.cjs");
const i = require("./Utils.cjs");
require("../../exceptions/di/DependencyInjectionException.cjs");
require("../base/abstracts/Exception.cjs");
require("../base/internal/BasicInfo.cjs");
require("../helpers/As.cjs");
require("../../../vendor/Package.6.cjs");
require("../../../vendor/Package.5.cjs");
require("../../../vendor/Package.7.cjs");
require("../base/internal/ThrowWarning.cjs");
require("../helpers/Templating.cjs");
require("../base/internal/CamelCase.cjs");
require("../helpers/NoCase.cjs");
require("../base/internal/ConstructorSymbol.cjs");
require("../../constants/DIMetadataKey.cjs");
require("../../../vendor/Package.4.cjs");
require("node:crypto");
require("../../../vendor/Package.2.cjs");
require("../../../vendor/Package.1.cjs");
require("../base/internal/DataValidator.cjs");
require("node:util/types");
require("../validation/VLD.cjs");
require("../../../vendor/Package.11.cjs");
require("url");
require("../../../vendor/Package.10.cjs");
require("util");
require("../../exceptions/dto/InvalidValueException.cjs");
require("../../../vendor/Package.9.cjs");
require("../helpers/IsHtml.cjs");
require("../helpers/IsXML.cjs");
require("../../constants/DTOMetadataKey.cjs");
require("../helpers/ObjectConstructor.cjs");
require("../helpers/ObjectParentConstructors.cjs");
require("../helpers/ObjectParentConstructor.cjs");
require("../helpers/ObjectPrototype.cjs");
require("./FunctionTokenizer.cjs");
const o = Symbol("Dependency Injection Resolver Config");
function s(e) {
return {
resolve: () => e,
isLeakSafe: true
};
}
function c(r, t) {
if (!i.isFunction(r)) {
throw new e.DependencyInjectionTypeError("asFunction", "fn", "function", r);
}
const s = {
lifetime: n.Lifetime.TRANSIENT
};
t = p(s, t, r[o]);
const c = g(r);
const u = {
resolve: c,
...t
};
return f(l(u));
}
function u(r, t) {
if (!i.isFunction(r)) {
throw new e.DependencyInjectionTypeError("asClass", "Type", "class", r);
}
const s = {
lifetime: n.Lifetime.TRANSIENT
};
t = p(s, t, r[o]);
const c = function e(...n) {
return Reflect.construct(r, n);
};
const u = g(c, r);
return f(l({
...t,
resolve: u
}));
}
function a(e) {
return {
resolve(r) {
return r.resolve(e);
},
isLeakSafe: true
};
}
function l(e) {
function t(e) {
return l({
...this,
lifetime: e
});
}
function i(e) {
return l({
...this,
injectionMode: e
});
}
function o(e) {
return l({
...this,
injector: e
});
}
return d(e, {
setLifetime: t,
inject: o,
transient: j(t, n.Lifetime.TRANSIENT),
scoped: j(t, n.Lifetime.SCOPED),
singleton: j(t, n.Lifetime.SINGLETON),
setInjectionMode: i,
proxy: j(i, r.InjectionMode.PROXY),
classic: j(i, r.InjectionMode.CLASSIC)
});
}
function f(e) {
function r(e) {
return f({
...this,
dispose: e
});
}
return d(e, {
disposer: r
});
}
function j(e, r) {
return function n() {
return e.call(this, r);
};
}
function p(e, ...r) {
return Object.assign({}, e, ...r);
}
function d(e, r) {
const n = {
...e,
...r
};
return n;
}
function q(e, r) {
return function n(t, i) {
if (t in r) {
return r[t];
}
return e.resolve(t, i);
};
}
function y(e, r) {
const n = r(e);
const t = i.uniq([ ...Reflect.ownKeys(e.cradle), ...Reflect.ownKeys(n) ]);
const o = new Proxy({}, {
get(r, t) {
if (t === Symbol.iterator) {
return function* r() {
for (const r in e.cradle) {
yield r;
}
for (const e in n) {
yield e;
}
};
}
if (t in n) {
return n[t];
}
return e.resolve(t);
},
ownKeys() {
return t;
},
getOwnPropertyDescriptor(e, r) {
if (t.indexOf(r) > -1) {
return {
enumerable: true,
configurable: true
};
}
return undefined;
}
});
return o;
}
function g(e, n) {
if (!n) {
n = e;
}
const t = h(n);
return function n(i) {
const o = this.injectionMode || i.options.injectionMode || r.InjectionMode.PROXY;
if (o !== r.InjectionMode.CLASSIC) {
const r = this.injector ? y(i, this.injector) : i.cradle;
return e(r);
}
if (t.length > 0) {
const r = this.injector ? q(i, this.injector(i)) : i.resolve;
const n = t.map((e => r(e.name, {
allowUnregistered: e.optional
})));
return e(...n);
}
return e();
};
}
function h(e) {
const r = t.parseParameterList(e.toString());
if (!r) {
const r = Object.getPrototypeOf(e);
if (typeof r === "function" && r !== Function.prototype) {
return h(r);
}
return [];
}
return r;
}
exports.RESOLVER = o;
exports.aliasTo = a;
exports.asClass = u;
exports.asFunction = c;
exports.asValue = s;