UNPKG

@pulzar/core

Version:

Next-generation Node.js framework for ultra-fast web applications with zero-reflection DI, GraphQL, WebSockets, events, and edge runtime support

72 lines 2.18 kB
export function Injectable(options = {}) { return (target) => { // Store metadata for compile-time analysis only target.__injectable = { token: options.token || target, singleton: options.singleton ?? true, scope: options.scope || (options.singleton !== false ? "singleton" : "transient"), }; return target; }; } export function Inject(token) { return (target, propertyKey, parameterIndex) => { // Store inject tokens for compile-time analysis target.__inject = target.__inject || []; target.__inject[parameterIndex] = token; }; } export function Optional() { return (target, propertyKey, parameterIndex) => { // Store optional flags for compile-time analysis target.__optional = target.__optional || []; target.__optional[parameterIndex] = true; }; } export function Singleton() { return Injectable({ singleton: true }); } export function Transient() { return Injectable({ singleton: false, scope: "transient" }); } export function Scoped(scope) { return Injectable({ scope }); } export function RequestScoped() { return Injectable({ scope: "request" }); } export function TransientScoped() { return Injectable({ scope: "transient" }); } export function Provider(token) { return (target) => { target.__provider = token; return target; }; } // Compile-time metadata getters (no reflection) export function getInjectableMetadata(target) { return target.__injectable; } export function getInjectMetadata(target) { return target.__inject || []; } export function getOptionalMetadata(target) { return target.__optional || []; } export function isInjectable(target) { return !!target.__injectable; } export function isSingleton(target) { const metadata = target.__injectable; return metadata ? metadata.singleton : false; } export function getProviderToken(target) { return target.__provider; } export function getScope(target) { const metadata = target.__injectable; return metadata?.scope || "singleton"; } //# sourceMappingURL=decorators.js.map