@putout/engine-loader

13.0.0 • Public • Published

@putout/engine-loader NPM version

🐊Putout loader for plugins and processors.

Install

npm i @putout/engine-loader

Plugins

Loader supports two kinds of plugins:

Simple Plugin

Simplest type of plugin support by @putout/engine-runner, contains one rule.

Nested Plugin

Nested contains one or more rules:

module.exports.rules = {
    'remove-unused-variables': require('@putout/plugin-remove-unused-variables'),
};

When you want to make it disabled by default, use:

module.exports.rules = {
    'remove-unused-variables': ['off', require('@putout/plugin-remove-unused-variables')],
};

So when someone using your plugin, he needs to enable it:

{
    "rules": {
        "nested/remove-unused-variables": "on"
    },
    "plugins": ["nested"]
}

Env Variables

When you need to get things working with Yarn PnP, and using custom plugins formatters or processors, add env variable PUTOUT_YARN_PNP with name of a package that contains dependencies you need.

API

loadPlugins

const {loadPlugins} = require('@putout/engine-loader');

const pluginNames = [
    'remove-unusede-variables',
];

const rules = {
    'remove-unused-variables': 'on',
};

const plugins = loadPlugins({
    cache: true, //default
    pluginNames,
    rules,
});

import

You can also use schema like this one:

import:escover/plugin
const plugins = loadPlugins({
    pluginNames: [
        'import:commonjs-putout-plugin',
    ],
});

loadPluginsAsync

Load ESM plugins:

const {loadPluginsAsync} = require('@putout/engine-loader');

const pluginNames = [
    'remove-unusede-variables',
];

const rules = {
    'remove-unused-variables': 'on',
};

const plugins = await loadPluginsAsync({
    cache: true, //default
    pluginNames,
    rules,
});

import

You can also use schema like this one:

import:escover/plugin
const plugins = await loadPluginsAsync({
    pluginNames: [
        'import:escover/plugin',
    ],
});

Or when used putoutAsync:

import {putoutAsync} from 'putout';

await putoutAsync(`module.exports.hello = 'world'`, {
    plugins: [
        'import:escover/plugin',
    ],
});

Which is the same as:

import {putoutAsync} from 'putout';
import * as plugin from 'escover/plugin';

await putoutAsync(`module.exports.hello = 'world'`, {
    plugins: [
        ['escover/plugin', plugin],
    ],
});

Or used inside .putout.json:

{
    "plugins": [
        "import:escover/plugin"
    ]
}

loadProcessorsAsync

const {loadProcessors} = require('@putout/engine-loader');
const optionalLoad = async (a) => await import(a);

const plugins = await loadProcessorsAsync({
    processors: [
        ['javascript', 'on'],
        ['markdown', 'off'],
    ],
}, optionalLoad);

createAsyncLoader

Gives ability to create loader for processor or formatter.

const {createAsyncLoader} = require('@putout/engine-loader');
const {loadProcessor} = createAsyncLoader('processor');

// load @putout/processor-markdown
await loadProcessors('markdown');
// load @putout/processor-json using custom loader
await loadProcess('json', () => {
    return Promise.resolve(`will be called instead of 'import'`);
});

License

MIT

Package Sidebar

Install

npm i @putout/engine-loader

Weekly Downloads

14,886

Version

13.0.0

License

MIT

Unpacked Size

25.1 kB

Total Files

19

Last publish

Collaborators

  • coderaiser