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.
35 lines (34 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = void 0;
const basic_1 = require("../utils/basic");
const addParamMeta = (key, mapFn) => (target, _, parameterIndex) => {
const metadata = Reflect.getOwnMetadata(key, target) ?? [];
metadata[parameterIndex] = mapFn(metadata[parameterIndex]);
Reflect.defineMetadata(key, metadata, target);
};
exports.addParamMeta = addParamMeta;
const getParamMeta = (key, target) => {
return Reflect.getOwnMetadata(key, (0, basic_1.resolveConstructor)(target)) ?? [];
};
exports.getParamMeta = getParamMeta;
const addParamLabel = (key, label) => (0, exports.addParamMeta)('label', (prev) => {
const map = prev ?? new Map();
return map.set(key, label);
});
exports.addParamLabel = addParamLabel;
const getParamLabels = (target, parameterIndex) => {
const all = (0, exports.getParamMeta)('label', target);
return all[parameterIndex] ?? new Map();
};
exports.getParamLabels = getParamLabels;
const addParamTag = (tag) => (0, exports.addParamMeta)('tag', (prev) => {
const set = prev ?? new Set();
return set.add(tag);
});
exports.addParamTag = addParamTag;
const getParamTags = (target, parameterIndex) => {
const all = (0, exports.getParamMeta)('tag', target);
return all[parameterIndex] ?? new Set();
};
exports.getParamTags = getParamTags;