123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- "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
- };
|