module.exports = {
							 | 
						|
								  env: {
							 | 
						|
								    es6: true
							 | 
						|
								  },
							 | 
						|
								  parserOptions: {
							 | 
						|
								    ecmaVersion: 6,
							 | 
						|
								    sourceType: 'module',
							 | 
						|
								    ecmaFeatures: {
							 | 
						|
								      generators: false,
							 | 
						|
								      objectLiteralDuplicateProperties: false
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								
							 | 
						|
								  rules: {
							 | 
						|
								    // enforces no braces where they can be omitted
							 | 
						|
								    // https://eslint.org/docs/rules/arrow-body-style
							 | 
						|
								    // TODO: enable requireReturnForObjectLiteral?
							 | 
						|
								    'arrow-body-style': ['error', 'as-needed', {
							 | 
						|
								      requireReturnForObjectLiteral: false,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // require parens in arrow function arguments
							 | 
						|
								    // https://eslint.org/docs/rules/arrow-parens
							 | 
						|
								    'arrow-parens': ['error', 'always'],
							 | 
						|
								
							 | 
						|
								    // require space before/after arrow function's arrow
							 | 
						|
								    // https://eslint.org/docs/rules/arrow-spacing
							 | 
						|
								    'arrow-spacing': ['error', { before: true, after: true }],
							 | 
						|
								
							 | 
						|
								    // verify super() callings in constructors
							 | 
						|
								    'constructor-super': 'error',
							 | 
						|
								
							 | 
						|
								    // enforce the spacing around the * in generator functions
							 | 
						|
								    // https://eslint.org/docs/rules/generator-star-spacing
							 | 
						|
								    'generator-star-spacing': ['error', { before: false, after: true }],
							 | 
						|
								
							 | 
						|
								    // disallow modifying variables of class declarations
							 | 
						|
								    // https://eslint.org/docs/rules/no-class-assign
							 | 
						|
								    'no-class-assign': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow arrow functions where they could be confused with comparisons
							 | 
						|
								    // https://eslint.org/docs/rules/no-confusing-arrow
							 | 
						|
								    'no-confusing-arrow': ['error', {
							 | 
						|
								      allowParens: true,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // disallow modifying variables that are declared using const
							 | 
						|
								    'no-const-assign': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow duplicate class members
							 | 
						|
								    // https://eslint.org/docs/rules/no-dupe-class-members
							 | 
						|
								    'no-dupe-class-members': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow importing from the same path more than once
							 | 
						|
								    // https://eslint.org/docs/rules/no-duplicate-imports
							 | 
						|
								    // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
							 | 
						|
								    'no-duplicate-imports': 'off',
							 | 
						|
								
							 | 
						|
								    // disallow symbol constructor
							 | 
						|
								    // https://eslint.org/docs/rules/no-new-symbol
							 | 
						|
								    'no-new-symbol': 'error',
							 | 
						|
								
							 | 
						|
								    // Disallow specified names in exports
							 | 
						|
								    // https://eslint.org/docs/rules/no-restricted-exports
							 | 
						|
								    'no-restricted-exports': ['error', {
							 | 
						|
								      restrictedNamedExports: [
							 | 
						|
								        'default', // use `export default` to provide a default export
							 | 
						|
								        'then', // this will cause tons of confusion when your module is dynamically `import()`ed, and will break in most node ESM versions
							 | 
						|
								      ],
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // disallow specific imports
							 | 
						|
								    // https://eslint.org/docs/rules/no-restricted-imports
							 | 
						|
								    'no-restricted-imports': ['off', {
							 | 
						|
								      paths: [],
							 | 
						|
								      patterns: []
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // disallow to use this/super before super() calling in constructors.
							 | 
						|
								    // https://eslint.org/docs/rules/no-this-before-super
							 | 
						|
								    'no-this-before-super': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow useless computed property keys
							 | 
						|
								    // https://eslint.org/docs/rules/no-useless-computed-key
							 | 
						|
								    'no-useless-computed-key': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow unnecessary constructor
							 | 
						|
								    // https://eslint.org/docs/rules/no-useless-constructor
							 | 
						|
								    'no-useless-constructor': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow renaming import, export, and destructured assignments to the same name
							 | 
						|
								    // https://eslint.org/docs/rules/no-useless-rename
							 | 
						|
								    'no-useless-rename': ['error', {
							 | 
						|
								      ignoreDestructuring: false,
							 | 
						|
								      ignoreImport: false,
							 | 
						|
								      ignoreExport: false,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // require let or const instead of var
							 | 
						|
								    'no-var': 'error',
							 | 
						|
								
							 | 
						|
								    // require method and property shorthand syntax for object literals
							 | 
						|
								    // https://eslint.org/docs/rules/object-shorthand
							 | 
						|
								    'object-shorthand': ['error', 'always', {
							 | 
						|
								      ignoreConstructors: false,
							 | 
						|
								      avoidQuotes: true,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // suggest using arrow functions as callbacks
							 | 
						|
								    'prefer-arrow-callback': ['error', {
							 | 
						|
								      allowNamedFunctions: false,
							 | 
						|
								      allowUnboundThis: true,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // suggest using of const declaration for variables that are never modified after declared
							 | 
						|
								    'prefer-const': ['error', {
							 | 
						|
								      destructuring: 'any',
							 | 
						|
								      ignoreReadBeforeAssign: true,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // Prefer destructuring from arrays and objects
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-destructuring
							 | 
						|
								    'prefer-destructuring': ['error', {
							 | 
						|
								      VariableDeclarator: {
							 | 
						|
								        array: false,
							 | 
						|
								        object: true,
							 | 
						|
								      },
							 | 
						|
								      AssignmentExpression: {
							 | 
						|
								        array: true,
							 | 
						|
								        object: false,
							 | 
						|
								      },
							 | 
						|
								    }, {
							 | 
						|
								      enforceForRenamedProperties: false,
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // disallow parseInt() in favor of binary, octal, and hexadecimal literals
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-numeric-literals
							 | 
						|
								    'prefer-numeric-literals': 'error',
							 | 
						|
								
							 | 
						|
								    // suggest using Reflect methods where applicable
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-reflect
							 | 
						|
								    'prefer-reflect': 'off',
							 | 
						|
								
							 | 
						|
								    // use rest parameters instead of arguments
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-rest-params
							 | 
						|
								    'prefer-rest-params': 'error',
							 | 
						|
								
							 | 
						|
								    // suggest using the spread syntax instead of .apply()
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-spread
							 | 
						|
								    'prefer-spread': 'error',
							 | 
						|
								
							 | 
						|
								    // suggest using template literals instead of string concatenation
							 | 
						|
								    // https://eslint.org/docs/rules/prefer-template
							 | 
						|
								    'prefer-template': 'error',
							 | 
						|
								
							 | 
						|
								    // disallow generator functions that do not have yield
							 | 
						|
								    // https://eslint.org/docs/rules/require-yield
							 | 
						|
								    'require-yield': 'error',
							 | 
						|
								
							 | 
						|
								    // enforce spacing between object rest-spread
							 | 
						|
								    // https://eslint.org/docs/rules/rest-spread-spacing
							 | 
						|
								    'rest-spread-spacing': ['error', 'never'],
							 | 
						|
								
							 | 
						|
								    // import sorting
							 | 
						|
								    // https://eslint.org/docs/rules/sort-imports
							 | 
						|
								    'sort-imports': ['off', {
							 | 
						|
								      ignoreCase: false,
							 | 
						|
								      ignoreDeclarationSort: false,
							 | 
						|
								      ignoreMemberSort: false,
							 | 
						|
								      memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
							 | 
						|
								    }],
							 | 
						|
								
							 | 
						|
								    // require a Symbol description
							 | 
						|
								    // https://eslint.org/docs/rules/symbol-description
							 | 
						|
								    'symbol-description': 'error',
							 | 
						|
								
							 | 
						|
								    // enforce usage of spacing in template strings
							 | 
						|
								    // https://eslint.org/docs/rules/template-curly-spacing
							 | 
						|
								    'template-curly-spacing': 'error',
							 | 
						|
								
							 | 
						|
								    // enforce spacing around the * in yield* expressions
							 | 
						|
								    // https://eslint.org/docs/rules/yield-star-spacing
							 | 
						|
								    'yield-star-spacing': ['error', 'after']
							 | 
						|
								  }
							 | 
						|
								};
							 |