meocord
Version:
Decorator-based Discord bot framework built on discord.js. Brings NestJS-style controllers, dependency injection, guards, and testing utilities to bot development — with a full CLI and TypeScript-first design.
67 lines (63 loc) • 1.88 kB
JavaScript
;
var theme = require('../_shared/theme-Bz-D4RbT.cjs');
require('node:util');
require('dayjs');
require('dayjs/plugin/utc.js');
require('dayjs/plugin/timezone.js');
require('path');
require('fs');
require('jiti');
require('chalk');
/**
* MeoCord Framework
* Copyright (c) 2025 Ukasyah Rahmatullah Zada
* SPDX-License-Identifier: MIT
*/ /**
* Composes multiple class or method decorators into a single decorator.
*
* @example
* ```typescript
* export const Protected = () => applyDecorators(
* UseGuard(DefaultGuard, GlobalRateLimiterGuard),
* )
*
* @Controller()
* @Protected()
* export class PingController {}
* ```
*/ function applyDecorators(...decorators) {
return function(target, propertyKey, descriptor) {
for (const decorator of decorators){
if (propertyKey !== undefined && descriptor !== undefined) {
decorator(target, propertyKey, descriptor);
} else {
decorator(target);
}
}
return descriptor;
};
}
/**
* Attaches arbitrary metadata to a class or method. Use alongside `Reflect.getMetadata` to read it back.
*
* @example
* ```typescript
* export const Roles = (...roles: string[]) => SetMetadata('roles', roles)
*
* @Command('admin', CommandType.SLASH)
* @Roles('admin', 'moderator')
* async adminCommand(interaction: ChatInputCommandInteraction) {}
* ```
*/ function SetMetadata(metadataKey, metadataValue) {
return function(target, propertyKey) {
if (propertyKey !== undefined) {
Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey);
} else {
Reflect.defineMetadata(metadataKey, metadataValue, target);
}
};
}
exports.Logger = theme.Logger;
exports.Theme = theme.Theme;
exports.SetMetadata = SetMetadata;
exports.applyDecorators = applyDecorators;