UNPKG

@jadl/cmd

Version:
93 lines (92 loc) 3.73 kB
"use strict"; 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); }; }; } };