@jadl/cmd
Version:
A command handler for JADL
93 lines (92 loc) • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Decorators = void 0;
const Symbols_1 = require("../Symbols");
const baseSymbols = {
[Symbols_1.Symbols.commandName]: '',
[Symbols_1.Symbols.aliases]: [],
[Symbols_1.Symbols.interaction]: {},
[Symbols_1.Symbols.guild]: undefined,
[Symbols_1.Symbols.commands]: [],
[Symbols_1.Symbols.injections]: []
};
exports.Decorators = {
createBaseDecorator: (handler) => {
return function (...options) {
return function (target) {
;
[
Symbols_1.Symbols.commandName,
Symbols_1.Symbols.aliases,
Symbols_1.Symbols.interaction,
Symbols_1.Symbols.guild
].forEach((symbol) => {
if (target[symbol] === undefined && baseSymbols[symbol]) {
target[symbol] = new baseSymbols[symbol].constructor();
}
else if (!Object.hasOwnProperty.call(target, symbol)) {
if (baseSymbols[symbol]) {
target[symbol] = Object.assign(target[symbol], new baseSymbols[symbol].constructor());
}
}
});
void handler(options, target);
};
};
},
setupCommandMeta: (target) => {
if (target[Symbols_1.Symbols.commands] === undefined) {
target[Symbols_1.Symbols.commands] = [];
}
else if (!Object.hasOwnProperty.call(target, Symbols_1.Symbols.commands)) {
target[Symbols_1.Symbols.commands] = [...target[Symbols_1.Symbols.commands]];
}
if (!target[Symbols_1.Symbols.interaction])
target[Symbols_1.Symbols.interaction] = { name: 'null' };
},
getCommandMeta(target, method) {
let command = target[Symbols_1.Symbols.commands].find((x) => x.method === method);
if (!command) {
command = {
canRun: [],
onRun: [],
method,
params: [],
indexToOption: {},
name: ''
};
target[Symbols_1.Symbols.commands].push(command);
}
return command;
},
createCommandDecorator: (running, extension) => {
return function (...options) {
return function (target, method, descriptor) {
if (extension)
extension(target, method, descriptor);
exports.Decorators.setupCommandMeta(target);
const command = exports.Decorators.getCommandMeta(target, method);
void running(options, command, target, descriptor);
};
};
},
createParameterDecorator: (paramHandler) => {
return function (...options) {
return function (target, method, index) {
exports.Decorators.setupCommandMeta(target);
const command = exports.Decorators.getCommandMeta(target, method);
const fn = paramHandler(options, command, target, index);
command.params[index] = fn;
};
};
},
createParameterAddition: (paramHandler) => {
return function (...options) {
return function (target, method, index) {
exports.Decorators.setupCommandMeta(target);
const command = exports.Decorators.getCommandMeta(target, method);
paramHandler(options, command, target, index);
};
};
}
};