stepdad
Version:
Stupid simple and lightweight dependency injection
38 lines (37 loc) • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseFunctionParameterNames = exports.Param = void 0;
const Param = (desc) => {
return (target, name, index) => {
let constructor = target.constructor;
let definitions = (constructor.paramDefinitions = []);
let type = Reflect.getMetadata("design:paramtypes", target, name);
let name_fn = target[name] && getFunctionParameterName(target[name], index);
console.log("desc: ", desc);
console.log("type: ", type);
//console.log("name: ", getFunctionParameterName(target[name], index));
console.log("definitions: ", definitions);
definitions[index] = {
type,
index,
name,
name_fn,
};
};
};
exports.Param = Param;
function parseFunctionParameterNames(fn) {
let groups = fn.toString().match(/^[^{=]*\(([\w\d$-,\s]*)\)/);
return groups ? groups[1].trim().split(/\s*,\s*/) : undefined;
}
exports.parseFunctionParameterNames = parseFunctionParameterNames;
const getFunctionParameterName = (fn, index) => {
let paramNames;
if (fn.__paramNames) {
paramNames = fn.__paramNames;
}
else {
paramNames = fn.__paramNames = parseFunctionParameterNames(fn);
}
return (paramNames && paramNames[index]) || `param${index}`;
};