A standard plugin for ESDoc that aggregates multiple ESDoc plugins into a single convenient package
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
ESDoc Standard Plugin is a glue plugin for ESDoc that aggregates eleven different ESDoc plugins into a single convenient package. It automatically configures and loads multiple ESDoc plugins including lint, coverage, accessor, type inference, external ECMAScript references, branding, documentation detection, manual integration, test integration, and HTML publishing capabilities.
npm install esdoc-standard-pluginconst plugin = require("esdoc-standard-plugin");// ESDoc configuration file (.esdoc.json)
{
"source": "./src",
"destination": "./doc",
"plugins": [
{
"name": "esdoc-standard-plugin",
"option": {
"lint": {"enable": true},
"coverage": {"enable": true},
"accessor": {"access": ["public", "protected", "private"], "autoPrivate": true},
"undocumentIdentifier": {"enable": true},
"unexportedIdentifier": {"enable": false},
"typeInference": {"enable": true},
"brand": {
"title": "My Library",
"description": "this is awesome library"
},
"manual": {
"files": ["./manual/overview.md"]
},
"test": {
"source": "./test/",
"interfaces": ["describe", "it", "context", "suite", "test"],
"includes": ["(spec|Spec|test|Test)\\.js$"]
}
}
}
]
}ESDoc Standard Plugin operates as a glue plugin in the ESDoc ecosystem:
Main entry point that handles the ESDoc plugin loading process.
/**
* Event handler that dynamically adds constituent plugins to the ESDoc processing pipeline
* @param {Object} ev - Event object from ESDoc
* @param {Object} ev.data - Event data containing plugin information
* @param {Array} ev.data.plugins - Array of existing plugins
* @param {Object} [ev.data.option] - Configuration options for various plugins
*/
onHandlePlugins(ev);Event Object Structure:
interface PluginEvent {
data: {
plugins: Array<PluginDefinition>;
option?: PluginOptions;
};
}
interface PluginDefinition {
name: string;
option?: Object;
}The plugin accepts a configuration object with options for each constituent plugin:
interface PluginOptions {
/** Options for esdoc-lint-plugin */
lint?: {
enable?: boolean;
};
/** Options for esdoc-coverage-plugin */
coverage?: {
enable?: boolean;
};
/** Options for esdoc-accessor-plugin */
accessor?: {
access?: Array<"public" | "protected" | "private">;
autoPrivate?: boolean;
};
/** Options for esdoc-type-inference-plugin */
typeInference?: {
enable?: boolean;
};
/** Options for esdoc-brand-plugin */
brand?: {
logo?: string;
title?: string;
description?: string;
repository?: string;
site?: string;
author?: string;
image?: string;
};
/** Options for esdoc-undocumented-identifier-plugin */
undocumentIdentifier?: {
enable?: boolean;
};
/** Options for esdoc-unexported-identifier-plugin */
unexportedIdentifier?: {
enable?: boolean;
};
/** Options for esdoc-integrate-manual-plugin */
manual?: {
index?: string;
globalIndex?: boolean;
asset?: string;
files?: Array<string>;
};
/** Options for esdoc-integrate-test-plugin */
test?: {
source?: string;
interfaces?: Array<string>;
includes?: Array<string>;
excludes?: Array<string>;
};
}The standard plugin automatically loads these ESDoc plugins:
/**
* The plugin instance exported as the default export
* @type {Plugin}
*/
module.exports = pluginInstance;The plugin exports a single instance of the Plugin class, ready to be used by ESDoc.
/**
* Main plugin class that handles ESDoc plugin aggregation
*/
class Plugin {
/**
* Event handler called during ESDoc plugin initialization
* Dynamically adds constituent plugins to the processing pipeline
* @param {PluginEvent} ev - Event object containing plugin data
*/
onHandlePlugins(ev);
}// .esdoc.json
{
"source": "./src",
"destination": "./doc",
"plugins": [
{"name": "esdoc-standard-plugin"}
]
}// .esdoc.json
{
"source": "./src",
"destination": "./doc",
"plugins": [
{
"name": "esdoc-standard-plugin",
"option": {
"lint": {"enable": true},
"coverage": {"enable": true},
"accessor": {
"access": ["public", "protected", "private"],
"autoPrivate": true
},
"undocumentIdentifier": {"enable": true},
"unexportedIdentifier": {"enable": false},
"typeInference": {"enable": true},
"brand": {
"logo": "./logo.png",
"title": "My Library",
"description": "this is awesome library",
"repository": "https://github.com/foo/bar",
"site": "http://my-library.org",
"author": "https://twitter.com/foo",
"image": "http://my-library.org/logo.png"
},
"manual": {
"index": "./manual/index.md",
"globalIndex": true,
"asset": "./manual/asset",
"files": [
"./manual/overview.md",
"./manual/design.md",
"./manual/installation.md",
"./manual/usage1.md",
"./manual/usage2.md",
"./manual/tutorial.md",
"./manual/configuration.md",
"./manual/example.md",
"./manual/advanced.md",
"./manual/faq.md",
"./CHANGELOG.md"
]
},
"test": {
"source": "./test/",
"interfaces": ["describe", "it", "context", "suite", "test"],
"includes": ["(spec|Spec|test|Test)\\.js$"],
"excludes": ["\\.config\\.js$"]
}
}
}
]
}Install with Tessl CLI
npx tessl i tessl/npm-esdoc-standard-plugin