ts-ioc-container
Version:
Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.
13 lines (12 loc) • 712 B
JavaScript
import { resolveConstructor } from '../utils/basic';
export const addClassMeta = (key, mapFn) => (target) => {
const value = Reflect.getOwnMetadata(key, target);
Reflect.defineMetadata(key, mapFn(value), target);
};
export function getClassMeta(target, key) {
return Reflect.getOwnMetadata(key, resolveConstructor(target));
}
export const addClassLabel = (key, label) => addClassMeta('label', (prev = new Map()) => prev.set(key, label));
export const getClassLabels = (target) => getClassMeta(target, 'label') ?? new Map();
export const addClassTag = (tag) => addClassMeta('tag', (prev = new Set()) => prev.add(tag));
export const getClassTags = (target) => getClassMeta(target, 'tag') ?? new Set();