jquery/eslint.config.js
Timmy Willison 2cf659189e Release: migrate release process to release-it
*Authors*
- Checking and updating authors has been migrated
  to a custom script in the repo

*Changelog*
- changelogplease is no longer maintained
- generate changelog in markdown for GitHub releases
- generate changelog in HTML for blog posts
- generate contributors list in HTML for blog posts

*dist*
- clone dist repo, copy files, and commit/push
- commit tag with dist files on main branch;
  remove dist files from main branch after release

*cdn*
- clone cdn repo, copy files, and commit/push
- create versioned and unversioned copies in cdn/
- generate md5 sums and archives for Google and MSFT

*build*
- implement reproducible builds and verify release builds
  * uses the last modified date for the latest commit
  * See https://reproducible-builds.org/
- the verify workflow also ensures all files were
  properly published to the CDN and npm

*docs*
- the new release workflow is documented at build/release/README.md

*verify*
- use the last modified date of the commit before the tag
- use versioned filenames when checking map files on the CDN
- skip factory and package.json files when verifying CDN

*misc*
- now that we don't need the jquery-release script and
  now that we no longer need to build on Node 10, we can
  use ESM in all files in the build folder
- limit certain workflows to the main repo (not forks)
- version has been set to the previously released version 3.7.1,
  as release-it expects
- release-it added the `preReleaseBase` option and we
  now always set it to `1` in the npm script. This is
  a noop for stable releases.
- include post-release script to be run manually after a release,
  with further steps that should be verified manually

Ref jquery/jquery-release#114
Closes gh-5522
2024-07-29 15:25:14 -04:00

348 lines
5.9 KiB
JavaScript

"use strict";
const jqueryConfig = require( "eslint-config-jquery" );
const globals = require( "globals" );
module.exports = [
{
// Only global ignores will bypass the parser
// and avoid JS parsing errors
// See https://github.com/eslint/eslint/discussions/17412
ignores: [
"external",
"tmp",
"test/data/json_obj.js",
"test/data/jquery-*.js",
// This avoids parsing local main branch builds
"dist/jquery.factory.*",
"dist-module"
]
},
// Source
{
files: [ "src/**" ],
languageOptions: {
ecmaVersion: 2015,
// The browser env is not enabled on purpose so that code takes
// all browser-only globals from window instead of assuming
// they're available as globals. This makes it possible to use
// jQuery with tools like jsdom which provide a custom window
// implementation.
globals: {
define: false,
window: false
},
sourceType: "commonjs"
},
rules: {
...jqueryConfig.rules,
indent: [
"error",
"tab",
{
outerIIFEBody: 0,
// Ignore the top level function defining an AMD module
ignoredNodes: [
"Program > ExpressionStatement > CallExpression > :last-child > *"
]
}
],
"no-implicit-globals": "error",
"no-unused-vars": [
"error",
{ caughtErrorsIgnorePattern: "^_" }
],
"one-var": [ "error", { var: "always" } ],
strict: [ "error", "function" ]
}
},
{
files: [ "src/selector.js" ],
rules: {
indent: "off"
}
},
{
files: [ "src/wrapper.js" ],
languageOptions: {
globals: {
jQuery: false,
module: true
},
sourceType: "script"
},
rules: {
"no-unused-vars": "off",
indent: [
"error",
"tab",
{
// Unlike other codes, "wrapper.js" is implemented in UMD.
// So it required a specific exception for jQuery's UMD
// Code Style. This makes that indentation check is not
// performed for 1 depth of outer FunctionExpressions
ignoredNodes: [
"Program > ExpressionStatement > CallExpression > :last-child > *"
]
}
]
}
},
{
files: [ "src/exports/amd.js" ],
languageOptions: {
globals: {
define: false
}
}
},
// Tests
{
files: [
"test/*",
"test/data/**",
"test/integration/**",
"test/unit/**"
],
ignores: [
"test/data/badcall.js",
"test/data/badjson.js",
"test/data/support/csp.js",
"test/data/support/getComputedSupport.js",
"test/data/core/jquery-iterability-transpiled.js"
],
languageOptions: {
ecmaVersion: 2015,
sourceType: "script",
globals: {
...globals.browser,
require: false,
trustedTypes: false,
QUnit: false,
ajaxTest: false,
testIframe: false,
createDashboardXML: false,
createWithFriesXML: false,
createXMLFragment: false,
includesModule: false,
moduleTeardown: false,
url: false,
q: false,
jQuery: false,
$: false,
sinon: false,
amdDefined: false,
fireNative: false,
Globals: false,
hasPHP: false,
isLocal: false,
supportjQuery: false,
originaljQuery: false,
original$: false,
baseURL: false,
externalHost: false
}
},
rules: {
...jqueryConfig.rules,
"no-unused-vars": [
"error",
{
args: "after-used",
argsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_"
}
],
// Too many errors
"max-len": "off",
camelcase: "off"
}
},
{
files: [
"test/jquery.js"
],
languageOptions: {
globals: {
loadTests: false
}
}
},
{
files: [
"test/unit/core.js"
],
rules: {
// Core has several cases where unused vars are expected
"no-unused-vars": "off"
}
},
{
files: [
"test/runner/**/*.js"
],
languageOptions: {
ecmaVersion: "latest",
globals: {
...globals.node
}
},
rules: {
...jqueryConfig.rules,
"no-implicit-globals": "error"
}
},
{
files: [
"test/runner/listeners.js"
],
languageOptions: {
ecmaVersion: 5,
sourceType: "script",
globals: {
...globals.browser,
QUnit: false,
Symbol: false
}
}
},
{
files: [
"test/data/testinit.js",
"test/data/testrunner.js",
"test/data/core/jquery-iterability-transpiled-es6.js"
],
languageOptions: {
ecmaVersion: 2015,
sourceType: "script",
globals: {
...globals.browser
}
},
rules: {
...jqueryConfig.rules,
strict: [ "error", "function" ]
}
},
{
files: [
"test/data/testinit.js"
],
rules: {
strict: [ "error", "global" ]
}
},
{
files: [
"test/unit/deferred.js"
],
rules: {
// Deferred tests set strict mode for certain tests
strict: "off"
}
},
{
files: [
"eslint.config.js",
".release-it.js",
"build/**",
"test/node_smoke_tests/**",
"test/bundler_smoke_tests/**/*",
"test/promises_aplus_adapters/**",
"test/middleware-mockserver.js"
],
languageOptions: {
ecmaVersion: "latest",
sourceType: "commonjs",
globals: {
...globals.browser,
...globals.node
}
},
rules: {
...jqueryConfig.rules,
"no-implicit-globals": "error",
"no-unused-vars": [
"error",
{ caughtErrorsIgnorePattern: "^_" }
],
strict: [ "error", "global" ]
}
},
{
files: [
"build/**/*.js",
"**/*.mjs"
],
languageOptions: {
sourceType: "module"
}
},
{
files: [
"dist/jquery.js",
"dist/jquery.slim.js"
],
languageOptions: {
globals: {
define: false,
module: false,
Symbol: false,
window: false
}
},
rules: {
...jqueryConfig.rules,
"no-implicit-globals": "error",
// That is okay for the built version
"no-multiple-empty-lines": "off",
"no-unused-vars": [
"error",
{ caughtErrorsIgnorePattern: "^_" }
],
// When custom compilation is used, the version string
// can get large. Accept that in the built version.
"max-len": "off",
"one-var": "off"
}
},
{
files: [
"dist/**"
],
languageOptions: {
ecmaVersion: 5,
sourceType: "script"
}
}
];