@warp-works/warpjs-plugin
Version:
WarpJS base plugin
121 lines (69 loc) • 3.35 kB
Markdown
# WarpJS-Plugin
Base class for WarpJS plugins.
A plugin allows you to extend the functionality of WarpJS by adding a set of
endpoints to the server.
**NOTE**: If you need to use `-works/warpjs-plugins` in your library, make
sure to include it in `devDependencies` and `peerDependencies` instead of
`dependencies`.
## Configuration
A plugin configuration to be added to `.warp-works-warpjsrc`:
{
"name": "string",
"moduleName": "@some/module",
"path": "/endpoints/base/path",
"type": "optional type",
"auth": "value",
}
- `name` Name of the plugin. This is distinct from the plugin itself as it could
be used multiple times.
- `moduleName` is the npm package that will be `require()`.
- `path` is the mounting path of the application on the expressJS server.
- `type` is optional. You can define your own types. See a list of
[RESERVED_PLUGIN_TYPES](./lib/reserved-plugin-types.js) that are affecting
`Studio` and `Content`.
- `auth` is optional. You can define if auth is needed. The value can be
`"admin"`, `"content"`, `true`, or `false`. Default value is `false`. When
`admin` or `content` is used, the user must be logged in, and in that
group. A user in `admin` is allowed to access `content`. When `true`, any
logged in user can access it.
When defining your own type, make sure that the same API is exposed, as plugins
will expect a given API when interacting with the plugin.
## API
### <a name="isClass"></a>`.isClass`
Poor's man check for if it's class-based plugin or module-based (the old way).
### <a name="Error"></a>`.Error`
Get the `WarpjsPluginError`.
### <a name="TYPES"></a>`.TYPES`
Gets the different reserved types.
### <a name="basename"></a>`.basename`
Getter for the converted basename from `package.json`'s `name`.
### <a name="version"></a>`.version`
Getter for the `package.json`'s `version`.
### <a name="versionedName"></a>`.versionedName`
Getter for a combination of [basename](#basename) and [version](#version).
### <a name="app"></a>`.app`
You must implement this method to get the application. This must return a
function that takes `(baseUrl, staticUrl)` that will return an initialized
expressJs application.
- `baseUrl` is the base path under which the application will run.
- `staticUrl` is the static url of the main application.
### <a name="pluginIdentifier"></a>`.pluginIdentifier`
Getter to get a unique identifier for the plugin. The default implementation is
to generate the value from `package.json`'s `name`.
{
"name": "@warp-works/warpjs-plugin",
...
}
will return `warp-works-warpjs-plugin`.
### <a name="requiresAdmin"></a>`.requiresAdmin`
Getter to see if the plugin is configured with authentication. If so, is the
`admin` role required to access this application.
### <a name="requiresContent"></a>`.requiresContent`
Getter to see if the plugin is configured with authentication. If so, is the
`content` role required to access this application.
### <a name="requiresUser"></a>`.requiresUser`
Getter to see if the plugin is configured with authentication. Any truthy value.
### <a name="toJSON"></a>`.toJSON()`
Gets a JSON representation of the plugin.
### <a name="baseConstants"></a>`.baseConstants(packageJson)`
Gets basic constants for the given `package.json` file.