| @@ -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, | |||
| }, | |||
| }; | |||
| }); | |||