UNPKG

@textlint/kernel

Version:
76 lines 2.35 kB
"use strict"; import { deepEqual } from "fast-equals"; /** * Get instance/static `availableExtensions()` from TextlintPluginProcessor */ const getAvailableExtensions = (pluginProcessor) => { if (typeof pluginProcessor.availableExtensions === "function") { return pluginProcessor.availableExtensions(); } // It is compatible for textlint@10<= // Recommended: `availableExtensions()` should be defined as instance method. // https://github.com/textlint/textlint/issues/531 const PluginProcessorConstructor = pluginProcessor.constructor; if (typeof PluginProcessorConstructor.availableExtensions === "function") { return PluginProcessorConstructor.availableExtensions(); } throw new Error(`Plugin(${pluginProcessor}) should implement availableExtensions() method`); }; /** * Textlint Plugin Descriptor */ export class TextlintPluginDescriptor { constructor(plugin) { this.plugin = plugin; this.plugin = plugin; if (!this.plugin.plugin.Processor) { throw new Error(`Plugin should have Processor property. module.exports = { Processor: class Processor{ ... } } `); } this.processor = new plugin.plugin.Processor(this.normalizedOptions); } get id() { return this.plugin.pluginId; } /** * Return true if this rule is enabled. */ get enabled() { return this.rawOptions !== false; } /** * Return available extension of this plugin */ get availableExtensions() { return getAvailableExtensions(this.processor); } get normalizedOptions() { // default: { ruleName: true } const DefaultPluginOption = {}; if (typeof this.plugin.options === "boolean" || this.plugin.options === undefined) { return DefaultPluginOption; } else { return this.plugin.options; } } get rawOptions() { return this.plugin.options; } toKernel() { return this.plugin; } equals(target) { return this.plugin.plugin === target.plugin.plugin && deepEqual(this.plugin.options, target.plugin.options); } toJSON() { return { id: this.id, options: this.normalizedOptions }; } } //# sourceMappingURL=TextlintPluginDescriptor.js.map