|
- "use strict";
-
- const {
- validate
- } = require('schema-utils');
-
- const schema = require('./options.json');
- /** @typedef {import("eslint").ESLint.Options} ESLintOptions */
-
- /** @typedef {import('eslint').ESLint.LintResult} LintResult */
-
- /** @typedef {import('eslint').ESLint.LintResultData} LintResultData */
-
- /**
- * @callback FormatterFunction
- * @param {LintResult[]} results
- * @param {LintResultData=} data
- * @returns {string}
- */
-
- /**
- * @typedef {Object} OutputReport
- * @property {string=} filePath
- * @property {string|FormatterFunction=} formatter
- */
-
- /**
- * @typedef {Object} PluginOptions
- * @property {string=} context
- * @property {boolean=} emitError
- * @property {boolean=} emitWarning
- * @property {string=} eslintPath
- * @property {string|string[]=} exclude
- * @property {string|string[]=} extensions
- * @property {boolean=} failOnError
- * @property {boolean=} failOnWarning
- * @property {string|string[]=} files
- * @property {boolean=} fix
- * @property {string|FormatterFunction=} formatter
- * @property {boolean=} lintDirtyModulesOnly
- * @property {boolean=} quiet
- * @property {OutputReport=} outputReport
- * @property {number|boolean=} threads
- * @property {RegExp|RegExp[]=} resourceQueryExclude
- */
-
- /** @typedef {PluginOptions & ESLintOptions} Options */
-
- /**
- * @param {Options} pluginOptions
- * @returns {PluginOptions}
- */
-
-
- function getOptions(pluginOptions) {
- const options = {
- extensions: 'js',
- emitError: true,
- emitWarning: true,
- failOnError: true,
- resourceQueryExclude: [],
- ...pluginOptions,
- ...(pluginOptions.quiet ? {
- emitError: true,
- emitWarning: false
- } : {})
- }; // @ts-ignore
-
- validate(schema, options, {
- name: 'ESLint Webpack Plugin',
- baseDataPath: 'options'
- });
- return options;
- }
- /**
- * @param {Options} loaderOptions
- * @returns {ESLintOptions}
- */
-
-
- function getESLintOptions(loaderOptions) {
- const eslintOptions = { ...loaderOptions
- }; // Keep the fix option because it is common to both the loader and ESLint.
-
- const {
- fix,
- extensions,
- ...eslintOnlyOptions
- } = schema.properties; // No need to guard the for-in because schema.properties has hardcoded keys.
- // eslint-disable-next-line guard-for-in
-
- for (const option in eslintOnlyOptions) {
- // @ts-ignore
- delete eslintOptions[option];
- }
-
- return eslintOptions;
- }
-
- module.exports = {
- getOptions,
- getESLintOptions
- };
|