Socket
Socket
Sign inDemoInstall

@putout/engine-loader

Package Overview
Dependencies
387
Maintainers
1
Versions
83
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @putout/engine-loader

load plugins and prepare them to run


Version published
Weekly downloads
16K
decreased by-13.91%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

@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
  • ☝️ Nested

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

Keywords

FAQs

Last updated on 10 Dec 2023

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc