(function ()()

in src/vs/base/common/scanCode.ts [469:689]


(function () {
	for (let i = 0; i <= ScanCode.MAX_VALUE; i++) {
		IMMUTABLE_CODE_TO_KEY_CODE[i] = -1;
	}

	for (let i = 0; i <= KeyCode.MAX_VALUE; i++) {
		IMMUTABLE_KEY_CODE_TO_CODE[i] = -1;
	}

	function define(code: ScanCode, keyCode: KeyCode): void {
		IMMUTABLE_CODE_TO_KEY_CODE[code] = keyCode;

		if (
			(keyCode !== KeyCode.Unknown)
			&& (keyCode !== KeyCode.Enter)
			&& (keyCode !== KeyCode.Ctrl)
			&& (keyCode !== KeyCode.Shift)
			&& (keyCode !== KeyCode.Alt)
			&& (keyCode !== KeyCode.Meta)
		) {
			IMMUTABLE_KEY_CODE_TO_CODE[keyCode] = code;
		}
	}

	// Manually added due to the exclusion above (due to duplication with NumpadEnter)
	IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Enter] = ScanCode.Enter;

	define(ScanCode.None, KeyCode.Unknown);
	define(ScanCode.Hyper, KeyCode.Unknown);
	define(ScanCode.Super, KeyCode.Unknown);
	define(ScanCode.Fn, KeyCode.Unknown);
	define(ScanCode.FnLock, KeyCode.Unknown);
	define(ScanCode.Suspend, KeyCode.Unknown);
	define(ScanCode.Resume, KeyCode.Unknown);
	define(ScanCode.Turbo, KeyCode.Unknown);
	define(ScanCode.Sleep, KeyCode.Unknown);
	define(ScanCode.WakeUp, KeyCode.Unknown);
	// define(ScanCode.KeyA, KeyCode.Unknown);
	// define(ScanCode.KeyB, KeyCode.Unknown);
	// define(ScanCode.KeyC, KeyCode.Unknown);
	// define(ScanCode.KeyD, KeyCode.Unknown);
	// define(ScanCode.KeyE, KeyCode.Unknown);
	// define(ScanCode.KeyF, KeyCode.Unknown);
	// define(ScanCode.KeyG, KeyCode.Unknown);
	// define(ScanCode.KeyH, KeyCode.Unknown);
	// define(ScanCode.KeyI, KeyCode.Unknown);
	// define(ScanCode.KeyJ, KeyCode.Unknown);
	// define(ScanCode.KeyK, KeyCode.Unknown);
	// define(ScanCode.KeyL, KeyCode.Unknown);
	// define(ScanCode.KeyM, KeyCode.Unknown);
	// define(ScanCode.KeyN, KeyCode.Unknown);
	// define(ScanCode.KeyO, KeyCode.Unknown);
	// define(ScanCode.KeyP, KeyCode.Unknown);
	// define(ScanCode.KeyQ, KeyCode.Unknown);
	// define(ScanCode.KeyR, KeyCode.Unknown);
	// define(ScanCode.KeyS, KeyCode.Unknown);
	// define(ScanCode.KeyT, KeyCode.Unknown);
	// define(ScanCode.KeyU, KeyCode.Unknown);
	// define(ScanCode.KeyV, KeyCode.Unknown);
	// define(ScanCode.KeyW, KeyCode.Unknown);
	// define(ScanCode.KeyX, KeyCode.Unknown);
	// define(ScanCode.KeyY, KeyCode.Unknown);
	// define(ScanCode.KeyZ, KeyCode.Unknown);
	// define(ScanCode.Digit1, KeyCode.Unknown);
	// define(ScanCode.Digit2, KeyCode.Unknown);
	// define(ScanCode.Digit3, KeyCode.Unknown);
	// define(ScanCode.Digit4, KeyCode.Unknown);
	// define(ScanCode.Digit5, KeyCode.Unknown);
	// define(ScanCode.Digit6, KeyCode.Unknown);
	// define(ScanCode.Digit7, KeyCode.Unknown);
	// define(ScanCode.Digit8, KeyCode.Unknown);
	// define(ScanCode.Digit9, KeyCode.Unknown);
	// define(ScanCode.Digit0, KeyCode.Unknown);
	define(ScanCode.Enter, KeyCode.Enter);
	define(ScanCode.Escape, KeyCode.Escape);
	define(ScanCode.Backspace, KeyCode.Backspace);
	define(ScanCode.Tab, KeyCode.Tab);
	define(ScanCode.Space, KeyCode.Space);
	// define(ScanCode.Minus, KeyCode.Unknown);
	// define(ScanCode.Equal, KeyCode.Unknown);
	// define(ScanCode.BracketLeft, KeyCode.Unknown);
	// define(ScanCode.BracketRight, KeyCode.Unknown);
	// define(ScanCode.Backslash, KeyCode.Unknown);
	// define(ScanCode.IntlHash, KeyCode.Unknown);
	// define(ScanCode.Semicolon, KeyCode.Unknown);
	// define(ScanCode.Quote, KeyCode.Unknown);
	// define(ScanCode.Backquote, KeyCode.Unknown);
	// define(ScanCode.Comma, KeyCode.Unknown);
	// define(ScanCode.Period, KeyCode.Unknown);
	// define(ScanCode.Slash, KeyCode.Unknown);
	define(ScanCode.CapsLock, KeyCode.CapsLock);
	define(ScanCode.F1, KeyCode.F1);
	define(ScanCode.F2, KeyCode.F2);
	define(ScanCode.F3, KeyCode.F3);
	define(ScanCode.F4, KeyCode.F4);
	define(ScanCode.F5, KeyCode.F5);
	define(ScanCode.F6, KeyCode.F6);
	define(ScanCode.F7, KeyCode.F7);
	define(ScanCode.F8, KeyCode.F8);
	define(ScanCode.F9, KeyCode.F9);
	define(ScanCode.F10, KeyCode.F10);
	define(ScanCode.F11, KeyCode.F11);
	define(ScanCode.F12, KeyCode.F12);
	define(ScanCode.PrintScreen, KeyCode.Unknown);
	define(ScanCode.ScrollLock, KeyCode.ScrollLock);
	define(ScanCode.Pause, KeyCode.PauseBreak);
	define(ScanCode.Insert, KeyCode.Insert);
	define(ScanCode.Home, KeyCode.Home);
	define(ScanCode.PageUp, KeyCode.PageUp);
	define(ScanCode.Delete, KeyCode.Delete);
	define(ScanCode.End, KeyCode.End);
	define(ScanCode.PageDown, KeyCode.PageDown);
	define(ScanCode.ArrowRight, KeyCode.RightArrow);
	define(ScanCode.ArrowLeft, KeyCode.LeftArrow);
	define(ScanCode.ArrowDown, KeyCode.DownArrow);
	define(ScanCode.ArrowUp, KeyCode.UpArrow);
	define(ScanCode.NumLock, KeyCode.NumLock);
	define(ScanCode.NumpadDivide, KeyCode.NUMPAD_DIVIDE);
	define(ScanCode.NumpadMultiply, KeyCode.NUMPAD_MULTIPLY);
	define(ScanCode.NumpadSubtract, KeyCode.NUMPAD_SUBTRACT);
	define(ScanCode.NumpadAdd, KeyCode.NUMPAD_ADD);
	define(ScanCode.NumpadEnter, KeyCode.Enter); // Duplicate
	define(ScanCode.Numpad1, KeyCode.NUMPAD_1);
	define(ScanCode.Numpad2, KeyCode.NUMPAD_2);
	define(ScanCode.Numpad3, KeyCode.NUMPAD_3);
	define(ScanCode.Numpad4, KeyCode.NUMPAD_4);
	define(ScanCode.Numpad5, KeyCode.NUMPAD_5);
	define(ScanCode.Numpad6, KeyCode.NUMPAD_6);
	define(ScanCode.Numpad7, KeyCode.NUMPAD_7);
	define(ScanCode.Numpad8, KeyCode.NUMPAD_8);
	define(ScanCode.Numpad9, KeyCode.NUMPAD_9);
	define(ScanCode.Numpad0, KeyCode.NUMPAD_0);
	define(ScanCode.NumpadDecimal, KeyCode.NUMPAD_DECIMAL);
	// define(ScanCode.IntlBackslash, KeyCode.Unknown);
	define(ScanCode.ContextMenu, KeyCode.ContextMenu);
	define(ScanCode.Power, KeyCode.Unknown);
	define(ScanCode.NumpadEqual, KeyCode.Unknown);
	define(ScanCode.F13, KeyCode.F13);
	define(ScanCode.F14, KeyCode.F14);
	define(ScanCode.F15, KeyCode.F15);
	define(ScanCode.F16, KeyCode.F16);
	define(ScanCode.F17, KeyCode.F17);
	define(ScanCode.F18, KeyCode.F18);
	define(ScanCode.F19, KeyCode.F19);
	define(ScanCode.F20, KeyCode.Unknown);
	define(ScanCode.F21, KeyCode.Unknown);
	define(ScanCode.F22, KeyCode.Unknown);
	define(ScanCode.F23, KeyCode.Unknown);
	define(ScanCode.F24, KeyCode.Unknown);
	define(ScanCode.Open, KeyCode.Unknown);
	define(ScanCode.Help, KeyCode.Unknown);
	define(ScanCode.Select, KeyCode.Unknown);
	define(ScanCode.Again, KeyCode.Unknown);
	define(ScanCode.Undo, KeyCode.Unknown);
	define(ScanCode.Cut, KeyCode.Unknown);
	define(ScanCode.Copy, KeyCode.Unknown);
	define(ScanCode.Paste, KeyCode.Unknown);
	define(ScanCode.Find, KeyCode.Unknown);
	define(ScanCode.AudioVolumeMute, KeyCode.Unknown);
	define(ScanCode.AudioVolumeUp, KeyCode.Unknown);
	define(ScanCode.AudioVolumeDown, KeyCode.Unknown);
	define(ScanCode.NumpadComma, KeyCode.NUMPAD_SEPARATOR);
	// define(ScanCode.IntlRo, KeyCode.Unknown);
	define(ScanCode.KanaMode, KeyCode.Unknown);
	// define(ScanCode.IntlYen, KeyCode.Unknown);
	define(ScanCode.Convert, KeyCode.Unknown);
	define(ScanCode.NonConvert, KeyCode.Unknown);
	define(ScanCode.Lang1, KeyCode.Unknown);
	define(ScanCode.Lang2, KeyCode.Unknown);
	define(ScanCode.Lang3, KeyCode.Unknown);
	define(ScanCode.Lang4, KeyCode.Unknown);
	define(ScanCode.Lang5, KeyCode.Unknown);
	define(ScanCode.Abort, KeyCode.Unknown);
	define(ScanCode.Props, KeyCode.Unknown);
	define(ScanCode.NumpadParenLeft, KeyCode.Unknown);
	define(ScanCode.NumpadParenRight, KeyCode.Unknown);
	define(ScanCode.NumpadBackspace, KeyCode.Unknown);
	define(ScanCode.NumpadMemoryStore, KeyCode.Unknown);
	define(ScanCode.NumpadMemoryRecall, KeyCode.Unknown);
	define(ScanCode.NumpadMemoryClear, KeyCode.Unknown);
	define(ScanCode.NumpadMemoryAdd, KeyCode.Unknown);
	define(ScanCode.NumpadMemorySubtract, KeyCode.Unknown);
	define(ScanCode.NumpadClear, KeyCode.Unknown);
	define(ScanCode.NumpadClearEntry, KeyCode.Unknown);
	define(ScanCode.ControlLeft, KeyCode.Ctrl); // Duplicate
	define(ScanCode.ShiftLeft, KeyCode.Shift); // Duplicate
	define(ScanCode.AltLeft, KeyCode.Alt); // Duplicate
	define(ScanCode.MetaLeft, KeyCode.Meta); // Duplicate
	define(ScanCode.ControlRight, KeyCode.Ctrl); // Duplicate
	define(ScanCode.ShiftRight, KeyCode.Shift); // Duplicate
	define(ScanCode.AltRight, KeyCode.Alt); // Duplicate
	define(ScanCode.MetaRight, KeyCode.Meta); // Duplicate
	define(ScanCode.BrightnessUp, KeyCode.Unknown);
	define(ScanCode.BrightnessDown, KeyCode.Unknown);
	define(ScanCode.MediaPlay, KeyCode.Unknown);
	define(ScanCode.MediaRecord, KeyCode.Unknown);
	define(ScanCode.MediaFastForward, KeyCode.Unknown);
	define(ScanCode.MediaRewind, KeyCode.Unknown);
	define(ScanCode.MediaTrackNext, KeyCode.Unknown);
	define(ScanCode.MediaTrackPrevious, KeyCode.Unknown);
	define(ScanCode.MediaStop, KeyCode.Unknown);
	define(ScanCode.Eject, KeyCode.Unknown);
	define(ScanCode.MediaPlayPause, KeyCode.Unknown);
	define(ScanCode.MediaSelect, KeyCode.Unknown);
	define(ScanCode.LaunchMail, KeyCode.Unknown);
	define(ScanCode.LaunchApp2, KeyCode.Unknown);
	define(ScanCode.LaunchApp1, KeyCode.Unknown);
	define(ScanCode.SelectTask, KeyCode.Unknown);
	define(ScanCode.LaunchScreenSaver, KeyCode.Unknown);
	define(ScanCode.BrowserSearch, KeyCode.Unknown);
	define(ScanCode.BrowserHome, KeyCode.Unknown);
	define(ScanCode.BrowserBack, KeyCode.Unknown);
	define(ScanCode.BrowserForward, KeyCode.Unknown);
	define(ScanCode.BrowserStop, KeyCode.Unknown);
	define(ScanCode.BrowserRefresh, KeyCode.Unknown);
	define(ScanCode.BrowserFavorites, KeyCode.Unknown);
	define(ScanCode.ZoomToggle, KeyCode.Unknown);
	define(ScanCode.MailReply, KeyCode.Unknown);
	define(ScanCode.MailForward, KeyCode.Unknown);
	define(ScanCode.MailSend, KeyCode.Unknown);
})();