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.
22 lines (21 loc) • 1.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.addClassMeta = void 0;
exports.getClassMeta = getClassMeta;
const basic_1 = require("../utils/basic");
const addClassMeta = (key, mapFn) => (target) => {
const value = Reflect.getOwnMetadata(key, target);
Reflect.defineMetadata(key, mapFn(value), target);
};
exports.addClassMeta = addClassMeta;
function getClassMeta(target, key) {
return Reflect.getOwnMetadata(key, (0, basic_1.resolveConstructor)(target));
}
const addClassLabel = (key, label) => (0, exports.addClassMeta)('label', (prev = new Map()) => prev.set(key, label));
exports.addClassLabel = addClassLabel;
const getClassLabels = (target) => getClassMeta(target, 'label') ?? new Map();
exports.getClassLabels = getClassLabels;
const addClassTag = (tag) => (0, exports.addClassMeta)('tag', (prev = new Set()) => prev.add(tag));
exports.addClassTag = addClassTag;
const getClassTags = (target) => getClassMeta(target, 'tag') ?? new Set();
exports.getClassTags = getClassTags;