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

microplugin

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

microplugin - npm Package Compare versions

Comparing version 0.0.1 to 0.0.2

2

bower.json

@@ -5,3 +5,3 @@ {

"description": "A lightweight plugin / dependency system for javascript libraries.",
"version": "0.0.1",
"version": "0.0.2",
"license": "Apache License, Version 2.0",

@@ -8,0 +8,0 @@ "readmeFilename": "README.md",

@@ -5,3 +5,3 @@ {

"description": "A lightweight plugin / dependency system for javascript libraries.",
"version": "0.0.1",
"version": "0.0.2",
"author": "Brian Reavis <brian@thirdroute.com>",

@@ -16,2 +16,2 @@ "main": "src/microplugin.js",

"engines": {"node": "*"}
}
}
# microplugin.js
[![NPM version](https://badge.fury.io/js/microplugin.png)](http://badge.fury.io/js/microplugin)
[![Build Status](https://travis-ci.org/brianreavis/microplugin.js.png?branch=master)](https://travis-ci.org/brianreavis/microplugin.js)
(in development)
*Keep code modularized & extensible.* MicroPlugin is a lightweight drop-in plugin architecture for your JavaScript library. Plugins can [declare dependencies](#dependencies) to other plugins and can be [initialized with options](#loading-plugins) (in a variety of formats). It's [CommonJS](http://commonjs.org), so it works identically in Node.js and in a browser.
### Usage
```sh
$ npm install microplugin
$ bower install
```
## Integration
Using the provided mixin, extend your function with the [API](#mixin-methods) for declaring and loading plugins:
```js
MicroPlugin.mixin(YourLibrary);
var TextEditor = function(options) {
this.initializePlugins(options.plugins);
};
MicroPlugin.mixin(TextEditor);
```
That's it for integration! Now you can selectively load the plugins on an instance-by-instance basis.
```js
var editor = new TextEditor({
plugins: ['links','images']
});
```
### Loading Plugins
The [`initializePlugins()`](#prototypeinitializepluginsplugins) method sets up the plugin system and loads a list of plugins (with options). It accepts the list in three styles, depending on your preference.
#### List (no options)
```js
["plugin_a","plugin_b","plugin_c"]
```
#### List (with options)
```js
[
{name: "plugin_a", options: { /* ... */ }},
{name: "plugin_b", options: { /* ... */ }},
{name: "plugin_c", options: { /* ... */ }}
]
```
#### Hash (with options)
```js
{
"plugin_a": { /* ... */ },
"plugin_b": { /* ... */ },
"plugin_c": { /* ... */ }
}
```
## Plugin Design
Plugins aren't extravagant—they are barebones by design. A plugin is simply a function that gets called when an instance of your object is being constructed. Within that function, you can manually override methods, set up event listeners, etc. The `this` context will be the instance of your object.
### Defining Plugins
```js
MyLibrary.define("math", function(options) {
// You can return values which will be available to other plugins
// when they load the plugin via "require()". Explained more in
// the next section.
return {
random : Math.random,
sqrt : Math.sqrt,
sin2 : function(t) { return Math.pow(Math.sin(t), 2); },
cos2 : function(t) { return Math.pow(Math.sin(t), 2); }
};
});
```
#### Dependencies
Plugins can declare dependencies to other plugins (and use any exports they provide) through the [`require`](#prototyperequirename) function.
```js
MyLibrary.define("calculations", function(options) {
var math = this.require("math");
var theta = math.random();
var success = math.sqrt(math.sin2(theta) + math.cos2(theta)) === 1;
alert("Does the law of sines work? " + success);
});
```
## API Reference
#### MicroPlugin.mixin(fn)
Sets up all methods on the function and its prototype for defining and loading plugins.
### Mixin Methods
#### define(name, fn)
Declares a new plugin with the specified name.
#### [prototype].require(name)
Loads a plugin as a dependency and returns whatever it exports (if anything).
#### [prototype].initializePlugins(plugins)
Initializes the plugin system and loads a list of plugins with the provided options. The "plugins" argument can be in a [variety of formats](#loading-plugins).
## License

@@ -13,0 +110,0 @@

@@ -77,3 +77,3 @@ /**

while (queue.length) {
self.loadPlugin(queue.shift());
self.require(queue.shift());
}

@@ -83,5 +83,2 @@ };

Interface.prototype.loadPlugin = function(name) {
if (!Interface.plugins.hasOwnProperty(name)) {
throw new Error('Unable to find "' + name + '" plugin');
}
var self = this;

@@ -91,2 +88,6 @@ var plugins = self.plugins;

if (!Interface.plugins.hasOwnProperty(name)) {
throw new Error('Unable to find "' + name + '" plugin');
}
plugins.requested[name] = true;

@@ -93,0 +94,0 @@ plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);

Sorry, the diff of this file is not supported yet

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