This package has been deprecated

Author message:

This package has been moved to @ayanaware/bento (https://npmjs.com/package/@ayanaware/bento)!

@ayana/bento
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-beta.8 • Public • Published

Bento npm (scoped) Discord install size

DocumentationExamples

Bento is a robust NodeJS application framework designed to make creating and maintaing complex projects a simple and fast process.

What does Bento do:

  • Robust plugable application framework.
  • Featuring: Components, Events, Plugins, Properties, Variables
  • Component lifecycle state and management
  • Consistent Component API
  • Defines strict, opinionated, rules

What is a Bento Component?

Bento indroduces a concept of components. Components are logical chunks of code that all work together to provide your application to the world.

All components recieve their own ComponentAPI instance. The Component API is consistent across all components and provides a way for components to speak to eachother. As well as many other "Quality of life" features. Such as: variable injection and management, dependency management and injection, component event subscriptions, and more!

As a rule of thumb, components should not take on more then required. (IE: instead of having one component for connecting to Discord and processing messages. Have two, one for the connection and emitting the message events, and one that handles messages)

Here is a very basic example of a Bento component:

import { Component, ComponentAPI } from '@ayana/bento';

export class ExampleComponent {
	// this property becomes available after onLoad see ComponentAPI for more info
	public api: ComponentAPI;

	// required for all components, must be unique
	public name: string = 'ExampleComponent';

	// Optionally define other components we depend upon
	// Some decorators auto append to this array such as @SubscribeEvent
	public dependencies: Array<Component> = [];

	// Lifecycle event, called right before component fully loaded
	public async onLoad() {
		console.log('Hello world!');
	}

	// Lifecycle event, called right before component is unloaded
	public async onUnload() {
		console.log('Goodbye world!');
	}
}

A runnable version of this example is available on Gitlab

How to use Bento (IN-PROGRESS)

Using Bento is pretty simple. First import and initilize Bento and any plugins you wish to use. Then simply add the plugins to Bento. The below example assumes you have a directory called "components" in the same directory (relative) to it.

import { Bento, FSComponentLoader } from '@ayana/bento';

// Create a Bento instance
const bento = new Bento();

// Anonymous async function so we can use await
(async () => {
	// Create FSComponentLoader
	// NOTE: Keep in mind all FSComponentLoader does is find components in a path
	// Instantiates them and calls Bento.addComponent
	// Behind the scenes
	const fsloader = new FSComponentLoader();
	await fsloader.addDirectory(__dirname, 'components');

	// Apply plugin to Bento.
	await bento.addPlugin(fsloader);

	// Verify that Application looks good to continue
	await bento.verify();
})().catch(e => {
	console.error(`Error while starting Bento:\n${e}`);
	process.exit(1);
});

More examples available here

Package Sidebar

Install

npm i @ayana/bento

Weekly Downloads

33

Version

1.0.0-beta.8

License

MIT

Unpacked Size

208 kB

Total Files

230

Last publish

Collaborators

  • cloudmaster
  • hcgrandon
  • akio