@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
JavaScript
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