import * as ts from 'typescript';

export const operatorTokenToStringMap: Map<ts.SyntaxKind, string> = new Map<ts.SyntaxKind, string>([
    [ts.SyntaxKind.DotToken, '.'],
    [ts.SyntaxKind.DotDotDotToken, '...'],
    [ts.SyntaxKind.SemicolonToken, ';'],
    [ts.SyntaxKind.CommaToken, ','],
    [ts.SyntaxKind.QuestionDotToken, '?.'],
    [ts.SyntaxKind.LessThanToken, '<'],
    [ts.SyntaxKind.LessThanSlashToken, '</'],
    [ts.SyntaxKind.GreaterThanToken, '>'],
    [ts.SyntaxKind.LessThanEqualsToken, '<='],
    [ts.SyntaxKind.GreaterThanEqualsToken, '>='],
    [ts.SyntaxKind.EqualsEqualsToken, '=='],
    [ts.SyntaxKind.ExclamationEqualsToken, '!='],
    [ts.SyntaxKind.EqualsEqualsEqualsToken, '==='],
    [ts.SyntaxKind.ExclamationEqualsEqualsToken, '!==='],
    [ts.SyntaxKind.EqualsGreaterThanToken, '=>'],
    [ts.SyntaxKind.PlusToken, '+'],
    [ts.SyntaxKind.MinusToken, '-'],
    [ts.SyntaxKind.AsteriskToken, '*'],
    [ts.SyntaxKind.AsteriskAsteriskToken, '**'],
    [ts.SyntaxKind.SlashToken, '/'],
    [ts.SyntaxKind.PercentToken, '%'],
    [ts.SyntaxKind.PlusPlusToken, '++'],
    [ts.SyntaxKind.MinusMinusToken, '--'],
    [ts.SyntaxKind.LessThanLessThanToken, '<<'],
    [ts.SyntaxKind.GreaterThanGreaterThanToken, '>>'],
    [ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken, '>>>'],
    [ts.SyntaxKind.AmpersandToken, '&'],
    [ts.SyntaxKind.BarToken, '|'],
    [ts.SyntaxKind.CaretToken, '^'],
    [ts.SyntaxKind.ExclamationToken, '!'],
    [ts.SyntaxKind.TildeToken, '~'],
    [ts.SyntaxKind.AmpersandAmpersandToken, '&&'],
    [ts.SyntaxKind.BarBarToken, '||'],
    [ts.SyntaxKind.QuestionToken, '?'],
    [ts.SyntaxKind.ColonToken, ':'],
    [ts.SyntaxKind.AtToken, '@'],
    [ts.SyntaxKind.QuestionQuestionToken, '??'],
    [ts.SyntaxKind.BacktickToken, '`'],
    [ts.SyntaxKind.HashToken, '#'],
    [ts.SyntaxKind.EqualsToken, '='],
    [ts.SyntaxKind.PlusEqualsToken, '+='],
    [ts.SyntaxKind.MinusEqualsToken, '-='],
    [ts.SyntaxKind.AsteriskEqualsToken, '*='],
    [ts.SyntaxKind.AsteriskAsteriskEqualsToken, '**='],
    [ts.SyntaxKind.SlashEqualsToken, '/='],
    [ts.SyntaxKind.PercentEqualsToken, '%='],
    [ts.SyntaxKind.LessThanLessThanEqualsToken, '<<'],
    [ts.SyntaxKind.GreaterThanGreaterThanEqualsToken, '>>='],
    [ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken, '>>>='],
    [ts.SyntaxKind.AmpersandEqualsToken, '&='],
    [ts.SyntaxKind.BarEqualsToken, '|='],
    [ts.SyntaxKind.BarBarEqualsToken, '||='],
    [ts.SyntaxKind.AmpersandAmpersandEqualsToken, '&&='],
    [ts.SyntaxKind.QuestionQuestionEqualsToken, '??='],
    [ts.SyntaxKind.CaretEqualsToken, '^='],
]);

export const keywordToStringMap: Map<ts.SyntaxKind, string> = new Map<ts.SyntaxKind, string>([
    [ts.SyntaxKind.AsKeyword, 'as'],
    [ts.SyntaxKind.BreakKeyword, 'break'],
    [ts.SyntaxKind.CaseKeyword, 'case'],
    [ts.SyntaxKind.CatchKeyword, 'catch'],
    [ts.SyntaxKind.ClassKeyword, 'class'],
    [ts.SyntaxKind.ConstKeyword, 'const'],
    [ts.SyntaxKind.ContinueKeyword, 'continue'],
    [ts.SyntaxKind.DebuggerKeyword, 'debugger'],
    [ts.SyntaxKind.DefaultKeyword, 'default'],
    [ts.SyntaxKind.DeleteKeyword, 'delete'],
    [ts.SyntaxKind.DoKeyword, 'do'],
    [ts.SyntaxKind.ElseKeyword, 'else'],
    [ts.SyntaxKind.EnumKeyword, 'enum'],
    [ts.SyntaxKind.ExportKeyword, 'export'],
    [ts.SyntaxKind.ExtendsKeyword, 'extends'],
    [ts.SyntaxKind.FalseKeyword, 'false'],
    [ts.SyntaxKind.FinallyKeyword, 'finally'],
    [ts.SyntaxKind.ForKeyword, 'for'],
    [ts.SyntaxKind.FunctionKeyword, 'function'],
    [ts.SyntaxKind.IfKeyword, 'if'],
    [ts.SyntaxKind.ImportKeyword, 'import'],
    [ts.SyntaxKind.InKeyword, 'in'],
    [ts.SyntaxKind.InstanceOfKeyword, 'instanceof'],
    [ts.SyntaxKind.NewKeyword, 'new'],
    [ts.SyntaxKind.NullKeyword, 'null'],
    [ts.SyntaxKind.ReturnKeyword, 'return'],
    [ts.SyntaxKind.SuperKeyword, 'super'],
    [ts.SyntaxKind.SwitchKeyword, 'switch'],
    [ts.SyntaxKind.ThisKeyword, 'this'],
    [ts.SyntaxKind.ThrowKeyword, 'throw'],
    [ts.SyntaxKind.TrueKeyword, 'true'],
    [ts.SyntaxKind.TryKeyword, 'try'],
    [ts.SyntaxKind.TypeOfKeyword, 'typeof'],
    [ts.SyntaxKind.VarKeyword, 'var'],
    [ts.SyntaxKind.VoidKeyword, 'void'],
    [ts.SyntaxKind.WhileKeyword, 'while'],
    [ts.SyntaxKind.WithKeyword, 'with'],
    [ts.SyntaxKind.ImplementsKeyword, 'implements'],
    [ts.SyntaxKind.InterfaceKeyword, 'interface'],
    [ts.SyntaxKind.LetKeyword, 'let'],
    [ts.SyntaxKind.PackageKeyword, 'package'],
    [ts.SyntaxKind.PrivateKeyword, 'private'],
    [ts.SyntaxKind.ProtectedKeyword, 'protected'],
    [ts.SyntaxKind.PublicKeyword, 'public'],
    [ts.SyntaxKind.StaticKeyword, 'static'],
    [ts.SyntaxKind.YieldKeyword, 'yield'],
    [ts.SyntaxKind.AbstractKeyword, 'abstract'],
    [ts.SyntaxKind.AsKeyword, 'as'],
    [ts.SyntaxKind.AssertsKeyword, 'asserts'],
    [ts.SyntaxKind.AssertKeyword, 'assert'],
    [ts.SyntaxKind.AnyKeyword, 'any'],
    [ts.SyntaxKind.AsyncKeyword, 'async'],
    [ts.SyntaxKind.AwaitKeyword, 'await'],
    [ts.SyntaxKind.BooleanKeyword, 'boolean'],
    [ts.SyntaxKind.ConstructorKeyword, 'constructor'],
    [ts.SyntaxKind.DeclareKeyword, 'declare'],
    [ts.SyntaxKind.GetKeyword, 'get'],
    [ts.SyntaxKind.InferKeyword, 'infer'],
    [ts.SyntaxKind.IntrinsicKeyword, 'intrinsic'],
    [ts.SyntaxKind.IsKeyword, 'is'],
    [ts.SyntaxKind.KeyOfKeyword, 'keyof'],
    [ts.SyntaxKind.ModuleKeyword, 'module'],
    [ts.SyntaxKind.NamespaceKeyword, 'namespace'],
    [ts.SyntaxKind.NeverKeyword, 'never'],
    [ts.SyntaxKind.ReadonlyKeyword, 'readonly'],
    [ts.SyntaxKind.RequireKeyword, 'require'],
    [ts.SyntaxKind.NumberKeyword, 'number'],
    [ts.SyntaxKind.ObjectKeyword, 'object'],
    [ts.SyntaxKind.SetKeyword, 'set'],
    [ts.SyntaxKind.StringKeyword, 'string'],
    [ts.SyntaxKind.SymbolKeyword, 'symbol'],
    [ts.SyntaxKind.TypeKeyword, 'type'],
    [ts.SyntaxKind.UndefinedKeyword, 'undefined'],
    [ts.SyntaxKind.UniqueKeyword, 'unique'],
    [ts.SyntaxKind.UnknownKeyword, 'unknown'],
    [ts.SyntaxKind.FromKeyword, 'from'],
    [ts.SyntaxKind.GlobalKeyword, 'global'],
    [ts.SyntaxKind.BigIntKeyword, 'bigInt'],
    [ts.SyntaxKind.OverrideKeyword, 'override'],
    [ts.SyntaxKind.OfKeyword, 'of'],
    [ts.SyntaxKind.FirstKeyword, 'first'],
    [ts.SyntaxKind.LastKeyword, 'last'],
]);

export const keywordStrings = Array.from(keywordToStringMap.values());
