env:
  browser: true
  commonjs: true
  es2021: true
  node: true
extends: 'eslint:recommended'
globals:
  "$tw": "writable" # temporary
parserOptions:
  ecmaVersion: 5
rules:
  array-bracket-newline: 'off'
  array-bracket-spacing: 'off'
  array-callback-return: 'off'
  array-element-newline: 'off'
  arrow-body-style: error
  arrow-parens:
    - error
    - as-needed
  arrow-spacing:
    - error
    - after: true
      before: true
  block-scoped-var: 'off'
  block-spacing: 'off'
  brace-style: 'off'
  callback-return: 'off'
  camelcase: 'off'
  capitalized-comments: 'off'
  class-methods-use-this: error
  comma-dangle: 'off'
  comma-spacing: 'off'
  comma-style: 'off'
  complexity: 'off'
  computed-property-spacing: 'off'
  consistent-return: 'off'
  consistent-this: 'off'
  curly: 'off'
  default-case: 'off'
  default-case-last: error
  default-param-last: error
  dot-location: 'off'
  dot-notation: 'off'
  eol-last: 'off'
  eqeqeq: 'off'
  func-call-spacing: 'off'
  func-name-matching: 'off'
  func-names: 'off'
  func-style: 'off'
  function-call-argument-newline: 'off'
  function-paren-newline: 'off'
  generator-star-spacing: error
  global-require: 'off'
  grouped-accessor-pairs: error
  guard-for-in: 'off'
  handle-callback-err: 'off'
  id-blacklist: error
  id-denylist: error
  id-length: 'off'
  id-match: error
  implicit-arrow-linebreak: error
  indent: 'off'
  indent-legacy: 'off'
  init-declarations: 'off'
  jsx-quotes: error
  key-spacing: 'off'
  keyword-spacing:
    - error
    - before: true
      after: false
      overrides:
        'case':
          after: true
        'do':
          'after': true
        'else':
          after: true
        'return':
          after: true
        'throw':
          after: true
        'try':
          after: true
  line-comment-position: 'off'
  linebreak-style: 'off'
  lines-around-comment: 'off'
  lines-around-directive: 'off'
  lines-between-class-members: error
  max-classes-per-file: error
  max-depth: 'off'
  max-len: 'off'
  max-lines: 'off'
  max-lines-per-function: 'off'
  max-nested-callbacks: error
  max-params: 'off'
  max-statements: 'off'
  max-statements-per-line: 'off'
  multiline-comment-style: 'off'
  multiline-ternary: 'off'
  new-parens: 'off'
  newline-after-var: 'off'
  newline-before-return: 'off'
  newline-per-chained-call: 'off'
  no-alert: 'off'
  no-array-constructor: 'off'
  no-await-in-loop: error
  no-bitwise: 'off'
  no-buffer-constructor: 'off'
  no-caller: error
  no-catch-shadow: 'off'
  no-confusing-arrow: error
  no-console: 'off'
  no-constant-condition:
    - error
    - checkLoops: false
  no-constructor-return: error
  no-continue: 'off'
  no-div-regex: 'off'
  no-duplicate-imports: error
  no-else-return: 'off'
  no-empty-function: 'off'
  no-eq-null: 'off'
  no-eval: 'off'
  no-extend-native: 'off'
  no-extra-bind: 'off'
  no-extra-label: 'off'
  no-extra-parens: 'off'
  no-floating-decimal: 'off'
  no-implicit-coercion:
    - error
    - boolean: false
      number: false
      string: false
  no-implicit-globals: 'off'
  no-implied-eval: error
  no-inline-comments: 'off'
  no-invalid-this: 'off'
  no-iterator: error
  no-label-var: 'off'
  no-labels: 'off'
  no-lone-blocks: 'off'
  no-lonely-if: 'off'
  no-loop-func: 'off'
  no-loss-of-precision: error
  no-magic-numbers: 'off'
  no-mixed-operators: 'off'
  no-mixed-requires: 'off'
  no-multi-assign: 'off'
  no-multi-spaces: 'off'
  no-multi-str: error
  no-multiple-empty-lines: 'off'
  no-native-reassign: 'off'
  no-negated-condition: 'off'
  no-negated-in-lhs: error
  no-nested-ternary: 'off'
  no-new: 'off'
  no-new-func: 'off'
  no-new-object: 'off'
  no-new-require: error
  no-new-wrappers: error
  no-octal-escape: error
  no-param-reassign: 'off'
  no-path-concat: error
  no-plusplus: 'off'
  no-process-env: 'off'
  no-process-exit: 'off'
  no-promise-executor-return: error
  no-proto: 'off'
  no-restricted-exports: error
  no-restricted-globals: error
  no-restricted-imports: error
  no-restricted-modules: error
  no-restricted-properties: error
  no-restricted-syntax: error
  no-return-assign: 'off'
  no-return-await: error
  no-script-url: 'off'
  no-self-compare: 'off'
  no-sequences: 'off'
  no-shadow: 'off'
  no-spaced-func: 'off'
  no-sync: 'off'
  no-tabs: 'off'
  no-template-curly-in-string: error
  no-ternary: 'off'
  no-throw-literal: 'off'
  no-trailing-spaces: 'off'
  no-undef-init: 'off'
  no-undefined: 'off'
  no-underscore-dangle: 'off'
  no-unmodified-loop-condition: 'off'
  no-unneeded-ternary: 'off'
  no-unreachable-loop: error
  no-unused-expressions: 'off'
  no-use-before-define: 'off'
  no-useless-backreference: error
  no-useless-call: 'off'
  no-useless-computed-key: error
  no-useless-concat: 'off'
  no-useless-constructor: error
  no-useless-rename: error
  no-useless-return: 'off'
  no-var: 'off'
  no-void: 'off'
  no-warning-comments: 'off'
  no-whitespace-before-property: error
  nonblock-statement-body-position:
    - error
    - any
  object-curly-newline: 'off'
  object-curly-spacing: 'off'
  object-property-newline: 'off'
  object-shorthand: 'off'
  one-var: 'off'
  one-var-declaration-per-line: 'off'
  operator-assignment: 'off'
  operator-linebreak: 'off'
  padded-blocks: 'off'
  padding-line-between-statements: error
  prefer-arrow-callback: 'off'
  prefer-const: 'off'
  prefer-destructuring: 'off'
  prefer-exponentiation-operator: 'off'
  prefer-named-capture-group: 'off'
  prefer-numeric-literals: error
  prefer-object-spread: 'off'
  prefer-promise-reject-errors: error
  prefer-reflect: 'off'
  prefer-regex-literals: 'off'
  prefer-rest-params: 'off'
  prefer-spread: 'off'
  prefer-template: 'off'
  quote-props: 'off'
  quotes: 'off'
  radix: 'off'
  require-atomic-updates: error
  require-await: error
  require-jsdoc: 'off'
  require-unicode-regexp: 'off'
  rest-spread-spacing: error
  semi: 'off'
  semi-spacing: 'off'
  semi-style: 'off'
  sort-imports: error
  sort-keys: 'off'
  sort-vars: 'off'
  space-before-blocks: 'off'
  space-before-function-paren: 'off'
  space-in-parens: 'off'
  space-infix-ops: 'off'
  space-unary-ops: 'off'
  spaced-comment: 'off'
  strict: 'off'
  switch-colon-spacing: 'off'
  symbol-description: error
  template-curly-spacing: error
  template-tag-spacing: error
  unicode-bom:
    - error
    - never
  valid-jsdoc: 'off'
  valid-typeof:
    - error
    - requireStringLiterals: false
  vars-on-top: 'off'
  wrap-iife: 'off'
  wrap-regex: 'off'
  yield-star-spacing: error
  yoda: 'off'

  # temporary rules
  no-useless-escape: 'off'
  no-unused-vars: 'off'
  no-empty: 'off'
  no-extra-semi: 'off'
  no-redeclare: 'off'
  no-control-regex: "off"
  no-mixed-spaces-and-tabs: "off"
  no-extra-boolean-cast: "off"
  no-prototype-builtins: "off"
  no-undef: "off"
  no-unreachable: "off"
  no-self-assign: "off"
