UNPKG

lakutata

Version:

An IoC-based universal application framework.

388 lines (322 loc) 10 kB
/* Build Date: Mon Jan 05 2026 23:52:23 GMT+0800 (China Standard Time) */ "use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const e = require("util"); const r = require("./Errors.cjs"); const t = require("./InjectionMode.cjs"); const n = require("./Lifetime.cjs"); const i = require("./ListModules.cjs"); const s = require("./LoadModules.cjs"); const o = require("./Resolvers.cjs"); const c = require("./Utils.cjs"); const a = require("../base/internal/ObjectLifetime.cjs"); const u = require("../helpers/As.cjs"); const l = require("../base/internal/ObjectWeakRefs.cjs"); require("../../exceptions/di/DependencyInjectionException.cjs"); require("../base/abstracts/Exception.cjs"); require("../../../vendor/Package.internal.5.cjs"); require("../../../vendor/Package.internal.2.cjs"); require("../../../vendor/Package.internal.6.cjs"); require("../base/internal/ThrowWarning.cjs"); require("../helpers/Templating.cjs"); require("../base/internal/CamelCase.cjs"); require("../helpers/NoCase.cjs"); require("../helpers/DevNull.cjs"); require("../base/internal/ConstructorSymbol.cjs"); require("../../constants/DIMetadataKey.cjs"); require("../../../vendor/Package.internal.1.cjs"); require("node:crypto"); require("../../../vendor/Package.internal.7.cjs"); require("../../../vendor/Package.internal.3.cjs"); require("../base/internal/DataValidator.cjs"); require("node:util/types"); require("../validation/VLD.cjs"); require("url"); require("../../exceptions/dto/InvalidValueException.cjs"); require("../../../vendor/Package.internal.8.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("os"); require("path"); require("stream"); require("events"); require("fs"); require("./ParamParser.cjs"); require("./FunctionTokenizer.cjs"); require("../../exceptions/di/LifetimeLockedException.cjs"); function f(e) { if (e && e.__esModule) return e; const r = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } }); if (e) { for (const t in e) { if (t !== "default") { const n = Object.getOwnPropertyDescriptor(e, t); Object.defineProperty(r, t, n.get ? n : { enumerable: true, get: () => e[t] }); } } } r.default = e; return Object.freeze(r); } const d = f(e); function p(e) { return import(e); } const j = Symbol("familyTree"); const m = Symbol("rollUpRegistrations"); const q = "DependencyInjectionContainerCradle"; function g(e = {}) { return y(e); } function y(e, f, b) { e = { injectionMode: t.InjectionMode.PROXY, strict: false, ...e }; const h = b ?? []; const v = {}; const O = new Proxy({ [d.inspect.custom]: D }, { get: (e, r) => N(r), set: (e, r) => { throw new Error(`Attempted setting property "${r}" on container cradle - this is not allowed.`); }, ownKeys() { return Array.from(O); }, getOwnPropertyDescriptor(e, r) { const t = S(); if (Object.getOwnPropertyDescriptor(t, r)) { return { enumerable: true, configurable: true }; } return undefined; } }); const w = { options: e, cradle: O, inspect: P, cache: new Map, loadModules: x, createScope: T, register: k, build: R, resolve: N, hasRegistration: C, dispose: A, getRegistration: M, [d.inspect.custom]: P, [m]: S, get registrations() { return S(); } }; const I = f ? [ w ].concat(u.As(f)[j]) : [ w ]; w[j] = I; const L = c.last(I); return w; function P() { return `[DependencyInjectionContainer (${f ? "scoped, " : ""}registrations: ${Object.keys(w.registrations).length})]`; } function S() { return { ...f && f[m](), ...v }; } function* E() { const e = S(); for (const r in e) { yield r; } } function T() { return y(e, w, h); } function k(t, i) { const s = c.nameValueToObject(t, i); const o = [ ...Object.keys(s), ...Object.getOwnPropertySymbols(s) ]; for (const t of o) { const i = s[t]; if (e.strict && i.lifetime === n.Lifetime.SINGLETON) { if (f) { throw new r.DependencyInjectionRegistrationError(t, "Cannot register a singleton on a scoped container."); } } v[t] = i; } return w; } function D() { return Object.prototype.toString.call(O); } function M(e) { const r = v[e]; if (r) { return r; } if (f) { return f.getRegistration(e); } return null; } function N(t, i) { i = i || {}; try { const s = M(t); if (h.some(({name: e}) => e === t)) { throw new r.DependencyInjectionResolutionError(t, h, "Cyclic dependencies detected."); } if (t === "toJSON") { return D; } if (t === "constructor") { return g; } if (!s) { switch (t) { case d.inspect.custom: case "inspect": case "toString": return D; case Symbol.toStringTag: return q; case "then": return undefined; case Symbol.iterator: return E; } if (i.allowUnregistered) { return undefined; } throw new r.DependencyInjectionResolutionError(t, h); } const o = s.lifetime || n.Lifetime.TRANSIENT; if (e.strict && !s.isLeakSafe) { const e = h.findIndex(({lifetime: e}) => n.isLifetimeLonger(e, o)); if (e > -1) { throw new r.DependencyInjectionResolutionError(t, h, `Dependency '${t.toString()}' has a shorter lifetime than its ancestor: '${h[e].name.toString()}'`); } } h.push({ name: t, lifetime: o }); let c; let u; switch (o) { case n.Lifetime.TRANSIENT: u = s.resolve(w); break; case n.Lifetime.APPLICATION_SINGLETON: c = L.cache.get(t); if (!c) { u = s.resolve(e.strict ? L : w); L.cache.set(t, { resolver: s, value: u }); } else { u = c.value; } break; case n.Lifetime.MODULE_SINGLETON: case n.Lifetime.SINGLETON: c = w.cache.get(t); if (c !== undefined) { u = c.value; break; } u = s.resolve(w); w.cache.set(t, { resolver: s, value: u }); break; case n.Lifetime.SCOPED: c = w.cache.get(t); if (c !== undefined) { u = c.value; break; } u = s.resolve(w); w.cache.set(t, { resolver: s, value: u }); break; default: throw new r.DependencyInjectionResolutionError(t, h, `Unknown lifetime "${s.lifetime}"`); } h.pop(); if (a.GetObjectLifetime(u.constructor) === n.Lifetime.TRANSIENT) l.AppendObjectWeakRefs(this, u); return u; } catch (e) { h.length = 0; throw e; } } function C(e) { return !!M(e); } function R(e, t) { if (e && e.resolve) { return e.resolve(w); } const n = "build"; const i = "targetOrResolver"; r.DependencyInjectionTypeError.assert(e, n, i, "a registration, function or class", e); r.DependencyInjectionTypeError.assert(typeof e === "function", n, i, "a function or class", e); const s = c.isClass(e) ? o.asClass(e, t) : o.asFunction(e, t); return s.resolve(w); } function x(r, t) { const n = { require: e.require || function(e) { return require(e); }, listModules: i.listModules, container: w }; if (t?.esModules) { n.require = p; return s.loadModules(n, r, t).then(() => w); } else { s.loadModules(n, r, t); return w; } } async function A() { const e = Array.from(w.cache.entries()); w.cache.clear(); return Promise.all(e.map(async ([, e]) => { const {resolver: r, value: t} = e; const n = r; if (n.dispose) { await Promise.resolve(); return n.dispose(t); } return Promise.resolve(); })).then(() => undefined); } } exports.createContainer = g;