feat(decorators): stablize props and remove after loading
This commit is contained in:
		
							parent
							
								
									f2e906987c
								
							
						
					
					
						commit
						659080f341
					
				
					 3 changed files with 21 additions and 12 deletions
				
			
		|  | @ -11,6 +11,7 @@ import { ClientPresence } from '../structures/presence.ts' | |||
| import { EmojisManager } from '../managers/emojis.ts' | ||||
| import { ActivityGame, ClientActivity } from '../types/presence.ts' | ||||
| import { ClientEvents } from '../gateway/handlers/index.ts' | ||||
| import { Extension } from './extensions.ts' | ||||
| 
 | ||||
| /** Some Client Options to modify behaviour */ | ||||
| export interface ClientOptions { | ||||
|  | @ -181,7 +182,7 @@ export class Client extends EventEmitter { | |||
| } | ||||
| 
 | ||||
| export function event(name?: string) { | ||||
|   return function (client: Client, prop: string) { | ||||
|   return function (client: Client | Extension, prop: string) { | ||||
|     const listener = ((client as unknown) as { | ||||
|       [name: string]: (...args: any[]) => any | ||||
|     })[prop] | ||||
|  |  | |||
|  | @ -98,6 +98,7 @@ export class CommandClient extends Client implements CommandClientOptions { | |||
|       Object.values(this._decoratedCommands).forEach((entry) => { | ||||
|         this.commands.add(entry) | ||||
|       }) | ||||
|       this._decoratedCommands = undefined | ||||
|     } | ||||
| 
 | ||||
|     this.on( | ||||
|  | @ -361,13 +362,7 @@ export function command(options?: CommandOptions) { | |||
| 
 | ||||
|     if (options !== undefined) Object.assign(command, options) | ||||
| 
 | ||||
|     if (target instanceof CommandClient) { | ||||
|       if (target._decoratedCommands === undefined) | ||||
|         target._decoratedCommands = {} | ||||
|       target._decoratedCommands[command.name] = command | ||||
|     } else { | ||||
|       if (target._decorated === undefined) target._decorated = {} | ||||
|       target._decorated[command.name] = command | ||||
|     } | ||||
|     if (target._decoratedCommands === undefined) target._decoratedCommands = {} | ||||
|     target._decoratedCommands[command.name] = command | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -69,14 +69,27 @@ export class Extension { | |||
|   commands: ExtensionCommands = new ExtensionCommands(this) | ||||
|   /** Events registered by this Extension */ | ||||
|   events: { [name: string]: (...args: any[]) => {} } = {} | ||||
|   _decorated?: { [name: string]: Command } | ||||
| 
 | ||||
|   _decoratedCommands?: { [name: string]: Command } | ||||
|   _decoratedEvents?: { [name: string]: (...args: any[]) => any } | ||||
| 
 | ||||
|   constructor(client: CommandClient) { | ||||
|     this.client = client | ||||
|     if (this._decorated !== undefined) { | ||||
|       Object.entries(this._decorated).forEach((entry) => { | ||||
|     if (this._decoratedCommands !== undefined) { | ||||
|       Object.entries(this._decoratedCommands).forEach((entry) => { | ||||
|         this.commands.add(entry[1]) | ||||
|       }) | ||||
|       this._decoratedCommands = undefined | ||||
|     } | ||||
| 
 | ||||
|     if ( | ||||
|       this._decoratedEvents !== undefined && | ||||
|       Object.keys(this._decoratedEvents).length !== 0 | ||||
|     ) { | ||||
|       Object.entries(this._decoratedEvents).forEach((entry) => { | ||||
|         this.listen(entry[0], entry[1]) | ||||
|       }) | ||||
|       this._decoratedEvents = undefined | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue