Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@ayana/bento

Package Overview
Dependencies
Maintainers
2
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ayana/bento

Modular runtime framework designed to solve complex tasks

  • 1.0.0-beta.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.2K
increased by899.55%
Maintainers
2
Weekly downloads
 
Created
Source

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

FAQs

Package last updated on 08 Apr 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc