animiassumenda
Version:
Blox live, desktop app for managing staking accounts
27 lines (24 loc) • 1.02 kB
text/typescript
export function Step(metadata: any) {
return (target, key, descriptor) => {
// save a reference to the original method this way we keep the values currently in the
// descriptor and don't overwrite what another decorator might have done to the descriptor.
if (descriptor === undefined) {
// eslint-disable-next-line no-param-reassign
descriptor = Object.getOwnPropertyDescriptor(target, key);
}
const originalMethod = descriptor.value;
// editing the descriptor/value parameter
// eslint-disable-next-line func-names
descriptor.value = async function () {
const args = [];
for (let i = 0; i < arguments.length; i += 1) {
// eslint-disable-next-line prefer-rest-params
args[i] = arguments[i];
}
const result = await originalMethod.apply(this, args);
return { ...result, step: { name: metadata ? metadata.name : key } };
};
// return edited descriptor as opposed to overwriting the descriptor
return descriptor;
};
}