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.
26 lines (25 loc) • 1.02 kB
JavaScript
import { resolveConstructor } from '../utils/basic';
export const addParamMeta = (key, mapFn) => (target, _, parameterIndex) => {
const metadata = Reflect.getOwnMetadata(key, target) ?? [];
metadata[parameterIndex] = mapFn(metadata[parameterIndex]);
Reflect.defineMetadata(key, metadata, target);
};
export const getParamMeta = (key, target) => {
return Reflect.getOwnMetadata(key, resolveConstructor(target)) ?? [];
};
export const addParamLabel = (key, label) => addParamMeta('label', (prev) => {
const map = prev ?? new Map();
return map.set(key, label);
});
export const getParamLabels = (target, parameterIndex) => {
const all = getParamMeta('label', target);
return all[parameterIndex] ?? new Map();
};
export const addParamTag = (tag) => addParamMeta('tag', (prev) => {
const set = prev ?? new Set();
return set.add(tag);
});
export const getParamTags = (target, parameterIndex) => {
const all = getParamMeta('tag', target);
return all[parameterIndex] ?? new Set();
};