@@ -1,30 +1,13 @@ | |||
# See https://help.github.com/articles/ignoring-files for more about ignoring files. | |||
# | |||
# If you find yourself ignoring temporary files generated by your text editor | |||
# or operating system, you probably want to add a global ignore instead: | |||
# git config --global core.excludesfile '~/.gitignore_global' | |||
# Ignore bundler config. | |||
/.bundle | |||
# Ignore the default SQLite database. | |||
/db/*.sqlite3 | |||
/db/*.sqlite3-journal | |||
# Ignore all logfiles and tempfiles. | |||
/log/* | |||
!/log/.keep | |||
/tmp | |||
coverage | |||
public/system | |||
public/assets | |||
.env | |||
.env.production | |||
node_modules/ | |||
neo4j/ | |||
# Ignore Vagrant files | |||
.vagrant/ | |||
# Ignore Capistrano customizations | |||
config/deploy/* | |||
/build/** | |||
/coverage/** | |||
/db/** | |||
/lib/** | |||
/log/** | |||
/node_modules/** | |||
/nonobox/** | |||
/public/** | |||
!/public/embed.js | |||
/spec/** | |||
/tmp/** | |||
/vendor/** | |||
!.eslintrc.js |
@@ -0,0 +1,199 @@ | |||
module.exports = { | |||
root: true, | |||
env: { | |||
browser: true, | |||
node: true, | |||
es6: true, | |||
jest: true, | |||
}, | |||
globals: { | |||
ATTACHMENT_HOST: false, | |||
}, | |||
parser: 'babel-eslint', | |||
plugins: [ | |||
'react', | |||
'jsx-a11y', | |||
'import', | |||
'promise', | |||
], | |||
parserOptions: { | |||
sourceType: 'module', | |||
ecmaFeatures: { | |||
experimentalObjectRestSpread: true, | |||
jsx: true, | |||
}, | |||
ecmaVersion: 2018, | |||
}, | |||
settings: { | |||
react: { | |||
version: 'detect', | |||
}, | |||
'import/extensions': [ | |||
'.js', | |||
], | |||
'import/ignore': [ | |||
'node_modules', | |||
'\\.(css|scss|json)$', | |||
], | |||
}, | |||
rules: { | |||
'brace-style': 'warn', | |||
'comma-dangle': ['error', 'always-multiline'], | |||
'comma-spacing': [ | |||
'warn', | |||
{ | |||
before: false, | |||
after: true, | |||
}, | |||
], | |||
'comma-style': ['warn', 'last'], | |||
'consistent-return': 'error', | |||
'dot-notation': 'error', | |||
eqeqeq: 'error', | |||
indent: ['warn', 2], | |||
'jsx-quotes': ['error', 'prefer-single'], | |||
'no-catch-shadow': 'error', | |||
'no-cond-assign': 'error', | |||
'no-console': [ | |||
'warn', | |||
{ | |||
allow: [ | |||
'error', | |||
'warn', | |||
], | |||
}, | |||
], | |||
'no-fallthrough': 'error', | |||
'no-irregular-whitespace': 'error', | |||
'no-mixed-spaces-and-tabs': 'warn', | |||
'no-nested-ternary': 'warn', | |||
'no-trailing-spaces': 'warn', | |||
'no-undef': 'error', | |||
'no-unreachable': 'error', | |||
'no-unused-expressions': 'error', | |||
'no-unused-vars': [ | |||
'error', | |||
{ | |||
vars: 'all', | |||
args: 'after-used', | |||
ignoreRestSiblings: true, | |||
}, | |||
], | |||
'object-curly-spacing': ['error', 'always'], | |||
'padded-blocks': [ | |||
'error', | |||
{ | |||
classes: 'always', | |||
}, | |||
], | |||
quotes: ['error', 'single'], | |||
semi: 'error', | |||
strict: 'off', | |||
'valid-typeof': 'error', | |||
'react/jsx-boolean-value': 'error', | |||
'react/jsx-closing-bracket-location': ['error', 'line-aligned'], | |||
'react/jsx-curly-spacing': 'error', | |||
'react/jsx-equals-spacing': 'error', | |||
'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'], | |||
'react/jsx-indent': ['error', 2], | |||
'react/jsx-no-bind': 'error', | |||
'react/jsx-no-duplicate-props': 'error', | |||
'react/jsx-no-undef': 'error', | |||
'react/jsx-tag-spacing': 'error', | |||
'react/jsx-uses-react': 'error', | |||
'react/jsx-uses-vars': 'error', | |||
'react/jsx-wrap-multilines': 'error', | |||
'react/no-multi-comp': 'off', | |||
'react/no-string-refs': 'error', | |||
'react/prop-types': 'error', | |||
'react/self-closing-comp': 'error', | |||
'jsx-a11y/accessible-emoji': 'warn', | |||
'jsx-a11y/alt-text': 'warn', | |||
'jsx-a11y/anchor-has-content': 'warn', | |||
'jsx-a11y/anchor-is-valid': [ | |||
'warn', | |||
{ | |||
components: [ | |||
'Link', | |||
'NavLink', | |||
], | |||
specialLink: [ | |||
'to', | |||
], | |||
aspect: [ | |||
'noHref', | |||
'invalidHref', | |||
'preferButton', | |||
], | |||
}, | |||
], | |||
'jsx-a11y/aria-activedescendant-has-tabindex': 'warn', | |||
'jsx-a11y/aria-props': 'warn', | |||
'jsx-a11y/aria-proptypes': 'warn', | |||
'jsx-a11y/aria-role': 'warn', | |||
'jsx-a11y/aria-unsupported-elements': 'warn', | |||
'jsx-a11y/heading-has-content': 'warn', | |||
'jsx-a11y/html-has-lang': 'warn', | |||
'jsx-a11y/iframe-has-title': 'warn', | |||
'jsx-a11y/img-redundant-alt': 'warn', | |||
'jsx-a11y/interactive-supports-focus': 'warn', | |||
'jsx-a11y/label-has-for': 'off', | |||
'jsx-a11y/mouse-events-have-key-events': 'warn', | |||
'jsx-a11y/no-access-key': 'warn', | |||
'jsx-a11y/no-distracting-elements': 'warn', | |||
'jsx-a11y/no-noninteractive-element-interactions': [ | |||
'warn', | |||
{ | |||
handlers: [ | |||
'onClick', | |||
], | |||
}, | |||
], | |||
'jsx-a11y/no-onchange': 'warn', | |||
'jsx-a11y/no-redundant-roles': 'warn', | |||
'jsx-a11y/no-static-element-interactions': [ | |||
'warn', | |||
{ | |||
handlers: [ | |||
'onClick', | |||
], | |||
}, | |||
], | |||
'jsx-a11y/role-has-required-aria-props': 'warn', | |||
'jsx-a11y/role-supports-aria-props': 'off', | |||
'jsx-a11y/scope': 'warn', | |||
'jsx-a11y/tabindex-no-positive': 'warn', | |||
'import/extensions': [ | |||
'error', | |||
'always', | |||
{ | |||
js: 'never', | |||
}, | |||
], | |||
'import/newline-after-import': 'error', | |||
'import/no-extraneous-dependencies': [ | |||
'error', | |||
{ | |||
devDependencies: [ | |||
'config/webpack/**', | |||
'app/javascript/mastodon/test_setup.js', | |||
'app/javascript/**/__tests__/**', | |||
], | |||
}, | |||
], | |||
'import/no-unresolved': 'error', | |||
'import/no-webpack-loader-syntax': 'error', | |||
'promise/catch-or-return': 'error', | |||
}, | |||
}; |
@@ -1,172 +0,0 @@ | |||
--- | |||
root: true | |||
env: | |||
browser: true | |||
node: true | |||
es6: true | |||
jest: true | |||
globals: | |||
ATTACHMENT_HOST: false | |||
parser: babel-eslint | |||
plugins: | |||
- react | |||
- jsx-a11y | |||
- import | |||
- promise | |||
parserOptions: | |||
sourceType: module | |||
ecmaFeatures: | |||
experimentalObjectRestSpread: true | |||
jsx: true | |||
ecmaVersion: 2018 | |||
settings: | |||
react: | |||
version: detect | |||
import/extensions: | |||
- .js | |||
import/ignore: | |||
- node_modules | |||
- \\.(css|scss|json)$ | |||
rules: | |||
brace-style: warn | |||
comma-dangle: | |||
- error | |||
- always-multiline | |||
comma-spacing: | |||
- warn | |||
- before: false | |||
after: true | |||
comma-style: | |||
- warn | |||
- last | |||
consistent-return: error | |||
dot-notation: error | |||
eqeqeq: error | |||
indent: | |||
- warn | |||
- 2 | |||
jsx-quotes: | |||
- error | |||
- prefer-single | |||
no-catch-shadow: error | |||
no-cond-assign: error | |||
no-console: | |||
- warn | |||
- allow: | |||
- error | |||
- warn | |||
no-fallthrough: error | |||
no-irregular-whitespace: error | |||
no-mixed-spaces-and-tabs: warn | |||
no-nested-ternary: warn | |||
no-trailing-spaces: warn | |||
no-undef: error | |||
no-unreachable: error | |||
no-unused-expressions: error | |||
no-unused-vars: | |||
- error | |||
- vars: all | |||
args: after-used | |||
ignoreRestSiblings: true | |||
object-curly-spacing: | |||
- error | |||
- always | |||
padded-blocks: | |||
- error | |||
- classes: always | |||
quotes: | |||
- error | |||
- single | |||
semi: error | |||
strict: off | |||
valid-typeof: error | |||
react/jsx-boolean-value: error | |||
react/jsx-closing-bracket-location: | |||
- error | |||
- line-aligned | |||
react/jsx-curly-spacing: error | |||
react/jsx-equals-spacing: error | |||
react/jsx-first-prop-new-line: | |||
- error | |||
- multiline-multiprop | |||
react/jsx-indent: | |||
- error | |||
- 2 | |||
react/jsx-no-bind: error | |||
react/jsx-no-duplicate-props: error | |||
react/jsx-no-undef: error | |||
react/jsx-tag-spacing: error | |||
react/jsx-uses-react: error | |||
react/jsx-uses-vars: error | |||
react/jsx-wrap-multilines: error | |||
react/no-multi-comp: off | |||
react/no-string-refs: error | |||
react/prop-types: error | |||
react/self-closing-comp: error | |||
jsx-a11y/accessible-emoji: warn | |||
jsx-a11y/alt-text: warn | |||
jsx-a11y/anchor-has-content: warn | |||
jsx-a11y/anchor-is-valid: | |||
- warn | |||
- components: | |||
- Link | |||
- NavLink | |||
specialLink: | |||
- to | |||
aspect: | |||
- noHref | |||
- invalidHref | |||
- preferButton | |||
jsx-a11y/aria-activedescendant-has-tabindex: warn | |||
jsx-a11y/aria-props: warn | |||
jsx-a11y/aria-proptypes: warn | |||
jsx-a11y/aria-role: warn | |||
jsx-a11y/aria-unsupported-elements: warn | |||
jsx-a11y/heading-has-content: warn | |||
jsx-a11y/html-has-lang: warn | |||
jsx-a11y/iframe-has-title: warn | |||
jsx-a11y/img-redundant-alt: warn | |||
jsx-a11y/interactive-supports-focus: warn | |||
jsx-a11y/label-has-for: off | |||
jsx-a11y/mouse-events-have-key-events: warn | |||
jsx-a11y/no-access-key: warn | |||
jsx-a11y/no-distracting-elements: warn | |||
jsx-a11y/no-noninteractive-element-interactions: | |||
- warn | |||
- handlers: | |||
- onClick | |||
jsx-a11y/no-onchange: warn | |||
jsx-a11y/no-redundant-roles: warn | |||
jsx-a11y/no-static-element-interactions: | |||
- warn | |||
- handlers: | |||
- onClick | |||
jsx-a11y/role-has-required-aria-props: warn | |||
jsx-a11y/role-supports-aria-props: off | |||
jsx-a11y/scope: warn | |||
jsx-a11y/tabindex-no-positive: warn | |||
import/extensions: | |||
- error | |||
- always | |||
- js: never | |||
import/newline-after-import: error | |||
import/no-extraneous-dependencies: | |||
- error | |||
- devDependencies: | |||
- "config/webpack/**" | |||
- "app/javascript/mastodon/test_setup.js" | |||
- "app/javascript/**/__tests__/**" | |||
import/no-unresolved: error | |||
import/no-webpack-loader-syntax: error | |||
promise/catch-or-return: error |
@@ -10,8 +10,8 @@ | |||
"build:production": "cross-env RAILS_ENV=production NODE_ENV=production ./bin/webpack", | |||
"manage:translations": "node ./config/webpack/translationRunner.js", | |||
"start": "node ./streaming/index.js", | |||
"test": "npm run test:lint && npm run test:jest", | |||
"test:lint": "eslint -c .eslintrc.yml --ext=js app/javascript/ config/webpack/ streaming/", | |||
"test": "${npm_execpath} run test:lint && ${npm_execpath} run test:jest", | |||
"test:lint": "eslint --ext=js .", | |||
"test:jest": "cross-env NODE_ENV=test jest --coverage" | |||
}, | |||
"repository": { | |||
@@ -1,13 +1,7 @@ | |||
module.exports = { | |||
module.exports = ({ env }) => ({ | |||
plugins: { | |||
autoprefixer: { | |||
browsers: [ | |||
'last 2 versions', | |||
'IE >= 11', | |||
'iOS >= 9', | |||
], | |||
}, | |||
autoprefixer: {}, | |||
'postcss-object-fit-images': {}, | |||
cssnano: {}, | |||
cssnano: env === 'production' ? {} : false, | |||
}, | |||
}; | |||
}); |