initial commit of actions
This commit is contained in:
commit
949ece5785
44660 changed files with 12034344 additions and 0 deletions
29
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/browser.js
generated
vendored
Normal file
29
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/browser.js
generated
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
},
|
||||
plugins: ['github', 'escompat'],
|
||||
extends: ['plugin:escompat/recommended'],
|
||||
rules: {
|
||||
'escompat/no-dynamic-imports': 'off',
|
||||
'github/async-currenttarget': 'error',
|
||||
'github/async-preventdefault': 'error',
|
||||
'github/get-attribute': 'error',
|
||||
'github/no-blur': 'error',
|
||||
'github/no-dataset': 'error',
|
||||
'github/no-innerText': 'error',
|
||||
'github/no-inner-html': 'error',
|
||||
'github/unescaped-html-literal': 'error',
|
||||
'github/no-useless-passive': 'error',
|
||||
'github/require-passive-events': 'error',
|
||||
'github/prefer-observers': 'error',
|
||||
'import/no-nodejs-modules': 'error',
|
||||
'no-restricted-syntax': [
|
||||
'error',
|
||||
{
|
||||
selector: "NewExpression[callee.name='URL'][arguments.length=1]",
|
||||
message: 'Please pass in `window.location.origin` as the 2nd argument to `new URL()`',
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/browser.js
generated
vendored
Normal file
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/browser.js
generated
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
const globals = require('globals')
|
||||
const github = require('../../plugin')
|
||||
const importPlugin = require('eslint-plugin-import')
|
||||
const escompatPlugin = require('eslint-plugin-escompat')
|
||||
const {fixupPluginRules} = require('@eslint/compat')
|
||||
|
||||
module.exports = {
|
||||
...escompatPlugin.configs['flat/recommended'],
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.browser,
|
||||
},
|
||||
},
|
||||
plugins: {importPlugin, escompatPlugin, github: fixupPluginRules(github)},
|
||||
rules: {
|
||||
'escompatPlugin/no-dynamic-imports': 'off',
|
||||
'github/async-currenttarget': 'error',
|
||||
'github/async-preventdefault': 'error',
|
||||
'github/get-attribute': 'error',
|
||||
'github/no-blur': 'error',
|
||||
'github/no-dataset': 'error',
|
||||
'github/no-innerText': 'error',
|
||||
'github/no-inner-html': 'error',
|
||||
'github/unescaped-html-literal': 'error',
|
||||
'github/no-useless-passive': 'error',
|
||||
'github/require-passive-events': 'error',
|
||||
'github/prefer-observers': 'error',
|
||||
'importPlugin/no-nodejs-modules': 'error',
|
||||
'no-restricted-syntax': [
|
||||
'error',
|
||||
{
|
||||
selector: "NewExpression[callee.name='URL'][arguments.length=1]",
|
||||
message: 'Please pass in `window.location.origin` as the 2nd argument to `new URL()`',
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
11
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/internal.js
generated
vendored
Normal file
11
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/internal.js
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
const github = require('../../plugin')
|
||||
const {fixupPluginRules} = require('@eslint/compat')
|
||||
|
||||
module.exports = {
|
||||
plugins: {github: fixupPluginRules(github)},
|
||||
rules: {
|
||||
'github/authenticity-token': 'error',
|
||||
'github/js-class-name': 'error',
|
||||
'github/no-d-none': 'error',
|
||||
},
|
||||
}
|
||||
48
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/react.js
generated
vendored
Normal file
48
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/react.js
generated
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
const github = require('../../plugin')
|
||||
const jsxA11yPlugin = require('eslint-plugin-jsx-a11y')
|
||||
const {fixupPluginRules} = require('@eslint/compat')
|
||||
|
||||
module.exports = {
|
||||
...jsxA11yPlugin.flatConfigs.recommended,
|
||||
languageOptions: {
|
||||
sourceType: 'module',
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: {github: fixupPluginRules(github), jsxA11yPlugin},
|
||||
rules: {
|
||||
'jsxA11yPlugin/role-supports-aria-props': 'off', // Override with github/a11y-role-supports-aria-props until https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/910 is resolved
|
||||
'github/a11y-aria-label-is-well-formatted': 'error',
|
||||
'github/a11y-no-visually-hidden-interactive-element': 'error',
|
||||
'github/a11y-no-title-attribute': 'error',
|
||||
'github/a11y-svg-has-accessible-name': 'error',
|
||||
'github/a11y-role-supports-aria-props': 'error',
|
||||
'jsxA11yPlugin/no-aria-hidden-on-focusable': 'error',
|
||||
'jsxA11yPlugin/no-autofocus': 'off',
|
||||
'jsxA11yPlugin/anchor-ambiguous-text': [
|
||||
'error',
|
||||
{
|
||||
words: ['this', 'more', 'read here', 'read more'],
|
||||
},
|
||||
],
|
||||
'jsxA11yPlugin/no-interactive-element-to-noninteractive-role': [
|
||||
'error',
|
||||
{
|
||||
tr: ['none', 'presentation'],
|
||||
td: ['cell'], // TODO: Remove once https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/pull/937#issuecomment-1638128318 is addressed.
|
||||
canvas: ['img'],
|
||||
},
|
||||
],
|
||||
'jsxA11yPlugin/no-redundant-roles': [
|
||||
'error',
|
||||
{
|
||||
nav: ['navigation'], // default in eslint-plugin-jsx-a11y
|
||||
tbody: ['rowgroup'],
|
||||
thead: ['rowgroup'],
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
148
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/recommended.js
generated
vendored
Normal file
148
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/recommended.js
generated
vendored
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
const globals = require('globals')
|
||||
const github = require('../../plugin')
|
||||
const prettierPlugin = require('eslint-plugin-prettier')
|
||||
const eslintComments = require('eslint-plugin-eslint-comments')
|
||||
const importPlugin = require('eslint-plugin-import')
|
||||
const i18nTextPlugin = require('eslint-plugin-i18n-text')
|
||||
const noOnlyTestsPlugin = require('eslint-plugin-no-only-tests')
|
||||
const {fixupPluginRules} = require('@eslint/compat')
|
||||
|
||||
module.exports = {
|
||||
languageOptions: {
|
||||
ecmaVersion: 6,
|
||||
sourceType: 'module',
|
||||
globals: {
|
||||
...globals.es6,
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
prettierPlugin,
|
||||
eslintComments,
|
||||
importPlugin,
|
||||
'i18n-text': fixupPluginRules(i18nTextPlugin),
|
||||
noOnlyTestsPlugin,
|
||||
github: fixupPluginRules(github),
|
||||
},
|
||||
rules: {
|
||||
'constructor-super': 'error',
|
||||
'eslintComments/disable-enable-pair': 'off',
|
||||
'eslintComments/no-aggregating-enable': 'off',
|
||||
'eslintComments/no-duplicate-disable': 'error',
|
||||
'eslintComments/no-unlimited-disable': 'error',
|
||||
'eslintComments/no-unused-disable': 'error',
|
||||
'eslintComments/no-unused-enable': 'error',
|
||||
'eslintComments/no-use': ['error', {allow: ['eslint', 'eslint-disable-next-line', 'eslint-env', 'globals']}],
|
||||
'github/filenames-match-regex': 'error',
|
||||
'func-style': ['error', 'declaration', {allowArrowFunctions: true}],
|
||||
'github/array-foreach': 'error',
|
||||
'github/no-implicit-buggy-globals': 'error',
|
||||
'github/no-then': 'error',
|
||||
'github/no-dynamic-script-tag': 'error',
|
||||
'i18n-text/no-en': ['error'],
|
||||
'importPlugin/default': 'error',
|
||||
'importPlugin/export': 'error',
|
||||
'importPlugin/extensions': 'error',
|
||||
'importPlugin/first': 'error',
|
||||
'importPlugin/named': 'error',
|
||||
'importPlugin/namespace': 'error',
|
||||
'importPlugin/no-absolute-path': 'error',
|
||||
'importPlugin/no-amd': 'error',
|
||||
'importPlugin/no-anonymous-default-export': [
|
||||
'error',
|
||||
{
|
||||
allowAnonymousClass: false,
|
||||
allowAnonymousFunction: false,
|
||||
allowArray: true,
|
||||
allowArrowFunction: false,
|
||||
allowLiteral: true,
|
||||
allowObject: true,
|
||||
},
|
||||
],
|
||||
'importPlugin/no-commonjs': 'error',
|
||||
'importPlugin/no-deprecated': 'error',
|
||||
'importPlugin/no-duplicates': 'error',
|
||||
'importPlugin/no-dynamic-require': 'error',
|
||||
'importPlugin/no-extraneous-dependencies': [0, {devDependencies: false}],
|
||||
'importPlugin/no-mutable-exports': 'error',
|
||||
'importPlugin/no-named-as-default': 'error',
|
||||
'importPlugin/no-named-as-default-member': 'error',
|
||||
'importPlugin/no-namespace': 'error',
|
||||
'importPlugin/no-unresolved': 'error',
|
||||
'importPlugin/no-webpack-loader-syntax': 'error',
|
||||
'no-case-declarations': 'error',
|
||||
'no-class-assign': 'error',
|
||||
'no-compare-neg-zero': 'error',
|
||||
'no-cond-assign': 'error',
|
||||
'no-console': 'error',
|
||||
'no-const-assign': 'error',
|
||||
'no-constant-condition': 'error',
|
||||
'no-control-regex': 'error',
|
||||
'no-debugger': 'error',
|
||||
'no-delete-var': 'error',
|
||||
'no-dupe-args': 'error',
|
||||
'no-dupe-class-members': 'error',
|
||||
'no-dupe-keys': 'error',
|
||||
'no-duplicate-case': 'error',
|
||||
'no-empty': 'error',
|
||||
'no-empty-character-class': 'error',
|
||||
'no-empty-pattern': 'error',
|
||||
'no-ex-assign': 'error',
|
||||
'no-extra-boolean-cast': 'error',
|
||||
'no-fallthrough': 'error',
|
||||
'no-func-assign': 'error',
|
||||
'no-global-assign': 'error',
|
||||
'no-implicit-globals': 'error',
|
||||
'no-implied-eval': 'error',
|
||||
'no-inner-declarations': 'error',
|
||||
'no-invalid-regexp': 'error',
|
||||
'no-invalid-this': 'error',
|
||||
'no-irregular-whitespace': 'error',
|
||||
'no-new-symbol': 'error',
|
||||
'no-obj-calls': 'error',
|
||||
'no-octal': 'error',
|
||||
'noOnlyTestsPlugin/no-only-tests': [
|
||||
'error',
|
||||
{
|
||||
block: ['describe', 'it', 'context', 'test', 'tape', 'fixture', 'serial', 'suite'],
|
||||
},
|
||||
],
|
||||
'no-redeclare': 'error',
|
||||
'no-regex-spaces': 'error',
|
||||
'no-return-assign': 'error',
|
||||
'no-self-assign': 'error',
|
||||
'no-sequences': ['error'],
|
||||
'no-shadow': 'error',
|
||||
'no-sparse-arrays': 'error',
|
||||
'no-this-before-super': 'error',
|
||||
'no-throw-literal': 'error',
|
||||
'no-undef': 'error',
|
||||
'no-unreachable': 'error',
|
||||
'no-unsafe-finally': 'error',
|
||||
'no-unsafe-negation': 'error',
|
||||
'no-unused-labels': 'error',
|
||||
'no-unused-vars': 'error',
|
||||
'no-useless-concat': 'error',
|
||||
'no-useless-escape': 'error',
|
||||
'no-var': 'error',
|
||||
'object-shorthand': ['error', 'always', {avoidQuotes: true}],
|
||||
'one-var': ['error', 'never'],
|
||||
'prefer-const': 'error',
|
||||
'prefer-promise-reject-errors': 'error',
|
||||
'prefer-rest-params': 'error',
|
||||
'prefer-spread': 'error',
|
||||
'prefer-template': 'error',
|
||||
'prettierPlugin/prettier': 'error',
|
||||
'require-yield': 'error',
|
||||
'use-isnan': 'error',
|
||||
'valid-typeof': 'error',
|
||||
camelcase: ['error', {properties: 'always'}],
|
||||
eqeqeq: ['error', 'smart'],
|
||||
},
|
||||
settings: {
|
||||
'importPlugin/resolver': {
|
||||
node: {
|
||||
extensions: ['.js', '.ts'],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/typescript.js
generated
vendored
Normal file
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/flat/typescript.js
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
const eslint = require('@eslint/js')
|
||||
const tseslint = require('typescript-eslint')
|
||||
const escompatPlugin = require('eslint-plugin-escompat')
|
||||
const github = require('../../plugin')
|
||||
const {fixupPluginRules} = require('@eslint/compat')
|
||||
|
||||
module.exports = tseslint.config(eslint.configs.recommended, ...tseslint.configs.recommended, {
|
||||
languageOptions: {
|
||||
parser: tseslint.parser,
|
||||
},
|
||||
plugins: {'@typescript-eslint': tseslint.plugin, escompatPlugin, github: fixupPluginRules(github)},
|
||||
rules: {
|
||||
camelcase: 'off',
|
||||
'no-unused-vars': 'off',
|
||||
'no-shadow': 'off',
|
||||
'no-invalid-this': 'off',
|
||||
'@typescript-eslint/no-invalid-this': ['error'],
|
||||
'@typescript-eslint/no-shadow': ['error'],
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/array-type': ['error', {default: 'array-simple'}],
|
||||
'@typescript-eslint/no-use-before-define': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'error',
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
},
|
||||
})
|
||||
8
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/internal.js
generated
vendored
Normal file
8
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/internal.js
generated
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
module.exports = {
|
||||
plugins: ['github'],
|
||||
rules: {
|
||||
'github/authenticity-token': 'error',
|
||||
'github/js-class-name': 'error',
|
||||
'github/no-d-none': 'error',
|
||||
},
|
||||
}
|
||||
42
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/react.js
generated
vendored
Normal file
42
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/react.js
generated
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
module.exports = {
|
||||
parserOptions: {
|
||||
sourceType: 'module',
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
},
|
||||
plugins: ['github', 'jsx-a11y'],
|
||||
extends: ['plugin:jsx-a11y/recommended'],
|
||||
rules: {
|
||||
'jsx-a11y/role-supports-aria-props': 'off', // Override with github/a11y-role-supports-aria-props until https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/910 is resolved
|
||||
'github/a11y-aria-label-is-well-formatted': 'error',
|
||||
'github/a11y-no-visually-hidden-interactive-element': 'error',
|
||||
'github/a11y-no-title-attribute': 'error',
|
||||
'github/a11y-svg-has-accessible-name': 'error',
|
||||
'github/a11y-role-supports-aria-props': 'error',
|
||||
'jsx-a11y/no-aria-hidden-on-focusable': 'error',
|
||||
'jsx-a11y/no-autofocus': 'off',
|
||||
'jsx-a11y/anchor-ambiguous-text': [
|
||||
'error',
|
||||
{
|
||||
words: ['this', 'more', 'read here', 'read more'],
|
||||
},
|
||||
],
|
||||
'jsx-a11y/no-interactive-element-to-noninteractive-role': [
|
||||
'error',
|
||||
{
|
||||
tr: ['none', 'presentation'],
|
||||
td: ['cell'], // TODO: Remove once https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/pull/937#issuecomment-1638128318 is addressed.
|
||||
canvas: ['img'],
|
||||
},
|
||||
],
|
||||
'jsx-a11y/no-redundant-roles': [
|
||||
'error',
|
||||
{
|
||||
nav: ['navigation'], // default in eslint-plugin-jsx-a11y
|
||||
tbody: ['rowgroup'],
|
||||
thead: ['rowgroup'],
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
134
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/recommended.js
generated
vendored
Normal file
134
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/recommended.js
generated
vendored
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
module.exports = {
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
ecmaVersion: 6,
|
||||
},
|
||||
sourceType: 'module',
|
||||
},
|
||||
env: {
|
||||
es6: true,
|
||||
},
|
||||
plugins: ['github', 'prettier', 'eslint-comments', 'import', 'filenames', 'i18n-text', 'no-only-tests'],
|
||||
rules: {
|
||||
'constructor-super': 'error',
|
||||
'eslint-comments/disable-enable-pair': 'off',
|
||||
'eslint-comments/no-aggregating-enable': 'off',
|
||||
'eslint-comments/no-duplicate-disable': 'error',
|
||||
'eslint-comments/no-unlimited-disable': 'error',
|
||||
'eslint-comments/no-unused-disable': 'error',
|
||||
'eslint-comments/no-unused-enable': 'error',
|
||||
'eslint-comments/no-use': ['error', {allow: ['eslint', 'eslint-disable-next-line', 'eslint-env', 'globals']}],
|
||||
'filenames/match-regex': ['error', '^[a-z0-9-]+(.[a-z0-9-]+)?$'],
|
||||
'func-style': ['error', 'declaration', {allowArrowFunctions: true}],
|
||||
'github/array-foreach': 'error',
|
||||
'github/no-implicit-buggy-globals': 'error',
|
||||
'github/no-then': 'error',
|
||||
'github/no-dynamic-script-tag': 'error',
|
||||
'i18n-text/no-en': ['error'],
|
||||
'import/default': 'error',
|
||||
'import/export': 'error',
|
||||
'import/extensions': 'error',
|
||||
'import/first': 'error',
|
||||
'import/named': 'error',
|
||||
'import/namespace': 'error',
|
||||
'import/no-absolute-path': 'error',
|
||||
'import/no-amd': 'error',
|
||||
'import/no-anonymous-default-export': [
|
||||
'error',
|
||||
{
|
||||
allowAnonymousClass: false,
|
||||
allowAnonymousFunction: false,
|
||||
allowArray: true,
|
||||
allowArrowFunction: false,
|
||||
allowLiteral: true,
|
||||
allowObject: true,
|
||||
},
|
||||
],
|
||||
'import/no-commonjs': 'error',
|
||||
'import/no-deprecated': 'error',
|
||||
'import/no-duplicates': 'error',
|
||||
'import/no-dynamic-require': 'error',
|
||||
'import/no-extraneous-dependencies': [0, {devDependencies: false}],
|
||||
'import/no-mutable-exports': 'error',
|
||||
'import/no-named-as-default': 'error',
|
||||
'import/no-named-as-default-member': 'error',
|
||||
'import/no-namespace': 'error',
|
||||
'import/no-unresolved': 'error',
|
||||
'import/no-webpack-loader-syntax': 'error',
|
||||
'no-case-declarations': 'error',
|
||||
'no-class-assign': 'error',
|
||||
'no-compare-neg-zero': 'error',
|
||||
'no-cond-assign': 'error',
|
||||
'no-console': 'error',
|
||||
'no-const-assign': 'error',
|
||||
'no-constant-condition': 'error',
|
||||
'no-control-regex': 'error',
|
||||
'no-debugger': 'error',
|
||||
'no-delete-var': 'error',
|
||||
'no-dupe-args': 'error',
|
||||
'no-dupe-class-members': 'error',
|
||||
'no-dupe-keys': 'error',
|
||||
'no-duplicate-case': 'error',
|
||||
'no-empty': 'error',
|
||||
'no-empty-character-class': 'error',
|
||||
'no-empty-pattern': 'error',
|
||||
'no-ex-assign': 'error',
|
||||
'no-extra-boolean-cast': 'error',
|
||||
'no-fallthrough': 'error',
|
||||
'no-func-assign': 'error',
|
||||
'no-global-assign': 'error',
|
||||
'no-implicit-globals': 'error',
|
||||
'no-implied-eval': 'error',
|
||||
'no-inner-declarations': 'error',
|
||||
'no-invalid-regexp': 'error',
|
||||
'no-invalid-this': 'error',
|
||||
'no-irregular-whitespace': 'error',
|
||||
'no-new-symbol': 'error',
|
||||
'no-obj-calls': 'error',
|
||||
'no-octal': 'error',
|
||||
'no-only-tests/no-only-tests': [
|
||||
'error',
|
||||
{
|
||||
block: ['describe', 'it', 'context', 'test', 'tape', 'fixture', 'serial', 'suite'],
|
||||
},
|
||||
],
|
||||
'no-redeclare': 'error',
|
||||
'no-regex-spaces': 'error',
|
||||
'no-return-assign': 'error',
|
||||
'no-self-assign': 'error',
|
||||
'no-sequences': ['error'],
|
||||
'no-shadow': 'error',
|
||||
'no-sparse-arrays': 'error',
|
||||
'no-this-before-super': 'error',
|
||||
'no-throw-literal': 'error',
|
||||
'no-undef': 'error',
|
||||
'no-unreachable': 'error',
|
||||
'no-unsafe-finally': 'error',
|
||||
'no-unsafe-negation': 'error',
|
||||
'no-unused-labels': 'error',
|
||||
'no-unused-vars': 'error',
|
||||
'no-useless-concat': 'error',
|
||||
'no-useless-escape': 'error',
|
||||
'no-var': 'error',
|
||||
'object-shorthand': ['error', 'always', {avoidQuotes: true}],
|
||||
'one-var': ['error', 'never'],
|
||||
'prefer-const': 'error',
|
||||
'prefer-promise-reject-errors': 'error',
|
||||
'prefer-rest-params': 'error',
|
||||
'prefer-spread': 'error',
|
||||
'prefer-template': 'error',
|
||||
'prettier/prettier': 'error',
|
||||
'require-yield': 'error',
|
||||
'use-isnan': 'error',
|
||||
'valid-typeof': 'error',
|
||||
camelcase: ['error', {properties: 'always'}],
|
||||
eqeqeq: ['error', 'smart'],
|
||||
},
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
node: {
|
||||
extensions: ['.js', '.ts'],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/typescript.js
generated
vendored
Normal file
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/configs/typescript.js
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
module.exports = {
|
||||
extends: ['plugin:@typescript-eslint/recommended', 'prettier', 'plugin:escompat/typescript-2020'],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint', 'escompat', 'github'],
|
||||
rules: {
|
||||
camelcase: 'off',
|
||||
'no-unused-vars': 'off',
|
||||
'no-shadow': 'off',
|
||||
'no-invalid-this': 'off',
|
||||
'@typescript-eslint/no-invalid-this': ['error'],
|
||||
'@typescript-eslint/no-shadow': ['error'],
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/array-type': ['error', {default: 'array-simple'}],
|
||||
'@typescript-eslint/no-use-before-define': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'error',
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
},
|
||||
}
|
||||
86
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/formatters/stylish-fixes.js
generated
vendored
Normal file
86
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/formatters/stylish-fixes.js
generated
vendored
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
'use strict'
|
||||
|
||||
const childProcess = require('child_process')
|
||||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
let SourceCodeFixer = null
|
||||
try {
|
||||
SourceCodeFixer = require('eslint/lib/linter/source-code-fixer')
|
||||
} catch {
|
||||
SourceCodeFixer = require('eslint/lib/util/source-code-fixer')
|
||||
}
|
||||
const getRuleURI = require('eslint-rule-documentation')
|
||||
|
||||
module.exports = function (results) {
|
||||
let output = '\n'
|
||||
let errors = 0
|
||||
let warnings = 0
|
||||
const rootPath = process.cwd()
|
||||
|
||||
for (const result of results) {
|
||||
const messages = result.messages
|
||||
|
||||
if (messages.length === 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
errors += result.errorCount
|
||||
warnings += result.warningCount
|
||||
|
||||
const relativePath = path.relative(rootPath, result.filePath)
|
||||
|
||||
output += `${relativePath}\n`
|
||||
|
||||
for (const message of messages) {
|
||||
output += `${message.line}:${message.column} ${message.ruleId || ''}`
|
||||
if (message.ruleId) {
|
||||
const ruleURI = getRuleURI(message.ruleId)
|
||||
if (ruleURI.found) {
|
||||
output += ` (${ruleURI.url})`
|
||||
}
|
||||
}
|
||||
output += `\n\t${message.message}\n`
|
||||
}
|
||||
|
||||
if (messages.some(msg => msg.fix)) {
|
||||
const fixResult = SourceCodeFixer.applyFixes(result.source, messages)
|
||||
output += `\n\n$ eslint --fix ${relativePath}\n`
|
||||
output += diff(result.source, fixResult.output)
|
||||
}
|
||||
|
||||
output += '\n\n'
|
||||
}
|
||||
|
||||
const total = errors + warnings
|
||||
|
||||
if (total > 0) {
|
||||
output += [
|
||||
'\u2716 ',
|
||||
total,
|
||||
pluralize(' problem', total),
|
||||
' (',
|
||||
errors,
|
||||
pluralize(' error', errors),
|
||||
', ',
|
||||
warnings,
|
||||
pluralize(' warning', warnings),
|
||||
')\n',
|
||||
].join('')
|
||||
}
|
||||
|
||||
return total > 0 ? output : ''
|
||||
}
|
||||
|
||||
function pluralize(word, count) {
|
||||
return count === 1 ? word : `${word}s`
|
||||
}
|
||||
|
||||
function diff(a, b) {
|
||||
const aPath = path.join(os.tmpdir(), 'a.js')
|
||||
const bPath = path.join(os.tmpdir(), 'p.js')
|
||||
fs.writeFileSync(aPath, a, {encoding: 'utf8'})
|
||||
fs.writeFileSync(bPath, b, {encoding: 'utf8'})
|
||||
const result = childProcess.spawnSync('diff', ['-U5', aPath, bPath], {encoding: 'utf8'})
|
||||
return result.stdout.split('\n').slice(2).join('\n')
|
||||
}
|
||||
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/index.js
generated
vendored
Normal file
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
const github = require('./plugin')
|
||||
|
||||
const getFlatConfig = () => ({
|
||||
browser: require('./configs/flat/browser'),
|
||||
internal: require('./configs/flat/internal'),
|
||||
recommended: require('./configs/flat/recommended'),
|
||||
typescript: require('./configs/flat/typescript'),
|
||||
react: require('./configs/flat/react'),
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
rules: github.rules,
|
||||
configs: {
|
||||
browser: require('./configs/browser'),
|
||||
internal: require('./configs/internal'),
|
||||
recommended: require('./configs/recommended'),
|
||||
typescript: require('./configs/typescript'),
|
||||
react: require('./configs/react'),
|
||||
},
|
||||
getFlatConfigs: getFlatConfig,
|
||||
}
|
||||
32
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/plugin.js
generated
vendored
Normal file
32
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/plugin.js
generated
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
const {name, version} = require('../package.json')
|
||||
|
||||
module.exports = {
|
||||
meta: {name, version},
|
||||
rules: {
|
||||
'a11y-no-visually-hidden-interactive-element': require('./rules/a11y-no-visually-hidden-interactive-element'),
|
||||
'a11y-no-generic-link-text': require('./rules/a11y-no-generic-link-text'),
|
||||
'a11y-no-title-attribute': require('./rules/a11y-no-title-attribute'),
|
||||
'a11y-aria-label-is-well-formatted': require('./rules/a11y-aria-label-is-well-formatted'),
|
||||
'a11y-role-supports-aria-props': require('./rules/a11y-role-supports-aria-props'),
|
||||
'a11y-svg-has-accessible-name': require('./rules/a11y-svg-has-accessible-name'),
|
||||
'array-foreach': require('./rules/array-foreach'),
|
||||
'async-currenttarget': require('./rules/async-currenttarget'),
|
||||
'async-preventdefault': require('./rules/async-preventdefault'),
|
||||
'authenticity-token': require('./rules/authenticity-token'),
|
||||
'filenames-match-regex': require('./rules/filenames-match-regex'),
|
||||
'get-attribute': require('./rules/get-attribute'),
|
||||
'js-class-name': require('./rules/js-class-name'),
|
||||
'no-blur': require('./rules/no-blur'),
|
||||
'no-d-none': require('./rules/no-d-none'),
|
||||
'no-dataset': require('./rules/no-dataset'),
|
||||
'no-implicit-buggy-globals': require('./rules/no-implicit-buggy-globals'),
|
||||
'no-inner-html': require('./rules/no-inner-html'),
|
||||
'no-innerText': require('./rules/no-innerText'),
|
||||
'no-dynamic-script-tag': require('./rules/no-dynamic-script-tag'),
|
||||
'no-then': require('./rules/no-then'),
|
||||
'no-useless-passive': require('./rules/no-useless-passive'),
|
||||
'prefer-observers': require('./rules/prefer-observers'),
|
||||
'require-passive-events': require('./rules/require-passive-events'),
|
||||
'unescaped-html-literal': require('./rules/unescaped-html-literal'),
|
||||
},
|
||||
}
|
||||
31
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-aria-label-is-well-formatted.js
generated
vendored
Normal file
31
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-aria-label-is-well-formatted.js
generated
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
const {getProp} = require('jsx-ast-utils')
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: '[aria-label] text should be formatted as you would visual text.',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
JSXOpeningElement: node => {
|
||||
const prop = getProp(node.attributes, 'aria-label')
|
||||
if (!prop) return
|
||||
|
||||
const propValue = prop.value
|
||||
if (propValue.type !== 'Literal') return
|
||||
|
||||
const ariaLabel = propValue.value
|
||||
if (ariaLabel.match(/^[a-z]+.*$/)) {
|
||||
context.report({
|
||||
node,
|
||||
message: '[aria-label] text should be formatted the same as you would visual text. Use sentence case.',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
73
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-generic-link-text.js
generated
vendored
Normal file
73
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-generic-link-text.js
generated
vendored
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
const {getProp, getPropValue} = require('jsx-ast-utils')
|
||||
const {getElementType} = require('../utils/get-element-type')
|
||||
|
||||
const bannedLinkText = ['read more', 'here', 'click here', 'learn more', 'more']
|
||||
|
||||
/* Downcase and strip extra whitespaces and punctuation */
|
||||
const stripAndDowncaseText = text => {
|
||||
return text
|
||||
.toLowerCase()
|
||||
.replace(/[.,/#!$%^&*;:{}=\-_`~()]/g, '')
|
||||
.replace(/\s{2,}/g, ' ')
|
||||
.trim()
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'disallow generic link text',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
deprecated: true,
|
||||
replacedBy: ['jsx-a11y/anchor-ambiguous-text'],
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
JSXOpeningElement: node => {
|
||||
const elementType = getElementType(context, node)
|
||||
|
||||
if (elementType !== 'a') return
|
||||
if (getProp(node.attributes, 'aria-labelledby')) return
|
||||
|
||||
let cleanTextContent // text content we can reliably fetch
|
||||
|
||||
const parent = node.parent
|
||||
let jsxTextNode
|
||||
if (parent.children && parent.children.length > 0 && parent.children[0].type === 'JSXText') {
|
||||
jsxTextNode = parent.children[0]
|
||||
cleanTextContent = stripAndDowncaseText(parent.children[0].value)
|
||||
}
|
||||
|
||||
const ariaLabel = getPropValue(getProp(node.attributes, 'aria-label'))
|
||||
const cleanAriaLabelValue = ariaLabel && stripAndDowncaseText(ariaLabel)
|
||||
|
||||
if (ariaLabel) {
|
||||
if (bannedLinkText.includes(cleanAriaLabelValue)) {
|
||||
context.report({
|
||||
node,
|
||||
message:
|
||||
'Avoid setting generic link text like `Here`, `Click here`, `Read more`. Make sure that your link text is both descriptive and concise.',
|
||||
})
|
||||
}
|
||||
if (cleanTextContent && !cleanAriaLabelValue.includes(cleanTextContent)) {
|
||||
context.report({
|
||||
node,
|
||||
message: 'When using ARIA to set a more descriptive text, it must fully contain the visible label.',
|
||||
})
|
||||
}
|
||||
} else {
|
||||
if (cleanTextContent) {
|
||||
if (!bannedLinkText.includes(cleanTextContent)) return
|
||||
context.report({
|
||||
node: jsxTextNode,
|
||||
message:
|
||||
'Avoid setting generic link text like `Here`, `Click here`, `Read more`. Make sure that your link text is both descriptive and concise.',
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
66
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-title-attribute.js
generated
vendored
Normal file
66
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-title-attribute.js
generated
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
const {getProp, getPropValue} = require('jsx-ast-utils')
|
||||
const {getElementType} = require('../utils/get-element-type')
|
||||
|
||||
const SEMANTIC_ELEMENTS = [
|
||||
'a',
|
||||
'button',
|
||||
'summary',
|
||||
'select',
|
||||
'option',
|
||||
'textarea',
|
||||
'input',
|
||||
'span',
|
||||
'div',
|
||||
'p',
|
||||
'h1',
|
||||
'h2',
|
||||
'h3',
|
||||
'h4',
|
||||
'h5',
|
||||
'h6',
|
||||
'details',
|
||||
'summary',
|
||||
'dialog',
|
||||
'tr',
|
||||
'th',
|
||||
'td',
|
||||
'label',
|
||||
]
|
||||
|
||||
const ifSemanticElement = (context, node) => {
|
||||
const elementType = getElementType(context, node.openingElement, true)
|
||||
|
||||
for (const semanticElement of SEMANTIC_ELEMENTS) {
|
||||
if (elementType === semanticElement) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'Guards against developers using the title attribute',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
JSXElement: node => {
|
||||
const elementType = getElementType(context, node.openingElement, true)
|
||||
if (elementType !== `iframe` && ifSemanticElement(context, node)) {
|
||||
const titleProp = getPropValue(getProp(node.openingElement.attributes, `title`))
|
||||
if (titleProp) {
|
||||
context.report({
|
||||
node,
|
||||
message: 'The title attribute is not accessible and should never be used unless for an `<iframe>`.',
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
85
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-visually-hidden-interactive-element.js
generated
vendored
Normal file
85
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-no-visually-hidden-interactive-element.js
generated
vendored
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
const {getProp, getLiteralPropValue} = require('jsx-ast-utils')
|
||||
const {getElementType} = require('../utils/get-element-type')
|
||||
const {generateObjSchema} = require('eslint-plugin-jsx-a11y/lib/util/schemas')
|
||||
|
||||
const defaultClassName = 'sr-only'
|
||||
const defaultcomponentName = 'VisuallyHidden'
|
||||
|
||||
const schema = generateObjSchema({
|
||||
className: {type: 'string'},
|
||||
componentName: {type: 'string'},
|
||||
})
|
||||
|
||||
/** Note: we are not including input elements at this time
|
||||
* because a visually hidden input field might cause a false positive.
|
||||
* (e.g. fileUpload https://github.com/primer/react/pull/3492)
|
||||
*/
|
||||
const INTERACTIVE_ELEMENTS = ['a', 'button', 'summary', 'select', 'option', 'textarea']
|
||||
|
||||
const checkIfInteractiveElement = (context, node) => {
|
||||
const elementType = getElementType(context, node.openingElement)
|
||||
|
||||
for (const interactiveElement of INTERACTIVE_ELEMENTS) {
|
||||
if (elementType === interactiveElement) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// if the node is visually hidden recursively check if it has interactive children
|
||||
const checkIfVisuallyHiddenAndInteractive = (context, options, node, isParentVisuallyHidden) => {
|
||||
const {className, componentName} = options
|
||||
if (node.type === 'JSXElement') {
|
||||
const classes = getLiteralPropValue(getProp(node.openingElement.attributes, 'className'))
|
||||
const isVisuallyHiddenElement = node.openingElement.name.name === componentName
|
||||
let hasSROnlyClass = false
|
||||
if (classes != null) {
|
||||
hasSROnlyClass = classes.includes(className)
|
||||
}
|
||||
let isHidden = false
|
||||
if (hasSROnlyClass || isVisuallyHiddenElement || !!isParentVisuallyHidden) {
|
||||
if (checkIfInteractiveElement(context, node)) {
|
||||
return true
|
||||
}
|
||||
isHidden = true
|
||||
}
|
||||
if (node.children && node.children.length > 0) {
|
||||
return (
|
||||
typeof node.children?.find(child =>
|
||||
checkIfVisuallyHiddenAndInteractive(context, options, child, !!isParentVisuallyHidden || isHidden),
|
||||
) !== 'undefined'
|
||||
)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'Ensures that interactive elements are not visually hidden',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [schema],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const {options} = context
|
||||
const config = options[0] || {}
|
||||
const className = config.className || defaultClassName
|
||||
const componentName = config.componentName || defaultcomponentName
|
||||
|
||||
return {
|
||||
JSXElement: node => {
|
||||
if (checkIfVisuallyHiddenAndInteractive(context, {className, componentName}, node, false)) {
|
||||
context.report({
|
||||
node,
|
||||
message:
|
||||
'Avoid visually hidding interactive elements. Visually hiding interactive elements can be confusing to sighted keyboard users as it appears their focus has been lost when they navigate to the hidden element.',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
61
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-role-supports-aria-props.js
generated
vendored
Normal file
61
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-role-supports-aria-props.js
generated
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
// @ts-check
|
||||
const {aria, roles} = require('aria-query')
|
||||
const {getPropValue, propName} = require('jsx-ast-utils')
|
||||
const {getRole} = require('../utils/get-role')
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description:
|
||||
'Enforce that elements with explicit or implicit roles defined contain only `aria-*` properties supported by that `role`.',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
JSXOpeningElement(node) {
|
||||
// Get the element’s explicit or implicit role
|
||||
const role = getRole(context, node)
|
||||
|
||||
// Return early if role could not be determined
|
||||
if (!role) return
|
||||
|
||||
// Get allowed ARIA attributes:
|
||||
// - From the role itself
|
||||
let allowedProps = Object.keys(roles.get(role)?.props || {})
|
||||
// - From parent roles
|
||||
for (const parentRole of roles.get(role)?.superClass.flat() ?? []) {
|
||||
allowedProps = allowedProps.concat(Object.keys(roles.get(parentRole)?.props || {}))
|
||||
}
|
||||
// Dedupe, for performance
|
||||
allowedProps = Array.from(new Set(allowedProps))
|
||||
|
||||
// Get prohibited ARIA attributes:
|
||||
// - From the role itself
|
||||
let prohibitedProps = roles.get(role)?.prohibitedProps || []
|
||||
// - From parent roles
|
||||
for (const parentRole of roles.get(role)?.superClass.flat() ?? []) {
|
||||
prohibitedProps = prohibitedProps.concat(roles.get(parentRole)?.prohibitedProps || [])
|
||||
}
|
||||
// - From comparing allowed vs all ARIA attributes
|
||||
prohibitedProps = prohibitedProps.concat(aria.keys().filter(x => !allowedProps.includes(x)))
|
||||
// Dedupe, for performance
|
||||
prohibitedProps = Array.from(new Set(prohibitedProps))
|
||||
|
||||
for (const prop of node.attributes) {
|
||||
// Return early if prohibited ARIA attribute is set to an ignorable value
|
||||
if (getPropValue(prop) == null || prop.type === 'JSXSpreadAttribute') return
|
||||
|
||||
if (prohibitedProps?.includes(propName(prop))) {
|
||||
context.report({
|
||||
node,
|
||||
message: `The attribute ${propName(prop)} is not supported by the role ${role}.`,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
45
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-svg-has-accessible-name.js
generated
vendored
Normal file
45
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/a11y-svg-has-accessible-name.js
generated
vendored
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
const {hasProp} = require('jsx-ast-utils')
|
||||
const {getElementType} = require('../utils/get-element-type')
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'SVGs must have an accessible name',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
JSXOpeningElement: node => {
|
||||
const elementType = getElementType(context, node)
|
||||
if (elementType !== 'svg') return
|
||||
|
||||
// Check if there is a nested title element that is the first non-whitespace child of the `<svg>`
|
||||
const childrenWithoutWhitespace = node.parent.children?.filter(({type, value}) =>
|
||||
type === 'JSXText' ? value.trim() !== '' : type !== 'JSXText',
|
||||
)
|
||||
|
||||
const hasNestedTitleAsFirstChild =
|
||||
childrenWithoutWhitespace?.[0]?.type === 'JSXElement' &&
|
||||
childrenWithoutWhitespace?.[0]?.openingElement?.name?.name === 'title'
|
||||
|
||||
// Check if `aria-label` or `aria-labelledby` is set
|
||||
const hasAccessibleName = hasProp(node.attributes, 'aria-label') || hasProp(node.attributes, 'aria-labelledby')
|
||||
|
||||
// Check if SVG is decorative
|
||||
const isDecorative =
|
||||
hasProp(node.attributes, 'role', 'presentation') || hasProp(node.attributes, 'aria-hidden', 'true')
|
||||
|
||||
if (elementType === 'svg' && !hasAccessibleName && !isDecorative && !hasNestedTitleAsFirstChild) {
|
||||
context.report({
|
||||
node,
|
||||
message:
|
||||
'`<svg>` must have an accessible name. Set `aria-label` or `aria-labelledby`, or nest a `<title>` element. However, if the `<svg>` is purely decorative, hide it with `aria-hidden="true"` or `role="presentation"`.',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
20
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/array-foreach.js
generated
vendored
Normal file
20
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/array-foreach.js
generated
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'enforce `for..of` loops over `Array.forEach`',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
CallExpression(node) {
|
||||
if (node.callee.property && node.callee.property.name === 'forEach') {
|
||||
context.report({node, message: 'Prefer for...of instead of Array.forEach'})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/async-currenttarget.js
generated
vendored
Normal file
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/async-currenttarget.js
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow `event.currentTarget` calls inside of async functions',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const scopeDidWait = new WeakSet()
|
||||
|
||||
return {
|
||||
AwaitExpression() {
|
||||
scopeDidWait.add(context.getScope(), true)
|
||||
},
|
||||
MemberExpression(node) {
|
||||
if (node.property && node.property.name === 'currentTarget') {
|
||||
const scope = context.getScope()
|
||||
if (scope.block.async && scopeDidWait.has(scope)) {
|
||||
context.report({node, message: 'event.currentTarget inside an async function is error prone'})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/async-preventdefault.js
generated
vendored
Normal file
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/async-preventdefault.js
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow `event.preventDefault` calls inside of async functions',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const scopeDidWait = new WeakSet()
|
||||
|
||||
return {
|
||||
AwaitExpression() {
|
||||
scopeDidWait.add(context.getScope(), true)
|
||||
},
|
||||
CallExpression(node) {
|
||||
if (node.callee.property && node.callee.property.name === 'preventDefault') {
|
||||
const scope = context.getScope()
|
||||
if (scope.block.async && scopeDidWait.has(scope)) {
|
||||
context.report({node, message: 'event.preventDefault() inside an async function is error prone'})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
30
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/authenticity-token.js
generated
vendored
Normal file
30
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/authenticity-token.js
generated
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow usage of CSRF tokens in JavaScript',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
function checkAuthenticityTokenUsage(node, str) {
|
||||
if (str.includes('authenticity_token')) {
|
||||
context.report({
|
||||
node,
|
||||
message:
|
||||
'Form CSRF tokens (authenticity tokens) should not be created in JavaScript and their values should not be used directly for XHR requests.',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
Literal(node) {
|
||||
if (typeof node.value === 'string') {
|
||||
checkAuthenticityTokenUsage(node, node.value)
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
52
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/filenames-match-regex.js
generated
vendored
Normal file
52
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/filenames-match-regex.js
generated
vendored
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
// This is adapted from https://github.com/selaux/eslint-plugin-filenames since it's no longer actively maintained
|
||||
// and needed a fix for eslint v9
|
||||
const path = require('path')
|
||||
const parseFilename = require('../utils/parse-filename')
|
||||
const getExportedName = require('../utils/get-exported-name')
|
||||
const isIgnoredFilename = require('../utils/is-ignored-filename')
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'ensure filenames match a regex naming convention',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: {
|
||||
type: 'array',
|
||||
minItems: 0,
|
||||
maxItems: 1,
|
||||
items: [
|
||||
{
|
||||
type: 'string',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
create(context) {
|
||||
// GitHub's default is kebab case or one hump camel case
|
||||
const defaultRegexp = /^[a-z0-9-]+(.[a-z0-9-]+)?$/
|
||||
const conventionRegexp = context.options[0] ? new RegExp(context.options[0]) : defaultRegexp
|
||||
const ignoreExporting = context.options[1] ? context.options[1] : false
|
||||
|
||||
return {
|
||||
Program(node) {
|
||||
const filename = context.getFilename()
|
||||
const absoluteFilename = path.resolve(filename)
|
||||
const parsed = parseFilename(absoluteFilename)
|
||||
const shouldIgnore = isIgnoredFilename(filename)
|
||||
const isExporting = Boolean(getExportedName(node))
|
||||
const matchesRegex = conventionRegexp.test(parsed.name)
|
||||
|
||||
if (shouldIgnore) return
|
||||
if (ignoreExporting && isExporting) return
|
||||
if (!matchesRegex) {
|
||||
context.report(node, "Filename '{{name}}' does not match the regex naming convention.", {
|
||||
name: parsed.base,
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
53
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/get-attribute.js
generated
vendored
Normal file
53
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/get-attribute.js
generated
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
const svgElementAttributes = require('svg-element-attributes')
|
||||
|
||||
const attributeCalls = /^(get|has|set|remove)Attribute$/
|
||||
const validAttributeName = /^[a-z][a-z0-9-]*$/
|
||||
|
||||
// these are common SVG attributes that *must* have the correct case to work
|
||||
const camelCaseAttributes = Object.values(svgElementAttributes)
|
||||
.reduce((all, elementAttrs) => all.concat(elementAttrs), [])
|
||||
.filter(name => !validAttributeName.test(name))
|
||||
|
||||
const validSVGAttributeSet = new Set(camelCaseAttributes)
|
||||
|
||||
// lowercase variants of camelCase SVG attributes are probably an error
|
||||
const invalidSVGAttributeSet = new Set(camelCaseAttributes.map(name => name.toLowerCase()))
|
||||
|
||||
function isValidAttribute(name) {
|
||||
return validSVGAttributeSet.has(name) || (validAttributeName.test(name) && !invalidSVGAttributeSet.has(name))
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow wrong usage of attribute names',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
fixable: 'code',
|
||||
schema: [],
|
||||
},
|
||||
create(context) {
|
||||
return {
|
||||
CallExpression(node) {
|
||||
if (!node.callee.property) return
|
||||
|
||||
const calleeName = node.callee.property.name
|
||||
if (!attributeCalls.test(calleeName)) return
|
||||
|
||||
const attributeNameNode = node.arguments[0]
|
||||
if (!attributeNameNode) return
|
||||
|
||||
if (!isValidAttribute(attributeNameNode.value)) {
|
||||
context.report({
|
||||
node: attributeNameNode,
|
||||
message: 'Attributes should be lowercase and hyphen separated, or part of the SVG whitelist.',
|
||||
fix(fixer) {
|
||||
return fixer.replaceText(attributeNameNode, `'${attributeNameNode.value.toLowerCase()}'`)
|
||||
},
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
57
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/js-class-name.js
generated
vendored
Normal file
57
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/js-class-name.js
generated
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'enforce a naming convention for js- prefixed classes',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const allJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*/g
|
||||
const validJsClassNameRegexp = /^js(-[a-z0-9]+)+$/g
|
||||
const endWithJsClassNameRegexp = /\bjs-[_a-zA-Z0-9-]*$/g
|
||||
|
||||
function checkStringFormat(node, str) {
|
||||
const matches = str.match(allJsClassNameRegexp) || []
|
||||
for (const match of matches) {
|
||||
if (!match.match(validJsClassNameRegexp)) {
|
||||
context.report({node, message: 'js- class names should be lowercase and only contain dashes.'})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkStringEndsWithJSClassName(node, str) {
|
||||
if (str.match(endWithJsClassNameRegexp)) {
|
||||
context.report({node, message: 'js- class names should be statically defined.'})
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
Literal(node) {
|
||||
if (typeof node.value === 'string') {
|
||||
checkStringFormat(node, node.value)
|
||||
|
||||
if (
|
||||
node.parent &&
|
||||
node.parent.type === 'BinaryExpression' &&
|
||||
node.parent.operator === '+' &&
|
||||
node.parent.left.value
|
||||
) {
|
||||
checkStringEndsWithJSClassName(node.parent.left, node.parent.left.value)
|
||||
}
|
||||
}
|
||||
},
|
||||
TemplateLiteral(node) {
|
||||
for (const quasi of node.quasis) {
|
||||
checkStringFormat(quasi, quasi.value.raw)
|
||||
|
||||
if (quasi.tail === false) {
|
||||
checkStringEndsWithJSClassName(quasi, quasi.value.raw)
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
19
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-blur.js
generated
vendored
Normal file
19
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-blur.js
generated
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow usage of `Element.prototype.blur()`',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
create(context) {
|
||||
return {
|
||||
CallExpression(node) {
|
||||
if (node.callee.property && node.callee.property.name === 'blur') {
|
||||
context.report({node, message: 'Do not use element.blur(), instead restore the focus of a previous element.'})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
31
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-d-none.js
generated
vendored
Normal file
31
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-d-none.js
generated
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow usage the `d-none` CSS class',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
create(context) {
|
||||
return {
|
||||
CallExpression(node) {
|
||||
if (
|
||||
node.callee.type === 'MemberExpression' &&
|
||||
node.callee.object.property &&
|
||||
node.callee.object.property.name === 'classList'
|
||||
) {
|
||||
const invalidArgument = node.arguments.some(arg => {
|
||||
return arg.type === 'Literal' && arg.value === 'd-none'
|
||||
})
|
||||
if (invalidArgument) {
|
||||
context.report({
|
||||
node,
|
||||
message: 'Prefer hidden property to d-none class',
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
20
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-dataset.js
generated
vendored
Normal file
20
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-dataset.js
generated
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'enforce usage of `Element.prototype.getAttribute` instead of `Element.prototype.datalist`',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
MemberExpression(node) {
|
||||
if (node.property && node.property.name === 'dataset') {
|
||||
context.report({node, message: "Use getAttribute('data-your-attribute') instead of dataset."})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
29
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-dynamic-script-tag.js
generated
vendored
Normal file
29
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-dynamic-script-tag.js
generated
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'disallow creating dynamic script tags',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
'CallExpression[callee.property.name="createElement"][arguments.length > 0]': function (node) {
|
||||
if (node.arguments[0].value !== 'script') return
|
||||
|
||||
context.report({
|
||||
node: node.arguments[0],
|
||||
message: "Don't create dynamic script tags, add them in the server template instead.",
|
||||
})
|
||||
},
|
||||
'AssignmentExpression[left.property.name="type"][right.value="text/javascript"]': function (node) {
|
||||
context.report({
|
||||
node: node.right,
|
||||
message: "Don't create dynamic script tags, add them in the server template instead.",
|
||||
})
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
36
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-implicit-buggy-globals.js
generated
vendored
Normal file
36
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-implicit-buggy-globals.js
generated
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow implicit global variables',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const sourceCode = context.sourceCode ?? context.getSourceCode()
|
||||
return {
|
||||
Program(node) {
|
||||
const scope = sourceCode.getScope(node) ? sourceCode.getScope(node) : context.getScope()
|
||||
|
||||
for (const variable of scope.variables) {
|
||||
if (variable.writeable) {
|
||||
return
|
||||
}
|
||||
|
||||
for (const def of variable.defs) {
|
||||
if (
|
||||
def.type === 'FunctionName' ||
|
||||
def.type === 'ClassName' ||
|
||||
(def.type === 'Variable' && def.parent.kind === 'const') ||
|
||||
(def.type === 'Variable' && def.parent.kind === 'let')
|
||||
) {
|
||||
context.report({node: def.node, message: 'Implicit global variable, assign as global property instead.'})
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-inner-html.js
generated
vendored
Normal file
21
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-inner-html.js
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow `Element.prototype.innerHTML` in favor of `Element.prototype.textContent`',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
'MemberExpression[property.name=innerHTML]': function (node) {
|
||||
context.report({
|
||||
node: node.property,
|
||||
message: 'Using innerHTML poses a potential security risk and should not be used. Prefer using textContent.',
|
||||
})
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
34
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-innerText.js
generated
vendored
Normal file
34
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-innerText.js
generated
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow `Element.prototype.innerText` in favor of `Element.prototype.textContent`',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
fixable: 'code',
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
MemberExpression(node) {
|
||||
// If the member expression is part of a call expression like `.innerText()` then it is not the same
|
||||
// as the `Element.innerText` property, and should not trigger a warning
|
||||
if (node.parent.type === 'CallExpression') return
|
||||
|
||||
if (node.property && node.property.name === 'innerText') {
|
||||
context.report({
|
||||
meta: {
|
||||
fixable: 'code',
|
||||
},
|
||||
node: node.property,
|
||||
message: 'Prefer textContent to innerText',
|
||||
fix(fixer) {
|
||||
return fixer.replaceText(node.property, 'textContent')
|
||||
},
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
22
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-then.js
generated
vendored
Normal file
22
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-then.js
generated
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'enforce using `async/await` syntax over Promises',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
MemberExpression(node) {
|
||||
if (node.property && node.property.name === 'then') {
|
||||
context.report({node: node.property, message: 'Prefer async/await to Promise.then()'})
|
||||
} else if (node.property && node.property.name === 'catch') {
|
||||
context.report({node: node.property, message: 'Prefer async/await to Promise.catch()'})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
59
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-useless-passive.js
generated
vendored
Normal file
59
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/no-useless-passive.js
generated
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
const passiveEventListenerNames = new Set([
|
||||
'touchstart',
|
||||
'touchmove',
|
||||
'touchenter',
|
||||
'touchend',
|
||||
'touchleave',
|
||||
'wheel',
|
||||
'mousewheel',
|
||||
])
|
||||
|
||||
const propIsPassiveTrue = prop => prop.key && prop.key.name === 'passive' && prop.value && prop.value.value === true
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'disallow marking a event handler as passive when it has no effect',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
fixable: 'code',
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
['CallExpression[callee.property.name="addEventListener"]']: function (node) {
|
||||
const [name, listener, options] = node.arguments
|
||||
if (name.type !== 'Literal') return
|
||||
if (passiveEventListenerNames.has(name.value)) return
|
||||
if (options && options.type === 'ObjectExpression') {
|
||||
const i = options.properties.findIndex(propIsPassiveTrue)
|
||||
if (i === -1) return
|
||||
const passiveProp = options.properties[i]
|
||||
const l = options.properties.length
|
||||
const source = context.getSourceCode()
|
||||
context.report({
|
||||
node: passiveProp,
|
||||
message: `"${name.value}" event listener is not cancellable and so \`passive: true\` does nothing.`,
|
||||
fix(fixer) {
|
||||
const removals = []
|
||||
if (l === 1) {
|
||||
removals.push(options)
|
||||
removals.push(...source.getTokensBetween(listener, options))
|
||||
} else {
|
||||
removals.push(passiveProp)
|
||||
if (i > 0) {
|
||||
removals.push(...source.getTokensBetween(options.properties[i - 1], passiveProp))
|
||||
} else {
|
||||
removals.push(...source.getTokensBetween(passiveProp, options.properties[i + 1]))
|
||||
}
|
||||
}
|
||||
return removals.map(t => fixer.remove(t))
|
||||
},
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/prefer-observers.js
generated
vendored
Normal file
28
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/prefer-observers.js
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
const observerMap = {
|
||||
scroll: 'IntersectionObserver',
|
||||
resize: 'ResizeObserver',
|
||||
}
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'disallow poorly performing event listeners',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
['CallExpression[callee.property.name="addEventListener"]']: function (node) {
|
||||
const [name] = node.arguments
|
||||
if (name.type !== 'Literal') return
|
||||
if (!(name.value in observerMap)) return
|
||||
context.report({
|
||||
node,
|
||||
message: `Avoid using "${name.value}" event listener. Consider using ${observerMap[name.value]} instead`,
|
||||
})
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
35
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/require-passive-events.js
generated
vendored
Normal file
35
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/require-passive-events.js
generated
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
const passiveEventListenerNames = new Set([
|
||||
'touchstart',
|
||||
'touchmove',
|
||||
'touchenter',
|
||||
'touchend',
|
||||
'touchleave',
|
||||
'wheel',
|
||||
'mousewheel',
|
||||
])
|
||||
|
||||
const propIsPassiveTrue = prop => prop.key && prop.key.name === 'passive' && prop.value && prop.value.value === true
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'enforce marking high frequency event handlers as passive',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
return {
|
||||
['CallExpression[callee.property.name="addEventListener"]']: function (node) {
|
||||
const [name, listener, options] = node.arguments
|
||||
if (!listener) return
|
||||
if (name.type !== 'Literal') return
|
||||
if (!passiveEventListenerNames.has(name.value)) return
|
||||
if (options && options.type === 'ObjectExpression' && options.properties.some(propIsPassiveTrue)) return
|
||||
context.report({node, message: `High Frequency Events like "${name.value}" should be \`passive: true\``})
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
36
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/unescaped-html-literal.js
generated
vendored
Normal file
36
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/rules/unescaped-html-literal.js
generated
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
module.exports = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'disallow unescaped HTML literals',
|
||||
url: require('../url')(module),
|
||||
},
|
||||
schema: [],
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const htmlOpenTag = /^<[a-zA-Z]/
|
||||
const message = 'Unescaped HTML literal. Use html`` tag template literal for secure escaping.'
|
||||
|
||||
return {
|
||||
Literal(node) {
|
||||
if (!htmlOpenTag.test(node.value)) return
|
||||
|
||||
context.report({
|
||||
node,
|
||||
message,
|
||||
})
|
||||
},
|
||||
TemplateLiteral(node) {
|
||||
if (!htmlOpenTag.test(node.quasis[0].value.raw)) return
|
||||
|
||||
if (!node.parent.tag || node.parent.tag.name !== 'html') {
|
||||
context.report({
|
||||
node,
|
||||
message,
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
10
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/url.js
generated
vendored
Normal file
10
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/url.js
generated
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
const {homepage, version} = require('../package.json')
|
||||
const path = require('path')
|
||||
|
||||
module.exports = ({id}) => {
|
||||
const url = new URL(homepage)
|
||||
const rule = path.basename(id, '.js')
|
||||
url.hash = ''
|
||||
url.pathname += `/blob/v${version}/docs/rules/${rule}.md`
|
||||
return url.toString()
|
||||
}
|
||||
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-element-type.js
generated
vendored
Normal file
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-element-type.js
generated
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
const {elementType, getProp, getLiteralPropValue} = require('jsx-ast-utils')
|
||||
|
||||
/*
|
||||
Allows custom component to be mapped to an element type.
|
||||
When a default is set, all instances of the component will be mapped to the default.
|
||||
If a prop determines the type, it can be specified with `props`.
|
||||
|
||||
For now, we only support the mapping of one prop type to an element type, rather than combinations of props.
|
||||
*/
|
||||
function getElementType(context, node, lazyElementCheck = false) {
|
||||
const {settings} = context
|
||||
|
||||
if (lazyElementCheck) {
|
||||
return elementType(node)
|
||||
}
|
||||
|
||||
// check if the node contains a polymorphic prop
|
||||
const polymorphicPropName = settings?.github?.polymorphicPropName ?? 'as'
|
||||
|
||||
const prop = getProp(node.attributes, polymorphicPropName)
|
||||
const literalPropValue = getLiteralPropValue(getProp(node.attributes, polymorphicPropName))
|
||||
let checkConditionalMap = true
|
||||
|
||||
// If the prop is not a literal and we cannot determine it, don't fall back to the conditional map value, if it exists
|
||||
if (prop && !literalPropValue) {
|
||||
checkConditionalMap = false
|
||||
}
|
||||
const rawElement = getLiteralPropValue(getProp(node.attributes, polymorphicPropName)) ?? elementType(node)
|
||||
|
||||
// if a component configuration does not exists, return the raw element
|
||||
if (!settings?.github?.components?.[rawElement]) return rawElement
|
||||
|
||||
// check if the default component is also defined in the configuration
|
||||
return checkConditionalMap ? settings.github.components[rawElement] : rawElement
|
||||
}
|
||||
|
||||
module.exports = {getElementType}
|
||||
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-exported-name.js
generated
vendored
Normal file
37
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-exported-name.js
generated
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
function getNodeName(node, options) {
|
||||
const op = options || []
|
||||
|
||||
if (node.type === 'Identifier') {
|
||||
return node.name
|
||||
}
|
||||
|
||||
if (node.id && node.id.type === 'Identifier') {
|
||||
return node.id.name
|
||||
}
|
||||
|
||||
if (op[2] && node.type === 'CallExpression' && node.callee.type === 'Identifier') {
|
||||
return node.callee.name
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function getExportedName(programNode, options) {
|
||||
for (let i = 0; i < programNode.body.length; i += 1) {
|
||||
const node = programNode.body[i]
|
||||
|
||||
if (node.type === 'ExportDefaultDeclaration') {
|
||||
return getNodeName(node.declaration, options)
|
||||
}
|
||||
|
||||
if (
|
||||
node.type === 'ExpressionStatement' &&
|
||||
node.expression.type === 'AssignmentExpression' &&
|
||||
node.expression.left.type === 'MemberExpression' &&
|
||||
node.expression.left.object.type === 'Identifier' &&
|
||||
node.expression.left.object.name === 'module' &&
|
||||
node.expression.left.property.type === 'Identifier' &&
|
||||
node.expression.left.property.name === 'exports'
|
||||
) {
|
||||
return getNodeName(node.expression.right, options)
|
||||
}
|
||||
}
|
||||
}
|
||||
111
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-role.js
generated
vendored
Normal file
111
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/get-role.js
generated
vendored
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
const {getProp, getLiteralPropValue} = require('jsx-ast-utils')
|
||||
const {elementRoles} = require('aria-query')
|
||||
const {getElementType} = require('./get-element-type')
|
||||
const ObjectMap = require('./object-map')
|
||||
|
||||
const elementRolesMap = cleanElementRolesMap()
|
||||
|
||||
/*
|
||||
Returns an element roles map which uses `aria-query`'s elementRoles as the foundation.
|
||||
We additionally clean the data so we're able to fetch a role using a key we construct based on the node we're looking at.
|
||||
In a few scenarios, we stray from the roles returned by `aria-query` and hard code the mapping.
|
||||
*/
|
||||
function cleanElementRolesMap() {
|
||||
const rolesMap = new ObjectMap()
|
||||
|
||||
for (const [key, value] of elementRoles.entries()) {
|
||||
// - Remove empty `attributes` key
|
||||
if (!key.attributes || key.attributes?.length === 0) {
|
||||
delete key.attributes
|
||||
}
|
||||
rolesMap.set(key, value)
|
||||
}
|
||||
// Remove insufficiently-disambiguated `menuitem` entry
|
||||
rolesMap.delete({name: 'menuitem'})
|
||||
// Disambiguate `menuitem` and `menu` roles by `type`
|
||||
rolesMap.set({name: 'menuitem', attributes: [{name: 'type', value: 'command'}]}, ['menuitem'])
|
||||
rolesMap.set({name: 'menuitem', attributes: [{name: 'type', value: 'radio'}]}, ['menuitemradio'])
|
||||
rolesMap.set({name: 'menuitem', attributes: [{name: 'type', value: 'toolbar'}]}, ['toolbar'])
|
||||
rolesMap.set({name: 'menu', attributes: [{name: 'type', value: 'toolbar'}]}, ['toolbar'])
|
||||
|
||||
/* These have constraints defined in aria-query's `elementRoles` which depend on knowledge of ancestor roles which we cant accurately determine in a linter context.
|
||||
However, we benefit more from assuming the role, than assuming it's generic or undefined so we opt to hard code the mapping */
|
||||
rolesMap.set({name: 'aside'}, ['complementary']) // `aside` still maps to `complementary` in https://www.w3.org/TR/html-aria/#docconformance.
|
||||
rolesMap.set({name: 'li'}, ['listitem']) // `li` can be generic if it's not within a list but we would never want to render `li` outside of a list.
|
||||
|
||||
return rolesMap
|
||||
}
|
||||
|
||||
/*
|
||||
Determine role of an element, based on its name and attributes.
|
||||
We construct a key and look up the element's role in `elementRolesMap`.
|
||||
If there is no match, we return undefined.
|
||||
*/
|
||||
function getRole(context, node) {
|
||||
// Early return if role is explicitly set
|
||||
const explicitRole = getLiteralPropValue(getProp(node.attributes, 'role'))
|
||||
if (explicitRole) {
|
||||
return explicitRole
|
||||
} else if (getProp(node.attributes, 'role')) {
|
||||
// If role is set to anything other than a literal prop
|
||||
return undefined
|
||||
}
|
||||
|
||||
// Assemble a key for looking-up the element’s role in the `elementRolesMap`
|
||||
// - Get the element’s name
|
||||
const key = {name: getElementType(context, node)}
|
||||
|
||||
for (const prop of [
|
||||
'aria-label',
|
||||
'aria-labelledby',
|
||||
'alt',
|
||||
'type',
|
||||
'size',
|
||||
'role',
|
||||
'href',
|
||||
'multiple',
|
||||
'scope',
|
||||
'name',
|
||||
]) {
|
||||
if ((prop === 'aria-labelledby' || prop === 'aria-label') && !['section', 'form'].includes(key.name)) continue
|
||||
if (prop === 'name' && key.name !== 'form') continue
|
||||
if (prop === 'href' && key.name !== 'a' && key.name !== 'area') continue
|
||||
if (prop === 'alt' && key.name !== 'img') continue
|
||||
|
||||
const propOnNode = getProp(node.attributes, prop)
|
||||
|
||||
if (!('attributes' in key)) {
|
||||
key.attributes = []
|
||||
}
|
||||
// Disambiguate "undefined" props
|
||||
if (propOnNode === undefined && prop === 'alt' && key.name === 'img') {
|
||||
key.attributes.push({name: prop, constraints: ['undefined']})
|
||||
continue
|
||||
}
|
||||
|
||||
const value = getLiteralPropValue(propOnNode)
|
||||
if (propOnNode) {
|
||||
if (
|
||||
prop === 'href' ||
|
||||
prop === 'aria-labelledby' ||
|
||||
prop === 'aria-label' ||
|
||||
prop === 'name' ||
|
||||
(prop === 'alt' && value !== '')
|
||||
) {
|
||||
key.attributes.push({name: prop, constraints: ['set']})
|
||||
} else if (value || (value === '' && prop === 'alt')) {
|
||||
key.attributes.push({name: prop, value})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// - Remove empty `attributes` key
|
||||
if (!key.attributes || key.attributes?.length === 0) {
|
||||
delete key.attributes
|
||||
}
|
||||
|
||||
// Get the element’s implicit role
|
||||
return elementRolesMap.get(key)?.[0]
|
||||
}
|
||||
|
||||
module.exports = {getRole}
|
||||
5
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/is-ignored-filename.js
generated
vendored
Normal file
5
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/is-ignored-filename.js
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
const ignoredFilenames = ['<text>', '<input>']
|
||||
|
||||
module.exports = function isIgnoredFilename(filename) {
|
||||
return ignoredFilenames.indexOf(filename) !== -1
|
||||
}
|
||||
58
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/object-map.js
generated
vendored
Normal file
58
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/object-map.js
generated
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
// @ts-check
|
||||
const {isDeepStrictEqual} = require('util')
|
||||
|
||||
/**
|
||||
* ObjectMap extends Map, but determines key equality using Node.js’ `util.isDeepStrictEqual` rather than using [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#key_equality). This makes using objects as keys a bit simpler.
|
||||
*/
|
||||
module.exports = class ObjectMap extends Map {
|
||||
#data
|
||||
|
||||
constructor(iterable = []) {
|
||||
super()
|
||||
this.#data = iterable
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.#data = []
|
||||
}
|
||||
|
||||
delete(key) {
|
||||
if (!this.has(key)) {
|
||||
return false
|
||||
}
|
||||
this.#data = this.#data.filter(([existingKey]) => !isDeepStrictEqual(existingKey, key))
|
||||
return true
|
||||
}
|
||||
|
||||
entries() {
|
||||
return this.#data[Symbol.iterator]()
|
||||
}
|
||||
|
||||
forEach(cb) {
|
||||
for (const [key, value] of this.#data) {
|
||||
cb(value, key, this.#data)
|
||||
}
|
||||
}
|
||||
|
||||
get(key) {
|
||||
return this.#data.find(([existingKey]) => isDeepStrictEqual(existingKey, key))?.[1]
|
||||
}
|
||||
|
||||
has(key) {
|
||||
return this.#data.findIndex(([existingKey]) => isDeepStrictEqual(existingKey, key)) !== -1
|
||||
}
|
||||
|
||||
keys() {
|
||||
return this.#data.map(([key]) => key)[Symbol.iterator]()
|
||||
}
|
||||
|
||||
set(key, value) {
|
||||
this.delete(key)
|
||||
this.#data.push([key, value])
|
||||
return this
|
||||
}
|
||||
|
||||
values() {
|
||||
return this.#data.map(([, value]) => value)[Symbol.iterator]()
|
||||
}
|
||||
}
|
||||
12
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/parse-filename.js
generated
vendored
Normal file
12
github/codeql-action-v2/node_modules/eslint-plugin-github/lib/utils/parse-filename.js
generated
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
const path = require('path')
|
||||
|
||||
module.exports = function parseFilename(filename) {
|
||||
const ext = path.extname(filename)
|
||||
|
||||
return {
|
||||
dir: path.dirname(filename),
|
||||
base: path.basename(filename),
|
||||
ext,
|
||||
name: path.basename(filename, ext),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue