javascriptLanguage top-level constant

Language const javascriptLanguage

JavaScript (source.js).

Implementation

const javascriptLanguage = Language(
  name: 'javascript',
  scopeName: 'source.js',
  displayName: 'JavaScript',
  aliases: ['js', 'cjs', 'mjs'],
  grammar: <String, Object?>{
    'displayName': 'JavaScript',
    'name': 'javascript',
    'patterns': [
      {'include': '#directives'},
      {'include': '#statements'},
      {'include': '#shebang'},
    ],
    'repository': {
      'access-modifier': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'storage.modifier.js',
      },
      'after-operator-block-as-object-literal': {
        'begin':
            '(?<!\\+\\+|--)(?<=[!(+,:=>?\\[]|^await|[^\$._[:alnum:]]await|^return|[^\$._[:alnum:]]return|^yield|[^\$._[:alnum:]]yield|^throw|[^\$._[:alnum:]]throw|^in|[^\$._[:alnum:]]in|^of|[^\$._[:alnum:]]of|^typeof|[^\$._[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'meta.objectliteral.js',
        'patterns': [
          {'include': '#object-member'},
        ],
      },
      'array-binding-pattern': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\[)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'patterns': [
          {'include': '#binding-element'},
          {'include': '#punctuation-comma'},
        ],
      },
      'array-binding-pattern-const': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\[)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'patterns': [
          {'include': '#binding-element-const'},
          {'include': '#punctuation-comma'},
        ],
      },
      'array-literal': {
        'begin': '\\s*(\\[)',
        'beginCaptures': {
          '1': {'name': 'meta.brace.square.js'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'meta.brace.square.js'},
        },
        'name': 'meta.array.literal.js',
        'patterns': [
          {'include': '#expression'},
          {'include': '#punctuation-comma'},
        ],
      },
      'arrow-function': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.modifier.async.js'},
              '2': {'name': 'variable.parameter.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\b(async)\\s+)?([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?==>)',
            'name': 'meta.arrow.js',
          },
          {
            'begin':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\b(async))?((?<![]!)}])\\s*(?=((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.async.js'},
            },
            'end':
                '(?==>|\\{|^(\\s*(export|function|class|interface|let|var|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|const|import|enum|namespace|module|type|abstract|declare)\\s+))',
            'name': 'meta.arrow.js',
            'patterns': [
              {'include': '#comment'},
              {'include': '#type-parameters'},
              {'include': '#function-parameters'},
              {'include': '#arrow-return-type'},
              {'include': '#possibly-arrow-return-type'},
            ],
          },
          {
            'begin': '=>',
            'beginCaptures': {
              '0': {'name': 'storage.type.function.arrow.js'},
            },
            'end': '((?<=[}\\S])(?<!=>)|((?!\\{)(?=\\S)))(?!/[*/])',
            'name': 'meta.arrow.js',
            'patterns': [
              {'include': '#single-line-comment-consuming-line-ending'},
              {'include': '#decl-block'},
              {'include': '#expression'},
            ],
          },
        ],
      },
      'arrow-return-type': {
        'begin': '(?<=\\))\\s*(:)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.type.annotation.js'},
        },
        'end':
            '(?==>|\\{|^(\\s*(export|function|class|interface|let|var|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|const|import|enum|namespace|module|type|abstract|declare)\\s+))',
        'name': 'meta.return.type.arrow.js',
        'patterns': [
          {'include': '#arrow-return-type-body'},
        ],
      },
      'arrow-return-type-body': {
        'patterns': [
          {
            'begin': '(?<=:)(?=\\s*\\{)',
            'end': '(?<=})',
            'patterns': [
              {'include': '#type-object'},
            ],
          },
          {'include': '#type-predicate-operator'},
          {'include': '#type'},
        ],
      },
      'async-modifier': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(async)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'storage.modifier.async.js',
      },
      'binding-element': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#numeric-literal'},
          {'include': '#regex'},
          {'include': '#object-binding-pattern'},
          {'include': '#array-binding-pattern'},
          {'include': '#destructuring-variable-rest'},
          {'include': '#variable-initializer'},
        ],
      },
      'binding-element-const': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#numeric-literal'},
          {'include': '#regex'},
          {'include': '#object-binding-pattern-const'},
          {'include': '#array-binding-pattern-const'},
          {'include': '#destructuring-variable-rest-const'},
          {'include': '#variable-initializer'},
        ],
      },
      'boolean-literal': {
        'patterns': [
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))true(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'constant.language.boolean.true.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))false(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'constant.language.boolean.false.js',
          },
        ],
      },
      'brackets': {
        'patterns': [
          {
            'begin': '\\{',
            'end': '}|(?=\\*/)',
            'patterns': [
              {'include': '#brackets'},
            ],
          },
          {
            'begin': '\\[',
            'end': ']|(?=\\*/)',
            'patterns': [
              {'include': '#brackets'},
            ],
          },
        ],
      },
      'cast': {
        'patterns': [
          {'include': '#jsx'},
        ],
      },
      'class-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[*/])',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.modifier.js'},
          '4': {'name': 'storage.type.class.js'},
        },
        'end': '(?<=})',
        'name': 'meta.class.js',
        'patterns': [
          {'include': '#class-declaration-or-expression-patterns'},
        ],
      },
      'class-declaration-or-expression-patterns': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#class-or-interface-heritage'},
          {
            'captures': {
              '0': {'name': 'entity.name.type.class.js'},
            },
            'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
          },
          {'include': '#type-parameters'},
          {'include': '#class-or-interface-body'},
        ],
      },
      'class-expression': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(class)\\b(?=\\s+|[<{]|/[*/])',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.js'},
          '2': {'name': 'storage.type.class.js'},
        },
        'end': '(?<=})',
        'name': 'meta.class.js',
        'patterns': [
          {'include': '#class-declaration-or-expression-patterns'},
        ],
      },
      'class-or-interface-body': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'patterns': [
          {'include': '#comment'},
          {'include': '#decorator'},
          {
            'begin': '(?<=:)\\s*',
            'end':
                '(?=[-\\])+,:;}\\s]|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {'include': '#method-declaration'},
          {'include': '#indexer-declaration'},
          {'include': '#field-declaration'},
          {'include': '#string'},
          {'include': '#type-annotation'},
          {'include': '#variable-initializer'},
          {'include': '#access-modifier'},
          {'include': '#property-accessor'},
          {'include': '#async-modifier'},
          {'include': '#after-operator-block-as-object-literal'},
          {'include': '#decl-block'},
          {'include': '#expression'},
          {'include': '#punctuation-comma'},
          {'include': '#punctuation-semicolon'},
        ],
      },
      'class-or-interface-heritage': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\b(extends|implements)\\b(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.js'},
        },
        'end': '(?=\\{)',
        'patterns': [
          {'include': '#comment'},
          {'include': '#class-or-interface-heritage'},
          {'include': '#type-parameters'},
          {'include': '#expressionWithoutIdentifiers'},
          {
            'captures': {
              '1': {'name': 'entity.name.type.module.js'},
              '2': {'name': 'punctuation.accessor.js'},
              '3': {'name': 'punctuation.accessor.optional.js'},
            },
            'match':
                '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))(?=\\s*[\$_[:alpha:]][\$_[:alnum:]]*(\\s*\\??\\.\\s*[\$_[:alpha:]][\$_[:alnum:]]*)*\\s*)',
          },
          {
            'captures': {
              '1': {'name': 'entity.other.inherited-class.js'},
            },
            'match': '([\$_[:alpha:]][\$_[:alnum:]]*)',
          },
          {'include': '#expressionPunctuations'},
        ],
      },
      'comment': {
        'patterns': [
          {
            'begin': '/\\*\\*(?!/)',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.comment.js'},
            },
            'end': '\\*/',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.comment.js'},
            },
            'name': 'comment.block.documentation.js',
            'patterns': [
              {'include': '#docblock'},
            ],
          },
          {
            'begin': '(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.comment.js'},
              '2': {'name': 'storage.type.internaldeclaration.js'},
              '3': {'name': 'punctuation.decorator.internaldeclaration.js'},
            },
            'end': '\\*/',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.comment.js'},
            },
            'name': 'comment.block.js',
          },
          {
            'begin': '(^[\\t ]+)?((//)(?:\\s*((@)internal)(?=\\s|\$))?)',
            'beginCaptures': {
              '1': {'name': 'punctuation.whitespace.comment.leading.js'},
              '2': {'name': 'comment.line.double-slash.js'},
              '3': {'name': 'punctuation.definition.comment.js'},
              '4': {'name': 'storage.type.internaldeclaration.js'},
              '5': {'name': 'punctuation.decorator.internaldeclaration.js'},
            },
            'contentName': 'comment.line.double-slash.js',
            'end': '(?=\$)',
          },
        ],
      },
      'control-statement': {
        'patterns': [
          {'include': '#switch-statement'},
          {'include': '#for-loop'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(catch|finally|throw|try)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.trycatch.js',
          },
          {
            'captures': {
              '1': {'name': 'keyword.control.loop.js'},
              '2': {'name': 'entity.name.label.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|goto)\\s+([\$_[:alpha:]][\$_[:alnum:]]*)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|do|goto|while)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.loop.js',
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'beginCaptures': {
              '0': {'name': 'keyword.control.flow.js'},
            },
            'end':
                '(?=[;}]|\$|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default|switch)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.switch.js',
          },
          {'include': '#if-statement'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.conditional.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(with)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.with.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(package)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(debugger)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.other.debugger.js',
          },
        ],
      },
      'decl-block': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'meta.block.js',
        'patterns': [
          {'include': '#statements'},
        ],
      },
      'declaration': {
        'patterns': [
          {'include': '#decorator'},
          {'include': '#var-expr'},
          {'include': '#function-declaration'},
          {'include': '#class-declaration'},
          {'include': '#interface-declaration'},
          {'include': '#enum-declaration'},
          {'include': '#namespace-declaration'},
          {'include': '#type-alias-declaration'},
          {'include': '#import-equals-declaration'},
          {'include': '#import-declaration'},
          {'include': '#export-declaration'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(declare|export)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'storage.modifier.js',
          },
        ],
      },
      'decorator': {
        'begin': '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))@',
        'beginCaptures': {
          '0': {'name': 'punctuation.decorator.js'},
        },
        'end': '(?=\\s)',
        'name': 'meta.decorator.js',
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'destructuring-const': {
        'patterns': [
          {
            'begin':
                '(?<![:=]|^of|[^\$._[:alnum:]]of|^in|[^\$._[:alnum:]]in)\\s*(?=\\{)',
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))',
            'name': 'meta.object-binding-pattern-variable.js',
            'patterns': [
              {'include': '#object-binding-pattern-const'},
              {'include': '#type-annotation'},
              {'include': '#comment'},
            ],
          },
          {
            'begin':
                '(?<![:=]|^of|[^\$._[:alnum:]]of|^in|[^\$._[:alnum:]]in)\\s*(?=\\[)',
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))',
            'name': 'meta.array-binding-pattern-variable.js',
            'patterns': [
              {'include': '#array-binding-pattern-const'},
              {'include': '#type-annotation'},
              {'include': '#comment'},
            ],
          },
        ],
      },
      'destructuring-parameter': {
        'patterns': [
          {
            'begin': '(?<![:=])\\s*(?:(\\.\\.\\.)\\s*)?(\\{)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.rest.js'},
              '2': {'name': 'punctuation.definition.binding-pattern.object.js'},
            },
            'end': '}',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.binding-pattern.object.js'},
            },
            'name': 'meta.parameter.object-binding-pattern.js',
            'patterns': [
              {'include': '#parameter-object-binding-element'},
            ],
          },
          {
            'begin': '(?<![:=])\\s*(?:(\\.\\.\\.)\\s*)?(\\[)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.rest.js'},
              '2': {'name': 'punctuation.definition.binding-pattern.array.js'},
            },
            'end': ']',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.binding-pattern.array.js'},
            },
            'name': 'meta.paramter.array-binding-pattern.js',
            'patterns': [
              {'include': '#parameter-binding-element'},
              {'include': '#punctuation-comma'},
            ],
          },
        ],
      },
      'destructuring-parameter-rest': {
        'captures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'variable.parameter.js'},
        },
        'match': '(?:(\\.\\.\\.)\\s*)?([\$_[:alpha:]][\$_[:alnum:]]*)',
      },
      'destructuring-variable': {
        'patterns': [
          {
            'begin':
                '(?<![:=]|^of|[^\$._[:alnum:]]of|^in|[^\$._[:alnum:]]in)\\s*(?=\\{)',
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))',
            'name': 'meta.object-binding-pattern-variable.js',
            'patterns': [
              {'include': '#object-binding-pattern'},
              {'include': '#type-annotation'},
              {'include': '#comment'},
            ],
          },
          {
            'begin':
                '(?<![:=]|^of|[^\$._[:alnum:]]of|^in|[^\$._[:alnum:]]in)\\s*(?=\\[)',
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))',
            'name': 'meta.array-binding-pattern-variable.js',
            'patterns': [
              {'include': '#array-binding-pattern'},
              {'include': '#type-annotation'},
              {'include': '#comment'},
            ],
          },
        ],
      },
      'destructuring-variable-rest': {
        'captures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {
            'name': 'meta.definition.variable.js variable.other.readwrite.js',
          },
        },
        'match': '(?:(\\.\\.\\.)\\s*)?([\$_[:alpha:]][\$_[:alnum:]]*)',
      },
      'destructuring-variable-rest-const': {
        'captures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {
            'name': 'meta.definition.variable.js variable.other.constant.js',
          },
        },
        'match': '(?:(\\.\\.\\.)\\s*)?([\$_[:alpha:]][\$_[:alnum:]]*)',
      },
      'directives': {
        'begin':
            '^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\s*=\\s*((\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)))+\\s*/>\\s*\$)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.comment.js'},
        },
        'end': '(?=\$)',
        'name': 'comment.line.triple-slash.directive.js',
        'patterns': [
          {
            'begin': '(<)(reference|amd-dependency|amd-module)',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.tag.directive.js'},
              '2': {'name': 'entity.name.tag.directive.js'},
            },
            'end': '/>',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.tag.directive.js'},
            },
            'name': 'meta.tag.js',
            'patterns': [
              {
                'match': 'path|types|no-default-lib|lib|name|resolution-mode',
                'name': 'entity.other.attribute-name.directive.js',
              },
              {'match': '=', 'name': 'keyword.operator.assignment.js'},
              {'include': '#string'},
            ],
          },
        ],
      },
      'docblock': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'constant.language.access-type.jsdoc'},
            },
            'match': '((@)a(?:ccess|pi))\\s+(p(?:rivate|rotected|ublic))\\b',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'entity.name.type.instance.jsdoc'},
              '4': {'name': 'punctuation.definition.bracket.angle.begin.jsdoc'},
              '5': {'name': 'constant.other.email.link.underline.jsdoc'},
              '6': {'name': 'punctuation.definition.bracket.angle.end.jsdoc'},
            },
            'match':
                '((@)author)\\s+([^*/<>@\\s](?:[^*/<>@]|\\*[^/])*)(?:\\s*(<)([^>\\s]+)(>))?',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'entity.name.type.instance.jsdoc'},
              '4': {'name': 'keyword.operator.control.jsdoc'},
              '5': {'name': 'entity.name.type.instance.jsdoc'},
            },
            'match':
                '((@)borrows)\\s+((?:[^*/@\\s]|\\*[^/])+)\\s+(as)\\s+((?:[^*/@\\s]|\\*[^/])+)',
          },
          {
            'begin': '((@)example)\\s+',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'end': '(?=@|\\*/)',
            'name': 'meta.example.jsdoc',
            'patterns': [
              {'match': '^\\s\\*\\s+'},
              {
                'begin': '\\G(<)caption(>)',
                'beginCaptures': {
                  '0': {'name': 'entity.name.tag.inline.jsdoc'},
                  '1': {
                    'name': 'punctuation.definition.bracket.angle.begin.jsdoc',
                  },
                  '2': {
                    'name': 'punctuation.definition.bracket.angle.end.jsdoc',
                  },
                },
                'contentName': 'constant.other.description.jsdoc',
                'end': '(</)caption(>)|(?=\\*/)',
                'endCaptures': {
                  '0': {'name': 'entity.name.tag.inline.jsdoc'},
                  '1': {
                    'name': 'punctuation.definition.bracket.angle.begin.jsdoc',
                  },
                  '2': {
                    'name': 'punctuation.definition.bracket.angle.end.jsdoc',
                  },
                },
              },
              {
                'captures': {
                  '0': {'name': 'source.embedded.js'},
                },
                'match': '[^*@\\s](?:[^*]|\\*[^/])*',
              },
            ],
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'constant.language.symbol-type.jsdoc'},
            },
            'match':
                '((@)kind)\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\b',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'variable.other.link.underline.jsdoc'},
              '4': {'name': 'entity.name.type.instance.jsdoc'},
            },
            'match':
                '((@)see)\\s+(?:((?=https?://)(?:[^*\\s]|\\*[^/])+)|((?!https?://|(?:\\[[^]\\[]*])?\\{@(?:link|linkcode|linkplain|tutorial)\\b)(?:[^*/@\\s]|\\*[^/])+))',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'variable.other.jsdoc'},
            },
            'match':
                '((@)template)\\s+([\$A-Z_a-z][]\$.\\[\\w]*(?:\\s*,\\s*[\$A-Z_a-z][]\$.\\[\\w]*)*)',
          },
          {
            'begin': '((@)template)\\s+(?=\\{)',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'end': '(?=\\s|\\*/|[^]\$A-\\[_a-{}])',
            'patterns': [
              {'include': '#jsdoctype'},
              {
                'match': '([\$A-Z_a-z][]\$.\\[\\w]*)',
                'name': 'variable.other.jsdoc',
              },
            ],
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'variable.other.jsdoc'},
            },
            'match':
                '((@)(?:arg|argument|const|constant|member|namespace|param|var))\\s+([\$A-Z_a-z][]\$.\\[\\w]*)',
          },
          {
            'begin': '((@)typedef)\\s+(?=\\{)',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'end': '(?=\\s|\\*/|[^]\$A-\\[_a-{}])',
            'patterns': [
              {'include': '#jsdoctype'},
              {
                'match': '(?:[^*/@\\s]|\\*[^/])+',
                'name': 'entity.name.type.instance.jsdoc',
              },
            ],
          },
          {
            'begin':
                '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?=\\{)',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'end': '(?=\\s|\\*/|[^]\$A-\\[_a-{}])',
            'patterns': [
              {'include': '#jsdoctype'},
              {
                'match': '([\$A-Z_a-z][]\$.\\[\\w]*)',
                'name': 'variable.other.jsdoc',
              },
              {
                'captures': {
                  '1': {
                    'name':
                        'punctuation.definition.optional-value.begin.bracket.square.jsdoc',
                  },
                  '2': {'name': 'keyword.operator.assignment.jsdoc'},
                  '3': {'name': 'source.embedded.js'},
                  '4': {
                    'name':
                        'punctuation.definition.optional-value.end.bracket.square.jsdoc',
                  },
                  '5': {'name': 'invalid.illegal.syntax.jsdoc'},
                },
                'match':
                    '(\\[)\\s*[\$\\w]+(?:(?:\\[])?\\.[\$\\w]+)*(?:\\s*(=)\\s*((?>"(?:\\*(?!/)|\\\\(?!")|[^*\\\\])*?"|\'(?:\\*(?!/)|\\\\(?!\')|[^*\\\\])*?\'|\\[(?:\\*(?!/)|[^*])*?]|(?:\\*(?!/)|\\s(?!\\s*])|\\[.*?(?:]|(?=\\*/))|[^]*\\[\\s])*)*))?\\s*(?:(])((?:[^*\\s]|\\*[^/\\s])+)?|(?=\\*/))',
                'name': 'variable.other.jsdoc',
              },
            ],
          },
          {
            'begin':
                '((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\s+(?=\\{)',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'end': '(?=\\s|\\*/|[^]\$A-\\[_a-{}])',
            'patterns': [
              {'include': '#jsdoctype'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'entity.name.type.instance.jsdoc'},
            },
            'match':
                '((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\s+((?:[^*@{}\\s]|\\*[^/])+)',
          },
          {
            'begin': '((@)(?:default(?:value)?|license|version))\\s+((["\']))',
            'beginCaptures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'variable.other.jsdoc'},
              '4': {'name': 'punctuation.definition.string.begin.jsdoc'},
            },
            'contentName': 'variable.other.jsdoc',
            'end': '(\\3)|(?=\$|\\*/)',
            'endCaptures': {
              '0': {'name': 'variable.other.jsdoc'},
              '1': {'name': 'punctuation.definition.string.end.jsdoc'},
            },
          },
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
              '3': {'name': 'variable.other.jsdoc'},
            },
            'match':
                '((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^*\\s]+)',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'match':
                '(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\b',
            'name': 'storage.type.class.jsdoc',
          },
          {'include': '#inline-tags'},
          {
            'captures': {
              '1': {'name': 'storage.type.class.jsdoc'},
              '2': {'name': 'punctuation.definition.block.tag.jsdoc'},
            },
            'match': '((@)[\$_[:alpha:]][\$_[:alnum:]]*)(?=\\s+)',
          },
        ],
      },
      'enum-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([\$_[:alpha:]][\$_[:alnum:]]*)',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.modifier.js'},
          '4': {'name': 'storage.type.enum.js'},
          '5': {'name': 'entity.name.type.enum.js'},
        },
        'end': '(?<=})',
        'name': 'meta.enum.declaration.js',
        'patterns': [
          {'include': '#comment'},
          {
            'begin': '\\{',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.block.js'},
            },
            'end': '}',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.block.js'},
            },
            'patterns': [
              {'include': '#comment'},
              {
                'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)',
                'beginCaptures': {
                  '0': {'name': 'variable.other.enummember.js'},
                },
                'end': '(?=[,}]|\$)',
                'patterns': [
                  {'include': '#comment'},
                  {'include': '#variable-initializer'},
                ],
              },
              {
                'begin':
                    '(?=((\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+])))',
                'end': '(?=[,}]|\$)',
                'patterns': [
                  {'include': '#string'},
                  {'include': '#array-literal'},
                  {'include': '#comment'},
                  {'include': '#variable-initializer'},
                ],
              },
              {'include': '#punctuation-comma'},
            ],
          },
        ],
      },
      'export-declaration': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'keyword.control.as.js'},
              '3': {'name': 'storage.type.namespace.js'},
              '4': {'name': 'entity.name.type.module.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)\\s+(as)\\s+(namespace)\\s+([\$_[:alpha:]][\$_[:alnum:]]*)',
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?(?:\\s*(=)|\\s+(default)(?=\\s+))',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'keyword.control.type.js'},
              '3': {'name': 'keyword.operator.assignment.js'},
              '4': {'name': 'keyword.control.default.js'},
            },
            'end':
                '(?=\$|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'name': 'meta.export.default.js',
            'patterns': [
              {'include': '#interface-declaration'},
              {'include': '#expression'},
            ],
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?\\b(?!(\\\$)|(\\s*:))((?=\\s*[*{])|((?=\\s*[\$_[:alpha:]][\$_[:alnum:]]*([,\\s]))(?!\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)))',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'keyword.control.type.js'},
            },
            'end':
                '(?=\$|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'name': 'meta.export.js',
            'patterns': [
              {'include': '#import-export-declaration'},
            ],
          },
        ],
      },
      'expression': {
        'patterns': [
          {'include': '#expressionWithoutIdentifiers'},
          {'include': '#identifiers'},
          {'include': '#expressionPunctuations'},
        ],
      },
      'expression-inside-possibly-arrow-parens': {
        'patterns': [
          {'include': '#expressionWithoutIdentifiers'},
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#decorator'},
          {'include': '#destructuring-parameter'},
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {
                'name': 'entity.name.function.js variable.language.this.js',
              },
              '4': {'name': 'entity.name.function.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*(=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))|(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))))|(:\\s*(=>|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(<[^<>]*>)|[^(),<=>])+=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>))))))',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {'name': 'variable.parameter.js variable.language.this.js'},
              '4': {'name': 'variable.parameter.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*[,:]|\$)',
          },
          {'include': '#type-annotation'},
          {'include': '#variable-initializer'},
          {'match': ',', 'name': 'punctuation.separator.parameter.js'},
          {'include': '#identifiers'},
          {'include': '#expressionPunctuations'},
        ],
      },
      'expression-operators': {
        'patterns': [
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(await)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.control.flow.js',
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?=\\s*/\\*([^*]|(\\*[^/]))*\\*/\\s*\\*)',
            'beginCaptures': {
              '1': {'name': 'keyword.control.flow.js'},
            },
            'end': '\\*',
            'endCaptures': {
              '0': {'name': 'keyword.generator.asterisk.js'},
            },
            'patterns': [
              {'include': '#comment'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'keyword.control.flow.js'},
              '2': {'name': 'keyword.generator.asterisk.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(yield)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s*(\\*))?',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))delete(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.expression.delete.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))in(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()',
            'name': 'keyword.operator.expression.in.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))of(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()',
            'name': 'keyword.operator.expression.of.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))instanceof(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.expression.instanceof.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.new.js',
          },
          {'include': '#typeof-operator'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))void(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.expression.void.js',
          },
          {
            'captures': {
              '1': {'name': 'keyword.control.as.js'},
              '2': {'name': 'storage.modifier.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*(\$|[]),:;}]))',
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(as)|(satisfies))\\s+',
            'beginCaptures': {
              '1': {'name': 'keyword.control.as.js'},
              '2': {'name': 'keyword.control.satisfies.js'},
            },
            'end':
                '(?=^|[-\\])+,:;>?}]|\\|\\||&&|!==|\$|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as|satisfies)\\s+)|(\\s+<))',
            'patterns': [
              {'include': '#type'},
            ],
          },
          {'match': '\\.\\.\\.', 'name': 'keyword.operator.spread.js'},
          {
            'match': '(?:\\*|(?<!\\()/|[-%+])=',
            'name': 'keyword.operator.assignment.compound.js',
          },
          {
            'match': '(?:[\\&^]|<<|>>>??|\\|)=',
            'name': 'keyword.operator.assignment.compound.bitwise.js',
          },
          {'match': '<<|>>>?', 'name': 'keyword.operator.bitwise.shift.js'},
          {'match': '[!=]==?', 'name': 'keyword.operator.comparison.js'},
          {'match': '<=|>=|<>|[<>]', 'name': 'keyword.operator.relational.js'},
          {
            'captures': {
              '1': {'name': 'keyword.operator.logical.js'},
              '2': {'name': 'keyword.operator.assignment.compound.js'},
              '3': {'name': 'keyword.operator.arithmetic.js'},
            },
            'match': '(?<=[\$_[:alnum:]])(!)\\s*(?:(/=)|(/)(?![*/]))',
          },
          {
            'match': '!|&&|\\|\\||\\?\\?',
            'name': 'keyword.operator.logical.js',
          },
          {'match': '[\\&^|~]', 'name': 'keyword.operator.bitwise.js'},
          {'match': '=', 'name': 'keyword.operator.assignment.js'},
          {'match': '--', 'name': 'keyword.operator.decrement.js'},
          {'match': '\\+\\+', 'name': 'keyword.operator.increment.js'},
          {'match': '[-%*+/]', 'name': 'keyword.operator.arithmetic.js'},
          {
            'begin':
                '(?<=[]\$)_[:alnum:]])\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)+(?:(/=)|(/)(?![*/])))',
            'end': '(/=)|(/)(?!\\*([^*]|(\\*[^/]))*\\*/)',
            'endCaptures': {
              '1': {'name': 'keyword.operator.assignment.compound.js'},
              '2': {'name': 'keyword.operator.arithmetic.js'},
            },
            'patterns': [
              {'include': '#comment'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'keyword.operator.assignment.compound.js'},
              '2': {'name': 'keyword.operator.arithmetic.js'},
            },
            'match': '(?<=[]\$)_[:alnum:]])\\s*(?:(/=)|(/)(?![*/]))',
          },
        ],
      },
      'expressionPunctuations': {
        'patterns': [
          {'include': '#punctuation-comma'},
          {'include': '#punctuation-accessor'},
        ],
      },
      'expressionWithoutIdentifiers': {
        'patterns': [
          {'include': '#jsx'},
          {'include': '#string'},
          {'include': '#regex'},
          {'include': '#comment'},
          {'include': '#function-expression'},
          {'include': '#class-expression'},
          {'include': '#arrow-function'},
          {'include': '#paren-expression-possibly-arrow'},
          {'include': '#cast'},
          {'include': '#ternary-expression'},
          {'include': '#new-expr'},
          {'include': '#instanceof-expr'},
          {'include': '#object-literal'},
          {'include': '#expression-operators'},
          {'include': '#function-call'},
          {'include': '#literal'},
          {'include': '#support-objects'},
          {'include': '#paren-expression'},
        ],
      },
      'field-declaration': {
        'begin':
            '(?<!\\()(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s+)?(?=\\s*(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|(#?[\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(?:(?:(\\?)|(!))\\s*)?([,:;=}]|\$))',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.js'},
        },
        'end':
            '(?=[,;}]|\$|^((?!\\s*(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|(#?[\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(?:(?:(\\?)|(!))\\s*)?([,:;=]|\$))))|(?<=})',
        'name': 'meta.field.declaration.js',
        'patterns': [
          {'include': '#variable-initializer'},
          {'include': '#type-annotation'},
          {'include': '#string'},
          {'include': '#array-literal'},
          {'include': '#numeric-literal'},
          {'include': '#comment'},
          {
            'captures': {
              '1': {
                'name': 'meta.definition.property.js entity.name.function.js',
              },
              '2': {'name': 'keyword.operator.optional.js'},
              '3': {'name': 'keyword.operator.definiteassignment.js'},
            },
            'match':
                '(#?[\$_[:alpha:]][\$_[:alnum:]]*)(?:(\\?)|(!))?(?=\\s*\\s*(=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))|(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))))|(:\\s*(=>|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(<[^<>]*>)|[^(),<=>])+=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>))))))',
          },
          {
            'match': '#?[\$_[:alpha:]][\$_[:alnum:]]*',
            'name': 'meta.definition.property.js variable.object.property.js',
          },
          {'match': '\\?', 'name': 'keyword.operator.optional.js'},
          {'match': '!', 'name': 'keyword.operator.definiteassignment.js'},
        ],
      },
      'for-loop': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))for(?=((\\s+|(\\s*/\\*([^*]|(\\*[^/]))*\\*/\\s*))await)?\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)?(\\())',
        'beginCaptures': {
          '0': {'name': 'keyword.control.loop.js'},
        },
        'end': '(?<=\\))',
        'patterns': [
          {'include': '#comment'},
          {'match': 'await', 'name': 'keyword.control.loop.js'},
          {
            'begin': '\\(',
            'beginCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'patterns': [
              {'include': '#var-expr'},
              {'include': '#expression'},
              {'include': '#punctuation-semicolon'},
            ],
          },
        ],
      },
      'function-body': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#type-parameters'},
          {'include': '#function-parameters'},
          {'include': '#return-type'},
          {'include': '#type-function-return-type'},
          {'include': '#decl-block'},
          {'match': '\\*', 'name': 'keyword.generator.asterisk.js'},
        ],
      },
      'function-call': {
        'patterns': [
          {
            'begin':
                '(?=(((([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))|(?<=\\)))\\s*(?:(\\?\\.\\s*)|(!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)?\\())',
            'end':
                '(?<=\\))(?!(((([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))|(?<=\\)))\\s*(?:(\\?\\.\\s*)|(!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)?\\())',
            'patterns': [
              {
                'begin':
                    '(?=(([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))',
                'end':
                    '(?=\\s*(?:(\\?\\.\\s*)|(!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)?\\())',
                'name': 'meta.function-call.js',
                'patterns': [
                  {'include': '#function-call-target'},
                ],
              },
              {'include': '#comment'},
              {'include': '#function-call-optionals'},
              {'include': '#type-arguments'},
              {'include': '#paren-expression'},
            ],
          },
          {
            'begin':
                '(?=(((([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))|(?<=\\)))(<\\s*[(\\[{]\\s*)\$)',
            'end':
                '(?<=>)(?!(((([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))|(?<=\\)))(<\\s*[(\\[{]\\s*)\$)',
            'patterns': [
              {
                'begin':
                    '(?=(([\$_[:alpha:]][\$_[:alnum:]]*)(\\s*\\??\\.\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*))*)|(\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*))',
                'end': '(?=(<\\s*[(\\[{]\\s*)\$)',
                'name': 'meta.function-call.js',
                'patterns': [
                  {'include': '#function-call-target'},
                ],
              },
              {'include': '#comment'},
              {'include': '#function-call-optionals'},
              {'include': '#type-arguments'},
            ],
          },
        ],
      },
      'function-call-optionals': {
        'patterns': [
          {
            'match': '\\?\\.',
            'name': 'meta.function-call.js punctuation.accessor.optional.js',
          },
          {
            'match': '!',
            'name':
                'meta.function-call.js keyword.operator.definiteassignment.js',
          },
        ],
      },
      'function-call-target': {
        'patterns': [
          {'include': '#support-function-call-identifiers'},
          {
            'match': '(#?[\$_[:alpha:]][\$_[:alnum:]]*)',
            'name': 'entity.name.function.js',
          },
        ],
      },
      'function-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?(?:(async)\\s+)?(function)\\b(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([\$_[:alpha:]][\$_[:alnum:]]*))?\\s*',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.modifier.async.js'},
          '4': {'name': 'storage.type.function.js'},
          '5': {'name': 'keyword.generator.asterisk.js'},
          '6': {'name': 'meta.definition.function.js entity.name.function.js'},
        },
        'end':
            '(?=;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)|(?<=})',
        'name': 'meta.function.js',
        'patterns': [
          {'include': '#function-name'},
          {'include': '#function-body'},
        ],
      },
      'function-expression': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(async)\\s+)?(function)\\b(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([\$_[:alpha:]][\$_[:alnum:]]*))?\\s*',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.async.js'},
          '2': {'name': 'storage.type.function.js'},
          '3': {'name': 'keyword.generator.asterisk.js'},
          '4': {'name': 'meta.definition.function.js entity.name.function.js'},
        },
        'end': '(?=;)|(?<=})',
        'name': 'meta.function.expression.js',
        'patterns': [
          {'include': '#function-name'},
          {'include': '#single-line-comment-consuming-line-ending'},
          {'include': '#function-body'},
        ],
      },
      'function-name': {
        'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
        'name': 'meta.definition.function.js entity.name.function.js',
      },
      'function-parameters': {
        'begin': '\\(',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.parameters.begin.js'},
        },
        'end': '\\)',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.parameters.end.js'},
        },
        'name': 'meta.parameters.js',
        'patterns': [
          {'include': '#function-parameters-body'},
        ],
      },
      'function-parameters-body': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#decorator'},
          {'include': '#destructuring-parameter'},
          {'include': '#parameter-name'},
          {'include': '#parameter-type-annotation'},
          {'include': '#variable-initializer'},
          {'match': ',', 'name': 'punctuation.separator.parameter.js'},
        ],
      },
      'identifiers': {
        'patterns': [
          {'include': '#object-identifiers'},
          {
            'captures': {
              '1': {'name': 'punctuation.accessor.js'},
              '2': {'name': 'punctuation.accessor.optional.js'},
              '3': {'name': 'entity.name.function.js'},
            },
            'match':
                '(?:(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*)?([\$_[:alpha:]][\$_[:alnum:]]*)(?=\\s*=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.accessor.js'},
              '2': {'name': 'punctuation.accessor.optional.js'},
              '3': {'name': 'variable.other.constant.property.js'},
            },
            'match':
                '(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(#?\\p{upper}[\$_\\d[:upper:]]*)(?![\$_[:alnum:]])',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.accessor.js'},
              '2': {'name': 'punctuation.accessor.optional.js'},
              '3': {'name': 'variable.other.property.js'},
            },
            'match':
                '(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(#?[\$_[:alpha:]][\$_[:alnum:]]*)',
          },
          {
            'match': '(\\p{upper}[\$_\\d[:upper:]]*)(?![\$_[:alnum:]])',
            'name': 'variable.other.constant.js',
          },
          {
            'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
            'name': 'variable.other.readwrite.js',
          },
        ],
      },
      'if-statement': {
        'patterns': [
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bif\\s*(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))\\s*(?!\\{))',
            'end': '(?=;|\$|})',
            'patterns': [
              {'include': '#comment'},
              {
                'begin':
                    '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(if)\\s*(\\()',
                'beginCaptures': {
                  '1': {'name': 'keyword.control.conditional.js'},
                  '2': {'name': 'meta.brace.round.js'},
                },
                'end': '\\)',
                'endCaptures': {
                  '0': {'name': 'meta.brace.round.js'},
                },
                'patterns': [
                  {'include': '#expression'},
                ],
              },
              {
                'begin':
                    '(?<=\\))\\s*/(?![*/])(?=(?:[^/\\[\\\\]|\\\\.|\\[([^]\\\\]|\\\\.)*])+/([dgimsuvy]+|(?![*/])|(?=/\\*))(?!\\s*[\$0-9A-Z_a-z]))',
                'beginCaptures': {
                  '0': {'name': 'punctuation.definition.string.begin.js'},
                },
                'end': '(/)([dgimsuvy]*)',
                'endCaptures': {
                  '1': {'name': 'punctuation.definition.string.end.js'},
                  '2': {'name': 'keyword.other.js'},
                },
                'name': 'string.regexp.js',
                'patterns': [
                  {'include': '#regexp'},
                ],
              },
              {'include': '#statements'},
            ],
          },
        ],
      },
      'import-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(import)(?:\\s+(type)(?!\\s+from))?(?!\\s*[(:])(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'keyword.control.import.js'},
          '4': {'name': 'keyword.control.type.js'},
        },
        'end': '(?<!(?:^|[^\$._[:alnum:]])import)(?=;|\$|^)',
        'name': 'meta.import.js',
        'patterns': [
          {'include': '#single-line-comment-consuming-line-ending'},
          {'include': '#comment'},
          {'include': '#string'},
          {
            'begin': '(?<=(?:^|[^\$._[:alnum:]])import)(?!\\s*["\'])',
            'end': '\\bfrom\\b',
            'endCaptures': {
              '0': {'name': 'keyword.control.from.js'},
            },
            'patterns': [
              {'include': '#import-export-declaration'},
            ],
          },
          {'include': '#import-export-declaration'},
        ],
      },
      'import-equals-declaration': {
        'patterns': [
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(=)\\s*(require)\\s*(\\()',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'keyword.control.import.js'},
              '4': {'name': 'keyword.control.type.js'},
              '5': {'name': 'variable.other.readwrite.alias.js'},
              '6': {'name': 'keyword.operator.assignment.js'},
              '7': {'name': 'keyword.control.require.js'},
              '8': {'name': 'meta.brace.round.js'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'name': 'meta.import-equals.external.js',
            'patterns': [
              {'include': '#comment'},
              {'include': '#string'},
            ],
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(=)\\s*(?!require\\b)',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'keyword.control.import.js'},
              '4': {'name': 'keyword.control.type.js'},
              '5': {'name': 'variable.other.readwrite.alias.js'},
              '6': {'name': 'keyword.operator.assignment.js'},
            },
            'end': '(?=;|\$|^)',
            'name': 'meta.import-equals.internal.js',
            'patterns': [
              {'include': '#single-line-comment-consuming-line-ending'},
              {'include': '#comment'},
              {
                'captures': {
                  '1': {'name': 'entity.name.type.module.js'},
                  '2': {'name': 'punctuation.accessor.js'},
                  '3': {'name': 'punctuation.accessor.optional.js'},
                },
                'match':
                    '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))',
              },
              {
                'match': '([\$_[:alpha:]][\$_[:alnum:]]*)',
                'name': 'variable.other.readwrite.js',
              },
            ],
          },
        ],
      },
      'import-export-assert-clause': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(with)|(assert))\\s*(\\{)',
        'beginCaptures': {
          '1': {'name': 'keyword.control.with.js'},
          '2': {'name': 'keyword.control.assert.js'},
          '3': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {
            'match':
                '[\$_[:alpha:]][\$_[:alnum:]]*\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:)',
            'name': 'meta.object-literal.key.js',
          },
          {'match': ':', 'name': 'punctuation.separator.key-value.js'},
        ],
      },
      'import-export-block': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'meta.block.js',
        'patterns': [
          {'include': '#import-export-clause'},
        ],
      },
      'import-export-clause': {
        'patterns': [
          {'include': '#comment'},
          {
            'captures': {
              '1': {'name': 'keyword.control.type.js'},
              '2': {'name': 'keyword.control.default.js'},
              '3': {'name': 'constant.language.import-export-all.js'},
              '4': {'name': 'variable.other.readwrite.js'},
              '5': {'name': 'string.quoted.alias.js'},
              '12': {'name': 'keyword.control.as.js'},
              '13': {'name': 'keyword.control.default.js'},
              '14': {'name': 'variable.other.readwrite.alias.js'},
              '15': {'name': 'string.quoted.alias.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(type)\\s+)?(?:\\b(default)|(\\*)|\\b([\$_[:alpha:]][\$_[:alnum:]]*)|((\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)))\\s+(as)\\s+(?:(default(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|([\$_[:alpha:]][\$_[:alnum:]]*)|((\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)))',
          },
          {'include': '#punctuation-comma'},
          {'match': '\\*', 'name': 'constant.language.import-export-all.js'},
          {'match': '\\b(default)\\b', 'name': 'keyword.control.default.js'},
          {
            'captures': {
              '1': {'name': 'keyword.control.type.js'},
              '2': {'name': 'variable.other.readwrite.alias.js'},
              '3': {'name': 'string.quoted.alias.js'},
            },
            'match':
                '(?:\\b(type)\\s+)?(?:([\$_[:alpha:]][\$_[:alnum:]]*)|((\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)))',
          },
        ],
      },
      'import-export-declaration': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#import-export-block'},
          {'match': '\\bfrom\\b', 'name': 'keyword.control.from.js'},
          {'include': '#import-export-assert-clause'},
          {'include': '#import-export-clause'},
        ],
      },
      'indexer-declaration': {
        'begin':
            '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s*)?\\s*(\\[)\\s*([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?=:)',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.js'},
          '2': {'name': 'meta.brace.square.js'},
          '3': {'name': 'variable.parameter.js'},
        },
        'end': '(])\\s*(\\?\\s*)?|\$',
        'endCaptures': {
          '1': {'name': 'meta.brace.square.js'},
          '2': {'name': 'keyword.operator.optional.js'},
        },
        'name': 'meta.indexer.declaration.js',
        'patterns': [
          {'include': '#type-annotation'},
        ],
      },
      'indexer-mapped-type-declaration': {
        'begin':
            '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([-+])?(readonly)\\s*)?\\s*(\\[)\\s*([\$_[:alpha:]][\$_[:alnum:]]*)\\s+(in)\\s+',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.type.modifier.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'meta.brace.square.js'},
          '4': {'name': 'entity.name.type.js'},
          '5': {'name': 'keyword.operator.expression.in.js'},
        },
        'end': '(])([-+])?\\s*(\\?\\s*)?|\$',
        'endCaptures': {
          '1': {'name': 'meta.brace.square.js'},
          '2': {'name': 'keyword.operator.type.modifier.js'},
          '3': {'name': 'keyword.operator.optional.js'},
        },
        'name': 'meta.indexer.mappedtype.declaration.js',
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.control.as.js'},
            },
            'match': '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+',
          },
          {'include': '#type'},
        ],
      },
      'inline-tags': {
        'patterns': [
          {
            'captures': {
              '1': {
                'name': 'punctuation.definition.bracket.square.begin.jsdoc',
              },
              '2': {'name': 'punctuation.definition.bracket.square.end.jsdoc'},
            },
            'match':
                '(\\[)[^]]+(])(?=\\{@(?:link|linkcode|linkplain|tutorial))',
            'name': 'constant.other.description.jsdoc',
          },
          {
            'begin': '(\\{)((@)(?:link(?:code|plain)?|tutorial))\\s*',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.bracket.curly.begin.jsdoc'},
              '2': {'name': 'storage.type.class.jsdoc'},
              '3': {'name': 'punctuation.definition.inline.tag.jsdoc'},
            },
            'end': '}|(?=\\*/)',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.bracket.curly.end.jsdoc'},
            },
            'name': 'entity.name.type.instance.jsdoc',
            'patterns': [
              {
                'captures': {
                  '1': {'name': 'variable.other.link.underline.jsdoc'},
                  '2': {'name': 'punctuation.separator.pipe.jsdoc'},
                },
                'match': '\\G((?=https?://)(?:[^*|}\\s]|\\*/)+)(\\|)?',
              },
              {
                'captures': {
                  '1': {'name': 'variable.other.description.jsdoc'},
                  '2': {'name': 'punctuation.separator.pipe.jsdoc'},
                },
                'match': '\\G((?:[^*@{|}\\s]|\\*[^/])+)(\\|)?',
              },
            ],
          },
        ],
      },
      'instanceof-expr': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(instanceof)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.expression.instanceof.js'},
        },
        'end':
            '(?<=\\))|(?=[-\\])+,:;>?}]|\\|\\||&&|!==|\$|([!=]==?)|(([\\&^|~]\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s+instanceof(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[\$_[:alpha:]][\$_[:alnum:]]*)|(\\s*\\())))',
        'patterns': [
          {'include': '#type'},
        ],
      },
      'interface-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(?:(abstract)\\s+)?\\b(interface)\\b(?=\\s+|/[*/])',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.modifier.js'},
          '4': {'name': 'storage.type.interface.js'},
        },
        'end': '(?<=})',
        'name': 'meta.interface.js',
        'patterns': [
          {'include': '#comment'},
          {'include': '#class-or-interface-heritage'},
          {
            'captures': {
              '0': {'name': 'entity.name.type.interface.js'},
            },
            'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
          },
          {'include': '#type-parameters'},
          {'include': '#class-or-interface-body'},
        ],
      },
      'jsdoctype': {
        'patterns': [
          {
            'begin': '\\G(\\{)',
            'beginCaptures': {
              '0': {'name': 'entity.name.type.instance.jsdoc'},
              '1': {'name': 'punctuation.definition.bracket.curly.begin.jsdoc'},
            },
            'contentName': 'entity.name.type.instance.jsdoc',
            'end': '((}))\\s*|(?=\\*/)',
            'endCaptures': {
              '1': {'name': 'entity.name.type.instance.jsdoc'},
              '2': {'name': 'punctuation.definition.bracket.curly.end.jsdoc'},
            },
            'patterns': [
              {'include': '#brackets'},
            ],
          },
        ],
      },
      'jsx': {
        'patterns': [
          {'include': '#jsx-tag-without-attributes-in-expression'},
          {'include': '#jsx-tag-in-expression'},
        ],
      },
      'jsx-children': {
        'patterns': [
          {'include': '#jsx-tag-without-attributes'},
          {'include': '#jsx-tag'},
          {'include': '#jsx-evaluated-code'},
          {'include': '#jsx-entities'},
        ],
      },
      'jsx-entities': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'punctuation.definition.entity.js'},
              '3': {'name': 'punctuation.definition.entity.js'},
            },
            'match': '(&)([0-9A-Za-z]+|#[0-9]+|#x\\h+)(;)',
            'name': 'constant.character.entity.js',
          },
        ],
      },
      'jsx-evaluated-code': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.section.embedded.begin.js'},
        },
        'contentName': 'meta.embedded.expression.js',
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.section.embedded.end.js'},
        },
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'jsx-string-double-quoted': {
        'begin': '"',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.js'},
        },
        'end': '"',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.js'},
        },
        'name': 'string.quoted.double.js',
        'patterns': [
          {'include': '#jsx-entities'},
        ],
      },
      'jsx-string-single-quoted': {
        'begin': '\'',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.js'},
        },
        'end': '\'',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.js'},
        },
        'name': 'string.quoted.single.js',
        'patterns': [
          {'include': '#jsx-entities'},
        ],
      },
      'jsx-tag': {
        'begin':
            '(?=(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))(?=((<\\s*)|(\\s+))(?!\\?)|/?>))',
        'end':
            '(/>)|(</)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))?\\s*(>)',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.tag.end.js'},
          '2': {'name': 'punctuation.definition.tag.begin.js'},
          '3': {'name': 'entity.name.tag.namespace.js'},
          '4': {'name': 'punctuation.separator.namespace.js'},
          '5': {'name': 'entity.name.tag.js'},
          '6': {'name': 'support.class.component.js'},
          '7': {'name': 'punctuation.definition.tag.end.js'},
        },
        'name': 'meta.tag.js',
        'patterns': [
          {
            'begin':
                '(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))(?=((<\\s*)|(\\s+))(?!\\?)|/?>)',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.tag.begin.js'},
              '2': {'name': 'entity.name.tag.namespace.js'},
              '3': {'name': 'punctuation.separator.namespace.js'},
              '4': {'name': 'entity.name.tag.js'},
              '5': {'name': 'support.class.component.js'},
            },
            'end': '(?=/?>)',
            'patterns': [
              {'include': '#comment'},
              {'include': '#type-arguments'},
              {'include': '#jsx-tag-attributes'},
            ],
          },
          {
            'begin': '(>)',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.tag.end.js'},
            },
            'contentName': 'meta.jsx.children.js',
            'end': '(?=</)',
            'patterns': [
              {'include': '#jsx-children'},
            ],
          },
        ],
      },
      'jsx-tag-attribute-assignment': {
        'match': '=(?=\\s*(?:["\'{]|/\\*|//|\\n))',
        'name': 'keyword.operator.assignment.js',
      },
      'jsx-tag-attribute-name': {
        'captures': {
          '1': {'name': 'entity.other.attribute-name.namespace.js'},
          '2': {'name': 'punctuation.separator.namespace.js'},
          '3': {'name': 'entity.other.attribute-name.js'},
        },
        'match':
            '\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(:))?([\$_[:alpha:]][-\$_[:alnum:]]*)(?=[=\\s]|/?>|/\\*|//)',
      },
      'jsx-tag-attributes': {
        'begin': '\\s+',
        'end': '(?=/?>)',
        'name': 'meta.tag.attributes.js',
        'patterns': [
          {'include': '#comment'},
          {'include': '#jsx-tag-attribute-name'},
          {'include': '#jsx-tag-attribute-assignment'},
          {'include': '#jsx-string-double-quoted'},
          {'include': '#jsx-string-single-quoted'},
          {'include': '#jsx-evaluated-code'},
          {'include': '#jsx-tag-attributes-illegal'},
        ],
      },
      'jsx-tag-attributes-illegal': {
        'match': '\\S+',
        'name': 'invalid.illegal.attribute.js',
      },
      'jsx-tag-in-expression': {
        'begin':
            '(?<!\\+\\+|--)(?<=[(*,:=>?\\[{]|&&|\\|\\||\\?|\\*/|^await|[^\$._[:alnum:]]await|^return|[^\$._[:alnum:]]return|^default|[^\$._[:alnum:]]default|^yield|[^\$._[:alnum:]]yield|^)\\s*(?!<\\s*[\$_[:alpha:]][\$_[:alnum:]]*((\\s+extends\\s+[^=>])|,))(?=(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))(?=((<\\s*)|(\\s+))(?!\\?)|/?>))',
        'end':
            '(?!(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))(?=((<\\s*)|(\\s+))(?!\\?)|/?>))',
        'patterns': [
          {'include': '#jsx-tag'},
        ],
      },
      'jsx-tag-without-attributes': {
        'begin':
            '(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))?\\s*(>)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.tag.begin.js'},
          '2': {'name': 'entity.name.tag.namespace.js'},
          '3': {'name': 'punctuation.separator.namespace.js'},
          '4': {'name': 'entity.name.tag.js'},
          '5': {'name': 'support.class.component.js'},
          '6': {'name': 'punctuation.definition.tag.end.js'},
        },
        'contentName': 'meta.jsx.children.js',
        'end':
            '(</)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))?\\s*(>)',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.tag.begin.js'},
          '2': {'name': 'entity.name.tag.namespace.js'},
          '3': {'name': 'punctuation.separator.namespace.js'},
          '4': {'name': 'entity.name.tag.js'},
          '5': {'name': 'support.class.component.js'},
          '6': {'name': 'punctuation.definition.tag.end.js'},
        },
        'name': 'meta.tag.without-attributes.js',
        'patterns': [
          {'include': '#jsx-children'},
        ],
      },
      'jsx-tag-without-attributes-in-expression': {
        'begin':
            '(?<!\\+\\+|--)(?<=[(*,:=>?\\[{]|&&|\\|\\||\\?|\\*/|^await|[^\$._[:alnum:]]await|^return|[^\$._[:alnum:]]return|^default|[^\$._[:alnum:]]default|^yield|[^\$._[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))?\\s*(>))',
        'end':
            '(?!(<)\\s*(?:([\$_[:alpha:]][-\$._[:alnum:]]*)(?<![-.])(:))?((?:[a-z][0-9a-z]*|([\$_[:alpha:]][-\$._[:alnum:]]*))(?<![-.]))?\\s*(>))',
        'patterns': [
          {'include': '#jsx-tag-without-attributes'},
        ],
      },
      'label': {
        'patterns': [
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(:)(?=\\s*\\{)',
            'beginCaptures': {
              '1': {'name': 'entity.name.label.js'},
              '2': {'name': 'punctuation.separator.label.js'},
            },
            'end': '(?<=})',
            'patterns': [
              {'include': '#decl-block'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'entity.name.label.js'},
              '2': {'name': 'punctuation.separator.label.js'},
            },
            'match': '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(:)',
          },
        ],
      },
      'literal': {
        'patterns': [
          {'include': '#numeric-literal'},
          {'include': '#boolean-literal'},
          {'include': '#null-literal'},
          {'include': '#undefined-literal'},
          {'include': '#numericConstant-literal'},
          {'include': '#array-literal'},
          {'include': '#this-literal'},
          {'include': '#super-literal'},
        ],
      },
      'method-declaration': {
        'patterns': [
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(p(?:ublic|rivate|rotected))\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?\\s*\\b(constructor)\\b(?!:)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'storage.modifier.js'},
              '4': {'name': 'storage.modifier.async.js'},
              '5': {'name': 'storage.type.js'},
            },
            'end': '(?=[,;}]|\$)|(?<=})',
            'name': 'meta.method.declaration.js',
            'patterns': [
              {'include': '#method-declaration-name'},
              {'include': '#function-body'},
            ],
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(p(?:ublic|rivate|rotected))\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\s*\\b(new)\\b(?!:)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))|(?:(\\*)\\s*)?)(?=\\s*((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\()',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'storage.modifier.js'},
              '4': {'name': 'storage.modifier.async.js'},
              '5': {'name': 'keyword.operator.new.js'},
              '6': {'name': 'keyword.generator.asterisk.js'},
            },
            'end': '(?=[,;}]|\$)|(?<=})',
            'name': 'meta.method.declaration.js',
            'patterns': [
              {'include': '#method-declaration-name'},
              {'include': '#function-body'},
            ],
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(override)\\s+)?(?:\\b(p(?:ublic|rivate|rotected))\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\b([gs]et)\\s+)?(?:(\\*)\\s*)?(?=\\s*((\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(\\??))\\s*((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\()',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'storage.modifier.js'},
              '4': {'name': 'storage.modifier.async.js'},
              '5': {'name': 'storage.type.property.js'},
              '6': {'name': 'keyword.generator.asterisk.js'},
            },
            'end': '(?=[,;}]|\$)|(?<=})',
            'name': 'meta.method.declaration.js',
            'patterns': [
              {'include': '#method-declaration-name'},
              {'include': '#function-body'},
            ],
          },
        ],
      },
      'method-declaration-name': {
        'begin':
            '(?=(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(\\??)\\s*[(<])',
        'end': '(?=[(<])',
        'patterns': [
          {'include': '#string'},
          {'include': '#array-literal'},
          {'include': '#numeric-literal'},
          {
            'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
            'name': 'meta.definition.method.js entity.name.function.js',
          },
          {'match': '\\?', 'name': 'keyword.operator.optional.js'},
        ],
      },
      'namespace-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(namespace|module)\\s+(?=["\$\'_`[:alpha:]])',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.type.namespace.js'},
        },
        'end':
            '(?<=})|(?=;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
        'name': 'meta.namespace.declaration.js',
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {
            'match': '([\$_[:alpha:]][\$_[:alnum:]]*)',
            'name': 'entity.name.type.module.js',
          },
          {'include': '#punctuation-accessor'},
          {'include': '#decl-block'},
        ],
      },
      'new-expr': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.new.js'},
        },
        'end':
            '(?<=\\))|(?=[-\\])+,:;>?}]|\\|\\||&&|!==|\$|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))new(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))function((\\s+[\$_[:alpha:]][\$_[:alnum:]]*)|(\\s*\\())))',
        'name': 'new.expr.js',
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'null-literal': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))null(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'constant.language.null.js',
      },
      'numeric-literal': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.type.numeric.bigint.js'},
            },
            'match': '\\b(?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$)',
            'name': 'constant.numeric.hex.js',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.numeric.bigint.js'},
            },
            'match': '\\b(?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$)',
            'name': 'constant.numeric.binary.js',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.numeric.bigint.js'},
            },
            'match': '\\b(?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$)',
            'name': 'constant.numeric.octal.js',
          },
          {
            'captures': {
              '0': {'name': 'constant.numeric.decimal.js'},
              '1': {'name': 'meta.delimiter.decimal.period.js'},
              '2': {'name': 'storage.type.numeric.bigint.js'},
              '3': {'name': 'meta.delimiter.decimal.period.js'},
              '4': {'name': 'storage.type.numeric.bigint.js'},
              '5': {'name': 'meta.delimiter.decimal.period.js'},
              '6': {'name': 'storage.type.numeric.bigint.js'},
              '7': {'name': 'storage.type.numeric.bigint.js'},
              '8': {'name': 'meta.delimiter.decimal.period.js'},
              '9': {'name': 'storage.type.numeric.bigint.js'},
              '10': {'name': 'meta.delimiter.decimal.period.js'},
              '11': {'name': 'storage.type.numeric.bigint.js'},
              '12': {'name': 'meta.delimiter.decimal.period.js'},
              '13': {'name': 'storage.type.numeric.bigint.js'},
              '14': {'name': 'storage.type.numeric.bigint.js'},
            },
            'match':
                '(?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$)',
          },
        ],
      },
      'numericConstant-literal': {
        'patterns': [
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))NaN(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'constant.language.nan.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Infinity(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'constant.language.infinity.js',
          },
        ],
      },
      'object-binding-element': {
        'patterns': [
          {'include': '#comment'},
          {
            'begin':
                '(?=(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(:))',
            'end': '(?=[,}])',
            'patterns': [
              {'include': '#object-binding-element-propertyName'},
              {'include': '#binding-element'},
            ],
          },
          {'include': '#object-binding-pattern'},
          {'include': '#destructuring-variable-rest'},
          {'include': '#variable-initializer'},
          {'include': '#punctuation-comma'},
        ],
      },
      'object-binding-element-const': {
        'patterns': [
          {'include': '#comment'},
          {
            'begin':
                '(?=(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(:))',
            'end': '(?=[,}])',
            'patterns': [
              {'include': '#object-binding-element-propertyName'},
              {'include': '#binding-element-const'},
            ],
          },
          {'include': '#object-binding-pattern-const'},
          {'include': '#destructuring-variable-rest-const'},
          {'include': '#variable-initializer'},
          {'include': '#punctuation-comma'},
        ],
      },
      'object-binding-element-propertyName': {
        'begin':
            '(?=(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(:))',
        'end': '(:)',
        'endCaptures': {
          '0': {'name': 'punctuation.destructuring.js'},
        },
        'patterns': [
          {'include': '#string'},
          {'include': '#array-literal'},
          {'include': '#numeric-literal'},
          {
            'match': '([\$_[:alpha:]][\$_[:alnum:]]*)',
            'name': 'variable.object.property.js',
          },
        ],
      },
      'object-binding-pattern': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\{)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'patterns': [
          {'include': '#object-binding-element'},
        ],
      },
      'object-binding-pattern-const': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\{)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'patterns': [
          {'include': '#object-binding-element-const'},
        ],
      },
      'object-identifiers': {
        'patterns': [
          {
            'match':
                '([\$_[:alpha:]][\$_[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\\$))',
            'name': 'support.class.js',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.accessor.js'},
              '2': {'name': 'punctuation.accessor.optional.js'},
              '3': {'name': 'variable.other.constant.object.property.js'},
              '4': {'name': 'variable.other.object.property.js'},
            },
            'match':
                '(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(?:(#?\\p{upper}[\$_\\d[:upper:]]*)|(#?[\$_[:alpha:]][\$_[:alnum:]]*))(?=\\s*\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*)',
          },
          {
            'captures': {
              '1': {'name': 'variable.other.constant.object.js'},
              '2': {'name': 'variable.other.object.js'},
            },
            'match':
                '(?:(\\p{upper}[\$_\\d[:upper:]]*)|([\$_[:alpha:]][\$_[:alnum:]]*))(?=\\s*\\??\\.\\s*#?[\$_[:alpha:]][\$_[:alnum:]]*)',
          },
        ],
      },
      'object-literal': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'meta.objectliteral.js',
        'patterns': [
          {'include': '#object-member'},
        ],
      },
      'object-literal-method-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b([gs]et)\\s+)?(?:(\\*)\\s*)?(?=\\s*((\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(\\??))\\s*((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\()',
        'beginCaptures': {
          '1': {'name': 'storage.modifier.async.js'},
          '2': {'name': 'storage.type.property.js'},
          '3': {'name': 'keyword.generator.asterisk.js'},
        },
        'end': '(?=[,;}])|(?<=})',
        'name': 'meta.method.declaration.js',
        'patterns': [
          {'include': '#method-declaration-name'},
          {'include': '#function-body'},
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b([gs]et)\\s+)?(?:(\\*)\\s*)?(?=\\s*((\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(\\??))\\s*((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\()',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.async.js'},
              '2': {'name': 'storage.type.property.js'},
              '3': {'name': 'keyword.generator.asterisk.js'},
            },
            'end': '(?=[(<])',
            'patterns': [
              {'include': '#method-declaration-name'},
            ],
          },
        ],
      },
      'object-member': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#object-literal-method-declaration'},
          {
            'begin': '(?=\\[)',
            'end': '(?=:)|((?<=])(?=\\s*[(<]))',
            'name': 'meta.object.member.js meta.object-literal.key.js',
            'patterns': [
              {'include': '#comment'},
              {'include': '#array-literal'},
            ],
          },
          {
            'begin': '(?=["\'`])',
            'end':
                '(?=:)|((?<=["\'`])(?=((\\s*[(,<}])|(\\s+(as|satisifies)\\s+))))',
            'name': 'meta.object.member.js meta.object-literal.key.js',
            'patterns': [
              {'include': '#comment'},
              {'include': '#string'},
            ],
          },
          {
            'begin':
                '(?=\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$)))',
            'end': '(?=:)|(?=\\s*([(,<}])|(\\s+as|satisifies\\s+))',
            'name': 'meta.object.member.js meta.object-literal.key.js',
            'patterns': [
              {'include': '#comment'},
              {'include': '#numeric-literal'},
            ],
          },
          {
            'begin': '(?<=[]"\'`])(?=\\s*[(<])',
            'end': '(?=[,;}])|(?<=})',
            'name': 'meta.method.declaration.js',
            'patterns': [
              {'include': '#function-body'},
            ],
          },
          {
            'captures': {
              '0': {'name': 'meta.object-literal.key.js'},
              '1': {'name': 'constant.numeric.decimal.js'},
            },
            'match':
                '(?![\$_[:alpha:]])(\\d+)\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:)',
            'name': 'meta.object.member.js',
          },
          {
            'captures': {
              '0': {'name': 'meta.object-literal.key.js'},
              '1': {'name': 'entity.name.function.js'},
            },
            'match':
                '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:(\\s*/\\*([^*]|(\\*[^/]))*\\*/)*\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))',
            'name': 'meta.object.member.js',
          },
          {
            'captures': {
              '0': {'name': 'meta.object-literal.key.js'},
            },
            'match':
                '[\$_[:alpha:]][\$_[:alnum:]]*\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:)',
            'name': 'meta.object.member.js',
          },
          {
            'begin': '\\.\\.\\.',
            'beginCaptures': {
              '0': {'name': 'keyword.operator.spread.js'},
            },
            'end': '(?=[,}])',
            'name': 'meta.object.member.js',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'variable.other.readwrite.js'},
            },
            'match': '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?=[,}]|\$|//|/\\*)',
            'name': 'meta.object.member.js',
          },
          {
            'captures': {
              '1': {'name': 'keyword.control.as.js'},
              '2': {'name': 'storage.modifier.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*([,}]|\$))',
            'name': 'meta.object.member.js',
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(as)|(satisfies))\\s+',
            'beginCaptures': {
              '1': {'name': 'keyword.control.as.js'},
              '2': {'name': 'keyword.control.satisfies.js'},
            },
            'end':
                '(?=[-\\])+,:;>?}]|\\|\\||&&|!==|\$|^|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as|satisifies)\\s+))',
            'name': 'meta.object.member.js',
            'patterns': [
              {'include': '#type'},
            ],
          },
          {
            'begin': '(?=[\$_[:alpha:]][\$_[:alnum:]]*\\s*=)',
            'end': '(?=[,}]|\$|//|/\\*)',
            'name': 'meta.object.member.js',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {
            'begin': ':',
            'beginCaptures': {
              '0': {
                'name':
                    'meta.object-literal.key.js punctuation.separator.key-value.js',
              },
            },
            'end': '(?=[,}])',
            'name': 'meta.object.member.js',
            'patterns': [
              {
                'begin':
                    '(?<=:)\\s*(async)?(?=\\s*(<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))',
                'beginCaptures': {
                  '1': {'name': 'storage.modifier.async.js'},
                },
                'end': '(?<=\\))',
                'patterns': [
                  {'include': '#type-parameters'},
                  {
                    'begin': '\\(',
                    'beginCaptures': {
                      '0': {'name': 'meta.brace.round.js'},
                    },
                    'end': '\\)',
                    'endCaptures': {
                      '0': {'name': 'meta.brace.round.js'},
                    },
                    'patterns': [
                      {'include': '#expression-inside-possibly-arrow-parens'},
                    ],
                  },
                ],
              },
              {
                'begin':
                    '(?<=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))',
                'beginCaptures': {
                  '1': {'name': 'storage.modifier.async.js'},
                  '2': {'name': 'meta.brace.round.js'},
                },
                'end': '\\)',
                'endCaptures': {
                  '0': {'name': 'meta.brace.round.js'},
                },
                'patterns': [
                  {'include': '#expression-inside-possibly-arrow-parens'},
                ],
              },
              {
                'begin': '(?<=:)\\s*(async)?\\s*(?=<\\s*\$)',
                'beginCaptures': {
                  '1': {'name': 'storage.modifier.async.js'},
                },
                'end': '(?<=>)',
                'patterns': [
                  {'include': '#type-parameters'},
                ],
              },
              {
                'begin':
                    '(?<=>)\\s*(\\()(?=\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))',
                'beginCaptures': {
                  '1': {'name': 'meta.brace.round.js'},
                },
                'end': '\\)',
                'endCaptures': {
                  '0': {'name': 'meta.brace.round.js'},
                },
                'patterns': [
                  {'include': '#expression-inside-possibly-arrow-parens'},
                ],
              },
              {'include': '#possibly-arrow-return-type'},
              {'include': '#expression'},
            ],
          },
          {'include': '#punctuation-comma'},
          {'include': '#decl-block'},
        ],
      },
      'parameter-array-binding-pattern': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\[)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.array.js'},
        },
        'patterns': [
          {'include': '#parameter-binding-element'},
          {'include': '#punctuation-comma'},
        ],
      },
      'parameter-binding-element': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#string'},
          {'include': '#numeric-literal'},
          {'include': '#regex'},
          {'include': '#parameter-object-binding-pattern'},
          {'include': '#parameter-array-binding-pattern'},
          {'include': '#destructuring-parameter-rest'},
          {'include': '#variable-initializer'},
        ],
      },
      'parameter-name': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {
                'name': 'entity.name.function.js variable.language.this.js',
              },
              '4': {'name': 'entity.name.function.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*(=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))|(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))))|(:\\s*(=>|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(<[^<>]*>)|[^(),<=>])+=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>))))))',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {'name': 'variable.parameter.js variable.language.this.js'},
              '4': {'name': 'variable.parameter.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)',
          },
        ],
      },
      'parameter-object-binding-element': {
        'patterns': [
          {'include': '#comment'},
          {
            'begin':
                '(?=(\\b((?<!\\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Bb][01][01_]*(n)?\\b(?!\\\$))|\\b((?<!\\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\\$))|((?<!\\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\\$))|([\$_[:alpha:]][\$_[:alnum:]]*)|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+]))\\s*(:))',
            'end': '(?=[,}])',
            'patterns': [
              {'include': '#object-binding-element-propertyName'},
              {'include': '#parameter-binding-element'},
              {'include': '#paren-expression'},
            ],
          },
          {'include': '#parameter-object-binding-pattern'},
          {'include': '#destructuring-parameter-rest'},
          {'include': '#variable-initializer'},
          {'include': '#punctuation-comma'},
        ],
      },
      'parameter-object-binding-pattern': {
        'begin': '(?:(\\.\\.\\.)\\s*)?(\\{)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.rest.js'},
          '2': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.binding-pattern.object.js'},
        },
        'patterns': [
          {'include': '#parameter-object-binding-element'},
        ],
      },
      'parameter-type-annotation': {
        'patterns': [
          {
            'begin': '(:)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.type.annotation.js'},
            },
            'end': '(?=[),])|(?==[^>])',
            'name': 'meta.type.annotation.js',
            'patterns': [
              {'include': '#type'},
            ],
          },
        ],
      },
      'paren-expression': {
        'begin': '\\(',
        'beginCaptures': {
          '0': {'name': 'meta.brace.round.js'},
        },
        'end': '\\)',
        'endCaptures': {
          '0': {'name': 'meta.brace.round.js'},
        },
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'paren-expression-possibly-arrow': {
        'patterns': [
          {
            'begin':
                '(?<=[(,=])\\s*(async)?(?=\\s*((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.async.js'},
            },
            'end': '(?<=\\))',
            'patterns': [
              {
                'include':
                    '#paren-expression-possibly-arrow-with-typeparameters',
              },
            ],
          },
          {
            'begin':
                '(?<=[(,=]|=>|^return|[^\$._[:alnum:]]return)\\s*(async)?(?=\\s*((((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*))?\\()|(<)|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)))\\s*\$)',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.async.js'},
            },
            'end': '(?<=\\))',
            'patterns': [
              {
                'include':
                    '#paren-expression-possibly-arrow-with-typeparameters',
              },
            ],
          },
          {'include': '#possibly-arrow-return-type'},
        ],
      },
      'paren-expression-possibly-arrow-with-typeparameters': {
        'patterns': [
          {'include': '#type-parameters'},
          {
            'begin': '\\(',
            'beginCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'patterns': [
              {'include': '#expression-inside-possibly-arrow-parens'},
            ],
          },
        ],
      },
      'possibly-arrow-return-type': {
        'begin':
            '(?<=\\)|^)\\s*(:)(?=\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*=>)',
        'beginCaptures': {
          '1': {
            'name':
                'meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js',
          },
        },
        'contentName': 'meta.arrow.js meta.return.type.arrow.js',
        'end':
            '(?==>|\\{|^(\\s*(export|function|class|interface|let|var|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|const|import|enum|namespace|module|type|abstract|declare)\\s+))',
        'patterns': [
          {'include': '#arrow-return-type-body'},
        ],
      },
      'property-accessor': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(accessor|get|set)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'storage.type.property.js',
      },
      'punctuation-accessor': {
        'captures': {
          '1': {'name': 'punctuation.accessor.js'},
          '2': {'name': 'punctuation.accessor.optional.js'},
        },
        'match': '(\\.)|(\\?\\.(?!\\s*\\d))',
      },
      'punctuation-comma': {
        'match': ',',
        'name': 'punctuation.separator.comma.js',
      },
      'punctuation-semicolon': {
        'match': ';',
        'name': 'punctuation.terminator.statement.js',
      },
      'qstring-double': {
        'begin': '"',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.js'},
        },
        'end': '(")|([^\\n\\\\])\$',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.string.end.js'},
          '2': {'name': 'invalid.illegal.newline.js'},
        },
        'name': 'string.quoted.double.js',
        'patterns': [
          {'include': '#string-character-escape'},
        ],
      },
      'qstring-single': {
        'begin': '\'',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.js'},
        },
        'end': '(\')|([^\\n\\\\])\$',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.string.end.js'},
          '2': {'name': 'invalid.illegal.newline.js'},
        },
        'name': 'string.quoted.single.js',
        'patterns': [
          {'include': '#string-character-escape'},
        ],
      },
      'regex': {
        'patterns': [
          {
            'begin':
                '(?<!\\+\\+|--|})(?<=[!(+,:=?\\[]|^return|[^\$._[:alnum:]]return|^case|[^\$._[:alnum:]]case|=>|&&|\\|\\||\\*/)\\s*(/)(?![*/])(?=(?:[^()/\\[\\\\]|\\\\.|\\[([^]\\\\]|\\\\.)+]|\\(([^)\\\\]|\\\\.)+\\))+/([dgimsuvy]+|(?![*/])|(?=/\\*))(?!\\s*[\$0-9A-Z_a-z]))',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.string.begin.js'},
            },
            'end': '(/)([dgimsuvy]*)',
            'endCaptures': {
              '1': {'name': 'punctuation.definition.string.end.js'},
              '2': {'name': 'keyword.other.js'},
            },
            'name': 'string.regexp.js',
            'patterns': [
              {'include': '#regexp'},
            ],
          },
          {
            'begin':
                '((?<![]\$)_[:alnum:]]|\\+\\+|--|}|\\*/)|((?<=^return|[^\$._[:alnum:]]return|^case|[^\$._[:alnum:]]case))\\s*)/(?![*/])(?=(?:[^/\\[\\\\]|\\\\.|\\[([^]\\\\]|\\\\.)*])+/([dgimsuvy]+|(?![*/])|(?=/\\*))(?!\\s*[\$0-9A-Z_a-z]))',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.string.begin.js'},
            },
            'end': '(/)([dgimsuvy]*)',
            'endCaptures': {
              '1': {'name': 'punctuation.definition.string.end.js'},
              '2': {'name': 'keyword.other.js'},
            },
            'name': 'string.regexp.js',
            'patterns': [
              {'include': '#regexp'},
            ],
          },
        ],
      },
      'regex-character-class': {
        'patterns': [
          {
            'match': '\\\\[DSWdfnrstvw]|\\.',
            'name': 'constant.other.character-class.regexp',
          },
          {
            'match': '\\\\([0-7]{3}|x\\h{2}|u\\h{4})',
            'name': 'constant.character.numeric.regexp',
          },
          {'match': '\\\\c[A-Z]', 'name': 'constant.character.control.regexp'},
          {
            'match': '\\\\.',
            'name': 'constant.character.escape.backslash.regexp',
          },
        ],
      },
      'regexp': {
        'patterns': [
          {'match': '\\\\[Bb]|[\$^]', 'name': 'keyword.control.anchor.regexp'},
          {
            'captures': {
              '0': {'name': 'keyword.other.back-reference.regexp'},
              '1': {'name': 'variable.other.regexp'},
            },
            'match': '\\\\(?:[1-9]\\d*|k<([\$A-Z_a-z][\$\\w]*)>)',
          },
          {
            'match': '[*+?]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)}\\??',
            'name': 'keyword.operator.quantifier.regexp',
          },
          {'match': '\\|', 'name': 'keyword.operator.or.regexp'},
          {
            'begin': '(\\()((\\?=)|(\\?!)|(\\?<=)|(\\?<!))',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.group.regexp'},
              '2': {'name': 'punctuation.definition.group.assertion.regexp'},
              '3': {'name': 'meta.assertion.look-ahead.regexp'},
              '4': {'name': 'meta.assertion.negative-look-ahead.regexp'},
              '5': {'name': 'meta.assertion.look-behind.regexp'},
              '6': {'name': 'meta.assertion.negative-look-behind.regexp'},
            },
            'end': '(\\))',
            'endCaptures': {
              '1': {'name': 'punctuation.definition.group.regexp'},
            },
            'name': 'meta.group.assertion.regexp',
            'patterns': [
              {'include': '#regexp'},
            ],
          },
          {
            'begin': '\\((?:(\\?:)|\\?<([\$A-Z_a-z][\$\\w]*)>)?',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.group.regexp'},
              '1': {'name': 'punctuation.definition.group.no-capture.regexp'},
              '2': {'name': 'variable.other.regexp'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.group.regexp'},
            },
            'name': 'meta.group.regexp',
            'patterns': [
              {'include': '#regexp'},
            ],
          },
          {
            'begin': '(\\[)(\\^)?',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.character-class.regexp'},
              '2': {'name': 'keyword.operator.negation.regexp'},
            },
            'end': '(])',
            'endCaptures': {
              '1': {'name': 'punctuation.definition.character-class.regexp'},
            },
            'name': 'constant.other.character-class.set.regexp',
            'patterns': [
              {
                'captures': {
                  '1': {'name': 'constant.character.numeric.regexp'},
                  '2': {'name': 'constant.character.control.regexp'},
                  '3': {'name': 'constant.character.escape.backslash.regexp'},
                  '4': {'name': 'constant.character.numeric.regexp'},
                  '5': {'name': 'constant.character.control.regexp'},
                  '6': {'name': 'constant.character.escape.backslash.regexp'},
                },
                'match':
                    '(?:.|(\\\\(?:[0-7]{3}|x\\h{2}|u\\h{4}))|(\\\\c[A-Z])|(\\\\.))-(?:[^]\\\\]|(\\\\(?:[0-7]{3}|x\\h{2}|u\\h{4}))|(\\\\c[A-Z])|(\\\\.))',
                'name': 'constant.other.character-class.range.regexp',
              },
              {'include': '#regex-character-class'},
            ],
          },
          {'include': '#regex-character-class'},
        ],
      },
      'return-type': {
        'patterns': [
          {
            'begin': '(?<=\\))\\s*(:)(?=\\s*\\S)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.type.annotation.js'},
            },
            'end': '(?<![\\&:|])(?=\$|^|[,;{}]|//)',
            'name': 'meta.return.type.js',
            'patterns': [
              {'include': '#return-type-core'},
            ],
          },
          {
            'begin': '(?<=\\))\\s*(:)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.type.annotation.js'},
            },
            'end': '(?<![\\&:|])((?=[,;{}]|//|^\\s*\$)|((?<=\\S)(?=\\s*\$)))',
            'name': 'meta.return.type.js',
            'patterns': [
              {'include': '#return-type-core'},
            ],
          },
        ],
      },
      'return-type-core': {
        'patterns': [
          {'include': '#comment'},
          {
            'begin': '(?<=[\\&:|])(?=\\s*\\{)',
            'end': '(?<=})',
            'patterns': [
              {'include': '#type-object'},
            ],
          },
          {'include': '#type-predicate-operator'},
          {'include': '#type'},
        ],
      },
      'shebang': {
        'captures': {
          '1': {'name': 'punctuation.definition.comment.js'},
        },
        'match': '\\A(#!).*(?=\$)',
        'name': 'comment.line.shebang.js',
      },
      'single-line-comment-consuming-line-ending': {
        'begin': '(^[\\t ]+)?((//)(?:\\s*((@)internal)(?=\\s|\$))?)',
        'beginCaptures': {
          '1': {'name': 'punctuation.whitespace.comment.leading.js'},
          '2': {'name': 'comment.line.double-slash.js'},
          '3': {'name': 'punctuation.definition.comment.js'},
          '4': {'name': 'storage.type.internaldeclaration.js'},
          '5': {'name': 'punctuation.decorator.internaldeclaration.js'},
        },
        'contentName': 'comment.line.double-slash.js',
        'end': '(?=^)',
      },
      'statements': {
        'patterns': [
          {'include': '#declaration'},
          {'include': '#control-statement'},
          {'include': '#after-operator-block-as-object-literal'},
          {'include': '#decl-block'},
          {'include': '#label'},
          {'include': '#expression'},
          {'include': '#punctuation-semicolon'},
          {'include': '#string'},
          {'include': '#comment'},
        ],
      },
      'string': {
        'patterns': [
          {'include': '#qstring-single'},
          {'include': '#qstring-double'},
          {'include': '#template'},
        ],
      },
      'string-character-escape': {
        'match':
            '\\\\(x\\h{2}|u\\h{4}|u\\{\\h+}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|\$)',
        'name': 'constant.character.escape.js',
      },
      'super-literal': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))super\\b(?!\\\$)',
        'name': 'variable.language.super.js',
      },
      'support-function-call-identifiers': {
        'patterns': [
          {'include': '#literal'},
          {'include': '#support-objects'},
          {'include': '#object-identifiers'},
          {'include': '#punctuation-accessor'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*\\(\\s*["\'`])',
            'name': 'keyword.operator.expression.import.js',
          },
        ],
      },
      'support-objects': {
        'patterns': [
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(arguments)\\b(?!\\\$)',
            'name': 'variable.language.arguments.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(Promise)\\b(?!\\\$)',
            'name': 'support.class.promise.js',
          },
          {
            'captures': {
              '1': {'name': 'keyword.control.import.js'},
              '2': {'name': 'punctuation.accessor.js'},
              '3': {'name': 'punctuation.accessor.optional.js'},
              '4': {'name': 'support.variable.property.importmeta.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(import)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(meta)\\b(?!\\\$)',
          },
          {
            'captures': {
              '1': {'name': 'keyword.operator.new.js'},
              '2': {'name': 'punctuation.accessor.js'},
              '3': {'name': 'punctuation.accessor.optional.js'},
              '4': {'name': 'support.variable.property.target.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(new)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(target)\\b(?!\\\$)',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.accessor.js'},
              '2': {'name': 'punctuation.accessor.optional.js'},
              '3': {'name': 'support.variable.property.js'},
              '4': {'name': 'support.constant.js'},
            },
            'match':
                '(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(?:(constructor|length|prototype|__proto__)\\b(?!\\\$|\\s*(<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\()|(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\\$))',
          },
          {
            'captures': {
              '1': {'name': 'support.type.object.module.js'},
              '2': {'name': 'support.type.object.module.js'},
              '3': {'name': 'punctuation.accessor.js'},
              '4': {'name': 'punctuation.accessor.optional.js'},
              '5': {'name': 'support.type.object.module.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(exports)|(module)(?:(?:(\\.)|(\\?\\.(?!\\s*\\d)))(exports|id|filename|loaded|parent|children))?)\\b(?!\\\$)',
          },
        ],
      },
      'switch-statement': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bswitch\\s*\\()',
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'switch-statement.expr.js',
        'patterns': [
          {'include': '#comment'},
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(switch)\\s*(\\()',
            'beginCaptures': {
              '1': {'name': 'keyword.control.switch.js'},
              '2': {'name': 'meta.brace.round.js'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'meta.brace.round.js'},
            },
            'name': 'switch-expression.expr.js',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {
            'begin': '\\{',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.block.js'},
            },
            'end': '(?=})',
            'name': 'switch-block.expr.js',
            'patterns': [
              {
                'begin':
                    '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default(?=:))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
                'beginCaptures': {
                  '1': {'name': 'keyword.control.switch.js'},
                },
                'end': '(?=:)',
                'name': 'case-clause.expr.js',
                'patterns': [
                  {'include': '#expression'},
                ],
              },
              {
                'begin': '(:)\\s*(\\{)',
                'beginCaptures': {
                  '1': {
                    'name':
                        'case-clause.expr.js punctuation.definition.section.case-statement.js',
                  },
                  '2': {
                    'name': 'meta.block.js punctuation.definition.block.js',
                  },
                },
                'contentName': 'meta.block.js',
                'end': '}',
                'endCaptures': {
                  '0': {
                    'name': 'meta.block.js punctuation.definition.block.js',
                  },
                },
                'patterns': [
                  {'include': '#statements'},
                ],
              },
              {
                'captures': {
                  '0': {
                    'name':
                        'case-clause.expr.js punctuation.definition.section.case-statement.js',
                  },
                },
                'match': '(:)',
              },
              {'include': '#statements'},
            ],
          },
        ],
      },
      'template': {
        'patterns': [
          {'include': '#template-call'},
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)?(`)',
            'beginCaptures': {
              '1': {'name': 'entity.name.function.tagged-template.js'},
              '2': {
                'name':
                    'string.template.js punctuation.definition.string.template.begin.js',
              },
            },
            'contentName': 'string.template.js',
            'end': '`',
            'endCaptures': {
              '0': {
                'name':
                    'string.template.js punctuation.definition.string.template.end.js',
              },
            },
            'patterns': [
              {'include': '#template-substitution-element'},
              {'include': '#string-character-escape'},
            ],
          },
        ],
      },
      'template-call': {
        'patterns': [
          {
            'begin':
                '(?=(([\$_[:alpha:]][\$_[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([\$_[:alpha:]][\$_[:alnum:]]*)(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)?`)',
            'end': '(?=`)',
            'patterns': [
              {
                'begin':
                    '(?=(([\$_[:alpha:]][\$_[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([\$_[:alpha:]][\$_[:alnum:]]*))',
                'end':
                    '(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)?`)',
                'patterns': [
                  {'include': '#support-function-call-identifiers'},
                  {
                    'match': '([\$_[:alpha:]][\$_[:alnum:]]*)',
                    'name': 'entity.name.function.tagged-template.js',
                  },
                ],
              },
              {'include': '#type-arguments'},
            ],
          },
          {
            'begin':
                '([\$_[:alpha:]][\$_[:alnum:]]*)?\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>|<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([\$_[:alpha:]][\$_[:alnum:]]*|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))(?=\\s*([,.<>\\[]|=>|&(?!&)|\\|(?!\\|)))))([^(<>]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\s*)`)',
            'beginCaptures': {
              '1': {'name': 'entity.name.function.tagged-template.js'},
            },
            'end': '(?=`)',
            'patterns': [
              {'include': '#type-arguments'},
            ],
          },
        ],
      },
      'template-substitution-element': {
        'begin': '\\\$\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.template-expression.begin.js'},
        },
        'contentName': 'meta.embedded.line.js',
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.template-expression.end.js'},
        },
        'name': 'meta.template.expression.js',
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'template-type': {
        'patterns': [
          {'include': '#template-call'},
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)?(`)',
            'beginCaptures': {
              '1': {'name': 'entity.name.function.tagged-template.js'},
              '2': {
                'name':
                    'string.template.js punctuation.definition.string.template.begin.js',
              },
            },
            'contentName': 'string.template.js',
            'end': '`',
            'endCaptures': {
              '0': {
                'name':
                    'string.template.js punctuation.definition.string.template.end.js',
              },
            },
            'patterns': [
              {'include': '#template-type-substitution-element'},
              {'include': '#string-character-escape'},
            ],
          },
        ],
      },
      'template-type-substitution-element': {
        'begin': '\\\$\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.template-expression.begin.js'},
        },
        'contentName': 'meta.embedded.line.js',
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.template-expression.end.js'},
        },
        'name': 'meta.template.expression.js',
        'patterns': [
          {'include': '#type'},
        ],
      },
      'ternary-expression': {
        'begin': '(?!\\?\\.\\s*\\D)(\\?)(?!\\?)',
        'beginCaptures': {
          '1': {'name': 'keyword.operator.ternary.js'},
        },
        'end': '\\s*(:)',
        'endCaptures': {
          '1': {'name': 'keyword.operator.ternary.js'},
        },
        'patterns': [
          {'include': '#expression'},
        ],
      },
      'this-literal': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))this\\b(?!\\\$)',
        'name': 'variable.language.this.js',
      },
      'type': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#type-string'},
          {'include': '#numeric-literal'},
          {'include': '#type-primitive'},
          {'include': '#type-builtin-literals'},
          {'include': '#type-parameters'},
          {'include': '#type-tuple'},
          {'include': '#type-object'},
          {'include': '#type-operators'},
          {'include': '#type-conditional'},
          {'include': '#type-fn-type-parameters'},
          {'include': '#type-paren-or-function-parameters'},
          {'include': '#type-function-return-type'},
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*',
          },
          {'include': '#type-name'},
        ],
      },
      'type-alias-declaration': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(type)\\b\\s+([\$_[:alpha:]][\$_[:alnum:]]*)\\s*',
        'beginCaptures': {
          '1': {'name': 'keyword.control.export.js'},
          '2': {'name': 'storage.modifier.js'},
          '3': {'name': 'storage.type.type.js'},
          '4': {'name': 'entity.name.type.alias.js'},
        },
        'end':
            '(?=[;}]|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
        'name': 'meta.type.declaration.js',
        'patterns': [
          {'include': '#comment'},
          {'include': '#type-parameters'},
          {
            'begin':
                '(=)\\s*(intrinsic)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.assignment.js'},
              '2': {'name': 'keyword.control.intrinsic.js'},
            },
            'end':
                '(?=[;}]|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'patterns': [
              {'include': '#type'},
            ],
          },
          {
            'begin': '(=)\\s*',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.assignment.js'},
            },
            'end':
                '(?=[;}]|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
            'patterns': [
              {'include': '#type'},
            ],
          },
        ],
      },
      'type-annotation': {
        'patterns': [
          {
            'begin': '(:)(?=\\s*\\S)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.type.annotation.js'},
            },
            'end':
                '(?<![\\&:|])(?!\\s*[\\&|]\\s+)((?=^|[]),;}]|//)|(?==[^>])|((?<=[]\$)>_}[:alpha:]])\\s*(?=\\{)))',
            'name': 'meta.type.annotation.js',
            'patterns': [
              {'include': '#type'},
            ],
          },
          {
            'begin': '(:)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.type.annotation.js'},
            },
            'end':
                '(?<![\\&:|])((?=[]),;}]|//)|(?==[^>])|(?=^\\s*\$)|((?<=[]\$)>_}[:alpha:]])\\s*(?=\\{)))',
            'name': 'meta.type.annotation.js',
            'patterns': [
              {'include': '#type'},
            ],
          },
        ],
      },
      'type-arguments': {
        'begin': '<',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.typeparameters.begin.js'},
        },
        'end': '>',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.typeparameters.end.js'},
        },
        'name': 'meta.type.parameters.js',
        'patterns': [
          {'include': '#type-arguments-body'},
        ],
      },
      'type-arguments-body': {
        'patterns': [
          {
            'captures': {
              '0': {'name': 'keyword.operator.type.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(_)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
          },
          {'include': '#type'},
          {'include': '#punctuation-comma'},
        ],
      },
      'type-builtin-literals': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(this|true|false|undefined|null|object)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'support.type.builtin.js',
      },
      'type-conditional': {
        'patterns': [
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends)\\s+',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.js'},
            },
            'end': '(?<=:)',
            'patterns': [
              {
                'begin': '\\?',
                'beginCaptures': {
                  '0': {'name': 'keyword.operator.ternary.js'},
                },
                'end': ':',
                'endCaptures': {
                  '0': {'name': 'keyword.operator.ternary.js'},
                },
                'patterns': [
                  {'include': '#type'},
                ],
              },
              {'include': '#type'},
            ],
          },
        ],
      },
      'type-fn-type-parameters': {
        'patterns': [
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b(?=\\s*<)',
            'beginCaptures': {
              '1': {'name': 'meta.type.constructor.js storage.modifier.js'},
              '2': {'name': 'meta.type.constructor.js keyword.control.new.js'},
            },
            'end': '(?<=>)',
            'patterns': [
              {'include': '#comment'},
              {'include': '#type-parameters'},
            ],
          },
          {
            'begin':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(new)\\b\\s*(?=\\()',
            'beginCaptures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.control.new.js'},
            },
            'end': '(?<=\\))',
            'name': 'meta.type.constructor.js',
            'patterns': [
              {'include': '#function-parameters'},
            ],
          },
          {
            'begin':
                '((?=\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>))))))',
            'end': '(?<=\\))',
            'name': 'meta.type.function.js',
            'patterns': [
              {'include': '#function-parameters'},
            ],
          },
        ],
      },
      'type-function-return-type': {
        'patterns': [
          {
            'begin': '(=>)(?=\\s*\\S)',
            'beginCaptures': {
              '1': {'name': 'storage.type.function.arrow.js'},
            },
            'end': '(?<!=>)(?<![\\&|])(?=[]),:;=>?{}]|//|\$)',
            'name': 'meta.type.function.return.js',
            'patterns': [
              {'include': '#type-function-return-type-core'},
            ],
          },
          {
            'begin': '=>',
            'beginCaptures': {
              '0': {'name': 'storage.type.function.arrow.js'},
            },
            'end':
                '(?<!=>)(?<![\\&|])((?=[]),:;=>?{}]|//|^\\s*\$)|((?<=\\S)(?=\\s*\$)))',
            'name': 'meta.type.function.return.js',
            'patterns': [
              {'include': '#type-function-return-type-core'},
            ],
          },
        ],
      },
      'type-function-return-type-core': {
        'patterns': [
          {'include': '#comment'},
          {
            'begin': '(?<==>)(?=\\s*\\{)',
            'end': '(?<=})',
            'patterns': [
              {'include': '#type-object'},
            ],
          },
          {'include': '#type-predicate-operator'},
          {'include': '#type'},
        ],
      },
      'type-infer': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.operator.expression.infer.js'},
              '2': {'name': 'entity.name.type.js'},
              '3': {'name': 'keyword.operator.expression.extends.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(infer)\\s+([\$_[:alpha:]][\$_[:alnum:]]*)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s+(extends)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))?',
            'name': 'meta.type.infer.js',
          },
        ],
      },
      'type-name': {
        'patterns': [
          {
            'begin':
                '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(<)',
            'captures': {
              '1': {'name': 'entity.name.type.module.js'},
              '2': {'name': 'punctuation.accessor.js'},
              '3': {'name': 'punctuation.accessor.optional.js'},
              '4': {
                'name':
                    'meta.type.parameters.js punctuation.definition.typeparameters.begin.js',
              },
            },
            'contentName': 'meta.type.parameters.js',
            'end': '(>)',
            'endCaptures': {
              '1': {
                'name':
                    'meta.type.parameters.js punctuation.definition.typeparameters.end.js',
              },
            },
            'patterns': [
              {'include': '#type-arguments-body'},
            ],
          },
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(<)',
            'beginCaptures': {
              '1': {'name': 'entity.name.type.js'},
              '2': {
                'name':
                    'meta.type.parameters.js punctuation.definition.typeparameters.begin.js',
              },
            },
            'contentName': 'meta.type.parameters.js',
            'end': '(>)',
            'endCaptures': {
              '1': {
                'name':
                    'meta.type.parameters.js punctuation.definition.typeparameters.end.js',
              },
            },
            'patterns': [
              {'include': '#type-arguments-body'},
            ],
          },
          {
            'captures': {
              '1': {'name': 'entity.name.type.module.js'},
              '2': {'name': 'punctuation.accessor.js'},
              '3': {'name': 'punctuation.accessor.optional.js'},
            },
            'match':
                '([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*\\d)))',
          },
          {
            'match': '[\$_[:alpha:]][\$_[:alnum:]]*',
            'name': 'entity.name.type.js',
          },
        ],
      },
      'type-object': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.block.js'},
        },
        'name': 'meta.object.type.js',
        'patterns': [
          {'include': '#comment'},
          {'include': '#method-declaration'},
          {'include': '#indexer-declaration'},
          {'include': '#indexer-mapped-type-declaration'},
          {'include': '#field-declaration'},
          {'include': '#type-annotation'},
          {
            'begin': '\\.\\.\\.',
            'beginCaptures': {
              '0': {'name': 'keyword.operator.spread.js'},
            },
            'end': '(?=[,;}]|\$)|(?<=})',
            'patterns': [
              {'include': '#type'},
            ],
          },
          {'include': '#punctuation-comma'},
          {'include': '#punctuation-semicolon'},
          {'include': '#type'},
        ],
      },
      'type-operators': {
        'patterns': [
          {'include': '#typeof-operator'},
          {'include': '#type-infer'},
          {
            'begin': '([\\&|])(?=\\s*\\{)',
            'beginCaptures': {
              '0': {'name': 'keyword.operator.type.js'},
            },
            'end': '(?<=})',
            'patterns': [
              {'include': '#type-object'},
            ],
          },
          {
            'begin': '[\\&|]',
            'beginCaptures': {
              '0': {'name': 'keyword.operator.type.js'},
            },
            'end': '(?=\\S)',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))keyof(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.expression.keyof.js',
          },
          {'match': '([:?])', 'name': 'keyword.operator.ternary.js'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))import(?=\\s*\\()',
            'name': 'keyword.operator.expression.import.js',
          },
        ],
      },
      'type-parameters': {
        'begin': '(<)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.typeparameters.begin.js'},
        },
        'end': '(>)',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.typeparameters.end.js'},
        },
        'name': 'meta.type.parameters.js',
        'patterns': [
          {'include': '#comment'},
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends|in|out|const)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'storage.modifier.js',
          },
          {'include': '#type'},
          {'include': '#punctuation-comma'},
          {'match': '(=)(?!>)', 'name': 'keyword.operator.assignment.js'},
        ],
      },
      'type-paren-or-function-parameters': {
        'begin': '\\(',
        'beginCaptures': {
          '0': {'name': 'meta.brace.round.js'},
        },
        'end': '\\)',
        'endCaptures': {
          '0': {'name': 'meta.brace.round.js'},
        },
        'name': 'meta.type.paren.cover.js',
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {
                'name': 'entity.name.function.js variable.language.this.js',
              },
              '4': {'name': 'entity.name.function.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))\\s*(\\??)(?=\\s*(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))))',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.js'},
              '2': {'name': 'keyword.operator.rest.js'},
              '3': {'name': 'variable.parameter.js variable.language.this.js'},
              '4': {'name': 'variable.parameter.js'},
              '5': {'name': 'keyword.operator.optional.js'},
            },
            'match':
                '(?:(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))\\s*(\\??)(?=:)',
          },
          {'include': '#type-annotation'},
          {'match': ',', 'name': 'punctuation.separator.parameter.js'},
          {'include': '#type'},
        ],
      },
      'type-predicate-operator': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.operator.type.asserts.js'},
              '2': {'name': 'variable.parameter.js variable.language.this.js'},
              '3': {'name': 'variable.parameter.js'},
              '4': {'name': 'keyword.operator.expression.is.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(asserts)\\s+)?(?!asserts)(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))\\s(is)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
          },
          {
            'captures': {
              '1': {'name': 'keyword.operator.type.asserts.js'},
              '2': {'name': 'variable.parameter.js variable.language.this.js'},
              '3': {'name': 'variable.parameter.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(asserts)\\s+(?!is)(?:(this)|([\$_[:alpha:]][\$_[:alnum:]]*))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))asserts(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.type.asserts.js',
          },
          {
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))is(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
            'name': 'keyword.operator.expression.is.js',
          },
        ],
      },
      'type-primitive': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'support.type.primitive.js',
      },
      'type-string': {
        'patterns': [
          {'include': '#qstring-single'},
          {'include': '#qstring-double'},
          {'include': '#template-type'},
        ],
      },
      'type-tuple': {
        'begin': '\\[',
        'beginCaptures': {
          '0': {'name': 'meta.brace.square.js'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'meta.brace.square.js'},
        },
        'name': 'meta.type.tuple.js',
        'patterns': [
          {'match': '\\.\\.\\.', 'name': 'keyword.operator.rest.js'},
          {
            'captures': {
              '1': {'name': 'entity.name.label.js'},
              '2': {'name': 'keyword.operator.optional.js'},
              '3': {'name': 'punctuation.separator.label.js'},
            },
            'match':
                '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([\$_[:alpha:]][\$_[:alnum:]]*)\\s*(\\?)?\\s*(:)',
          },
          {'include': '#type'},
          {'include': '#punctuation-comma'},
        ],
      },
      'typeof-operator': {
        'begin':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))typeof(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'beginCaptures': {
          '0': {'name': 'keyword.operator.expression.typeof.js'},
        },
        'end':
            '(?=[]\\&),:;=>?{|}]|(extends\\s+)|\$|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)',
        'patterns': [
          {'include': '#type-arguments'},
          {'include': '#expression'},
        ],
      },
      'undefined-literal': {
        'match':
            '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))undefined(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))',
        'name': 'constant.language.undefined.js',
      },
      'var-expr': {
        'patterns': [
          {
            'begin':
                '(?=(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(var|let)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))',
            'end':
                '(?!(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(var|let)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=^|[;}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)|((?<!^let|[^\$._[:alnum:]]let|^var|[^\$._[:alnum:]]var)(?=\\s*\$)))',
            'name': 'meta.var.expr.js',
            'patterns': [
              {
                'begin':
                    '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(var|let)(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*',
                'beginCaptures': {
                  '1': {'name': 'keyword.control.export.js'},
                  '2': {'name': 'storage.modifier.js'},
                  '3': {'name': 'storage.type.js'},
                },
                'end': '(?=\\S)',
              },
              {'include': '#destructuring-variable'},
              {'include': '#var-single-variable'},
              {'include': '#variable-initializer'},
              {'include': '#comment'},
              {
                'begin': '(,)\\s*(?=\$|//)',
                'beginCaptures': {
                  '1': {'name': 'punctuation.separator.comma.js'},
                },
                'end':
                    '(?<!,)(((?=[;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*\$))|((?<=\\S)(?=\\s*\$)))',
                'patterns': [
                  {'include': '#single-line-comment-consuming-line-ending'},
                  {'include': '#comment'},
                  {'include': '#destructuring-variable'},
                  {'include': '#var-single-variable'},
                  {'include': '#punctuation-comma'},
                ],
              },
              {'include': '#punctuation-comma'},
            ],
          },
          {
            'begin':
                '(?=(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(const(?!\\s+enum\\b))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'storage.type.js'},
            },
            'end':
                '(?!(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(const(?!\\s+enum\\b))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=^|[;}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)|((?<!(?:^|[^\$._[:alnum:]])const)(?=\\s*\$)))',
            'name': 'meta.var.expr.js',
            'patterns': [
              {
                'begin':
                    '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b(const(?!\\s+enum\\b))(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*',
                'beginCaptures': {
                  '1': {'name': 'keyword.control.export.js'},
                  '2': {'name': 'storage.modifier.js'},
                  '3': {'name': 'storage.type.js'},
                },
                'end': '(?=\\S)',
              },
              {'include': '#destructuring-const'},
              {'include': '#var-single-const'},
              {'include': '#variable-initializer'},
              {'include': '#comment'},
              {
                'begin': '(,)\\s*(?=\$|//)',
                'beginCaptures': {
                  '1': {'name': 'punctuation.separator.comma.js'},
                },
                'end':
                    '(?<!,)(((?=[;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*\$))|((?<=\\S)(?=\\s*\$)))',
                'patterns': [
                  {'include': '#single-line-comment-consuming-line-ending'},
                  {'include': '#comment'},
                  {'include': '#destructuring-const'},
                  {'include': '#var-single-const'},
                  {'include': '#punctuation-comma'},
                ],
              },
              {'include': '#punctuation-comma'},
            ],
          },
          {
            'begin':
                '(?=(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b\\b(using(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])|await\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b)\\b(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))',
            'beginCaptures': {
              '1': {'name': 'keyword.control.export.js'},
              '2': {'name': 'storage.modifier.js'},
              '3': {'name': 'storage.type.js'},
            },
            'end':
                '(?!(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b\\b(using(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])|await\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b)\\b(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=[;}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b)|((?<!(?:^|[^\$._[:alnum:]]|^await\\s+|[^\$._[:alnum:]]await\\s+)using)(?=\\s*\$)))',
            'name': 'meta.var.expr.js',
            'patterns': [
              {
                'begin':
                    '(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(export)\\s+)?(?:\\b(declare)\\s+)?\\b\\b(using(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])|await\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b)\\b(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*',
                'beginCaptures': {
                  '1': {'name': 'keyword.control.export.js'},
                  '2': {'name': 'storage.modifier.js'},
                  '3': {'name': 'storage.type.js'},
                },
                'end': '(?=\\S)',
              },
              {'include': '#var-single-const'},
              {'include': '#variable-initializer'},
              {'include': '#comment'},
              {
                'begin': '(,)\\s*((?!\\S)|(?=//))',
                'beginCaptures': {
                  '1': {'name': 'punctuation.separator.comma.js'},
                },
                'end':
                    '(?<!,)(((?=[;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|^\\s*\$))|((?<=\\S)(?=\\s*\$)))',
                'patterns': [
                  {'include': '#single-line-comment-consuming-line-ending'},
                  {'include': '#comment'},
                  {'include': '#var-single-const'},
                  {'include': '#punctuation-comma'},
                ],
              },
              {'include': '#punctuation-comma'},
            ],
          },
        ],
      },
      'var-single-const': {
        'patterns': [
          {
            'begin':
                '([\$_[:alpha:]][\$_[:alnum:]]*)(?=\\s*(=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))|(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))))|(:\\s*(=>|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(<[^<>]*>)|[^(),<=>])+=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>))))))',
            'beginCaptures': {
              '1': {
                'name':
                    'meta.definition.variable.js variable.other.constant.js entity.name.function.js',
              },
            },
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|(;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b))',
            'name': 'meta.var-single-variable.expr.js',
            'patterns': [
              {'include': '#var-single-variable-type-annotation'},
            ],
          },
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)',
            'beginCaptures': {
              '1': {
                'name':
                    'meta.definition.variable.js variable.other.constant.js',
              },
            },
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|(;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b))',
            'name': 'meta.var-single-variable.expr.js',
            'patterns': [
              {'include': '#var-single-variable-type-annotation'},
            ],
          },
        ],
      },
      'var-single-variable': {
        'patterns': [
          {
            'begin':
                '([\$_[:alpha:]][\$_[:alnum:]]*)(!)?(?=\\s*(=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))|(:\\s*((<)|(\\(\\s*((\\))|(\\.\\.\\.)|([\$_[:alnum:]]+\\s*(([,:=?])|(\\)\\s*=>)))))))|(:\\s*(?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))Function(?![\$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(:\\s*((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))))))|(:\\s*(=>|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(<[^<>]*>)|[^(),<=>])+=\\s*(((async\\s+)?((function\\s*[(*<])|(function\\s+)|([\$_[:alpha:]][\$_[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*)\$|(\\(\\s*((([\\[{]\\s*)?)\$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)\$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[\$_[:alpha:]][\$_[:alnum:]]*\\s*:)))|(<\\s*[\$_[:alpha:]][\$_[:alnum:]]*\\s+extends\\s*[^=>])|((<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*(((const\\s+)?[\$_[:alpha:]])|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([\$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[\$_[:alpha:]]))([^"\'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\'([^\'\\\\]|\\\\.)*\')|("([^"\\\\]|\\\\.)*")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>))))))',
            'beginCaptures': {
              '1': {
                'name': 'meta.definition.variable.js entity.name.function.js',
              },
              '2': {'name': 'keyword.operator.definiteassignment.js'},
            },
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|(;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b))',
            'name': 'meta.var-single-variable.expr.js',
            'patterns': [
              {'include': '#var-single-variable-type-annotation'},
            ],
          },
          {
            'begin': '(\\p{upper}[\$_\\d[:upper:]]*)(?![\$_[:alnum:]])(!)?',
            'beginCaptures': {
              '1': {
                'name':
                    'meta.definition.variable.js variable.other.constant.js',
              },
              '2': {'name': 'keyword.operator.definiteassignment.js'},
            },
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|(;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b))',
            'name': 'meta.var-single-variable.expr.js',
            'patterns': [
              {'include': '#var-single-variable-type-annotation'},
            ],
          },
          {
            'begin': '([\$_[:alpha:]][\$_[:alnum:]]*)(!)?',
            'beginCaptures': {
              '1': {
                'name':
                    'meta.definition.variable.js variable.other.readwrite.js',
              },
              '2': {'name': 'keyword.operator.definiteassignment.js'},
            },
            'end':
                '(?=\$|^|[,;=}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+)|(;|^\\s*\$|^\\s*(?:abstract|async|\\bawait\\s+\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[\$_[:alpha:]])\\b|var|while)\\b))',
            'name': 'meta.var-single-variable.expr.js',
            'patterns': [
              {'include': '#var-single-variable-type-annotation'},
            ],
          },
        ],
      },
      'var-single-variable-type-annotation': {
        'patterns': [
          {'include': '#type-annotation'},
          {'include': '#string'},
          {'include': '#comment'},
        ],
      },
      'variable-initializer': {
        'patterns': [
          {
            'begin': '(?<![!=])(=)(?!=)(?=\\s*\\S)(?!\\s*.*=>\\s*\$)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.assignment.js'},
            },
            'end':
                '(?=\$|^|[]),;}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))',
            'patterns': [
              {'include': '#expression'},
            ],
          },
          {
            'begin': '(?<![!=])(=)(?!=)',
            'beginCaptures': {
              '1': {'name': 'keyword.operator.assignment.js'},
            },
            'end':
                '(?=[]),;}]|((?<![\$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))|(?=^\\s*\$)|(?<![-\\&*+/|])(?<=\\S)(?<!=)(?=\\s*\$)',
            'patterns': [
              {'include': '#expression'},
            ],
          },
        ],
      },
    },
    'scopeName': 'source.js',
  },
);