Project: expression-editor
Task (moderate): Implement an `evaluate` function in `evaluate.js`, and export `evaluate` with ESM named export.

# Details
- When encounters some error during evaluating, return null.
- When operator is not uppercase, return null.
- Hard-code the builtin variables when doing evaluating. Available builtin variables:
  - foo: true
  - fooooo: false
  - bar: true
  - barrrr: false
- Nonexistent variables should be considered as `false` when doing evaluating.

# Examples

<examples>
  <example>
    <input description="empty input"></input>
    <output>false</output>
  <example>

  <example>
    <input>foo</input>
    <output>true</output>
  <example>

  <example>
    <input>foo a</input>
    <output description="return null because there is a syntax error">null</output>
  <example>

  <example>
    <input>foo AND</input>
    <output description="return null because there is a syntax error">null</output>
  <example>

  <example>
    <input>foo and bar</input>
    <output description="return null because 'and' is not a leagal operator">null</output>
  </example>

  <example>
    <input>foo AND bar</input>
    <output>true</output>
  </example>

  <example>
    <input>x AND bar</input>
    <output>false</output>
  </example>

  <example>
    <input>foo AND barrrr</input>
    <output>false</output>
  </example>

  <example>
    <input>foo OR barrrr</input>
    <output>true</output>
  </example>
</examples>