{
  "version": 3,
  "sources": ["../index.ts"],
  "sourcesContent": ["/**\n * Provide function to {@link parse} the options.txt and also {@link stringify} it into the string.\n *\n * @packageDocumentation\n * @module @xmcl/gamesetting\n */\n\n/**\n * The AmbientOcclusion enum value in options.txt\n */\nexport enum AmbientOcclusion {\n  Off = 0,\n  Minimum = 1,\n  Maximum = 2,\n}\nexport enum Particles {\n  Minimum = 2,\n  Decreased = 1,\n  All = 0,\n}\nexport enum Difficulty {\n  Peaceful = 0,\n  Easy = 1,\n  Normal = 2,\n  Hard = 3,\n}\nexport type MipmapLevel = 0 | 1 | 2 | 3 | 4\nexport type RenderDistance = 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32\nexport const RenderDistances = Object.freeze({ Tiny: 2, Short: 4, Normal: 8, Far: 16, Extreme: 32 })\nexport const Graphics = Object.freeze({ Fast: false, Fancy: true })\nexport type Graphic = boolean\nexport const RenderClouds = Object.freeze({ Off: false, Fast: 'fast', Fancy: true })\nexport type RenderCloud = true | false | 'fast'\n\nexport enum KeyCode {\n  'Escape' = 1,\n  'Digit1' = 2,\n  'Digit2' = 3,\n  'Digit3' = 4,\n  'Digit4' = 5,\n  'Digit5' = 6,\n  'Digit6' = 7,\n  'Digit7' = 8,\n  'Digit8' = 9,\n  'Digit9' = 10,\n  'Digit0' = 11,\n  'Minus' = 12,\n  'Equal' = 13,\n  'Backspace' = 14,\n  'Tab' = 15,\n\n  'KeyQ' = 16,\n  'KeyW' = 17,\n  'KeyE' = 18,\n  'KeyR' = 19,\n  'KeyT' = 20,\n  'KeyY' = 21,\n  'KeyU' = 22,\n  'KeyI' = 23,\n  'KeyO' = 24,\n  'KeyP' = 25,\n\n  'BracketLeft' = 26,\n  'BracketRight' = 27,\n  'Enter' = 28,\n  'ControlLeft' = 29,\n\n  'KeyA' = 30,\n  'KeyS' = 31,\n  'KeyD' = 32,\n  'KeyF' = 33,\n  'KeyG' = 34,\n  'KeyH' = 35,\n  'KeyJ' = 36,\n  'KeyK' = 37,\n  'KeyL' = 38,\n\n  'Semicolon' = 39,\n  'Quote' = 40,\n  'Backquote' = 41,\n  'ShiftLeft' = 42,\n  'Backslash' = 43,\n\n  'KeyZ' = 44,\n  'KeyX' = 45,\n  'KeyC' = 46,\n  'KeyV' = 47,\n  'KeyB' = 48,\n  'KeyN' = 49,\n  'KeyM' = 50,\n\n  'Comma' = 51,\n  'Period' = 52,\n  'Slash' = 53,\n  'ShiftRight' = 54,\n\n  'Space' = 57,\n  'CapsLock' = 58,\n\n  'F1' = 59,\n  'F2' = 60,\n  'F3' = 61,\n  'F4' = 62,\n  'F5' = 63,\n  'F6' = 64,\n  'F7' = 65,\n  'F8' = 66,\n  'F9' = 67,\n  'F10' = 68,\n\n  'NumLock' = 69,\n  'ScrollLock' = 70,\n  'Numpad7' = 71,\n  'Numpad8' = 72,\n  'Numpad9' = 73,\n  'NumpadSubtract' = 74,\n  'Numpad4' = 75,\n  'Numpad5' = 76,\n  'Numpad6' = 77,\n  'NumpadAdd' = 78,\n  'Numpad1' = 79,\n  'Numpad2' = 80,\n  'Numpad3' = 81,\n  'Numpad0' = 82,\n  'NumpadDecimal' = 83,\n  'F11' = 87,\n  'F12' = 88,\n  'F13' = 100,\n  'F14' = 101,\n  'F15' = 102,\n  'F16' = 103,\n  'F17' = 104,\n  'F18' = 105,\n\n  'ControlRight' = 157,\n\n  'ArrowUp' = 200,\n  'ArrowLeft' = 203,\n  'ArrowRight' = 205,\n  'ArrowDown' = 208,\n\n  'MULTIPLY' = 55,\n  'Left Menu/Alt' = 56,\n\n  'NumpadEnter' = 156,\n  'NumpadComma' = 179,\n\n  'Home' = 199,\n  'PageUp' = 201,\n  'End' = 207,\n  'PageDown' = 209,\n  'Insert' = 210,\n  'Delete' = 211,\n\n  'MouseLeft' = -100,\n  'MouseRight' = -99,\n  'MouseMiddle' = -98,\n}\n\nconst DEFAULT_FRAME = {\n  version: 1139, // for 1.12\n  invertYMouse: false,\n  mouseSensitivity: 0.5,\n  difficulty: Difficulty.Normal,\n\n  // critical performance video settings\n  renderDistance: 12 as RenderDistance,\n  particles: Particles.Decreased,\n  fboEnable: true,\n  fancyGraphics: Graphics.Fancy as boolean | undefined,\n  ao: AmbientOcclusion.Maximum,\n  renderClouds: RenderClouds.Fancy as RenderCloud,\n  enableVsync: true,\n  useVbo: true,\n  mipmapLevels: 4 as MipmapLevel,\n  anaglyph3d: false,\n\n  fov: 0,\n  gamma: 0,\n  saturation: 0,\n  guiScale: 0,\n  bobView: true,\n  maxFps: 120,\n  fullscreen: false,\n\n  resourcePacks: [] as string[],\n  incompatibleResourcePacks: [] as string[],\n  lastServer: '',\n  lang: 'en_us',\n  chatVisibility: 0,\n  chatColors: true,\n  chatLinks: true,\n  chatLinksPrompt: true,\n  chatOpacity: 1,\n  snooperEnabled: true,\n\n  hideServerAddress: false,\n  advancedItemTooltips: false,\n  pauseOnLostFocus: true,\n  touchscreen: false,\n  overrideWidth: 0,\n  overrideHeight: 0,\n  heldItemTooltips: true,\n  chatHeightFocused: 1,\n  chatHeightUnfocused: 0.44366196,\n  chatScale: 1,\n  chatWidth: 1,\n  forceUnicodeFont: false,\n  reducedDebugInfo: false,\n  useNativeTransport: true,\n  entityShadows: true,\n  mainHand: 'right',\n  attackIndicator: 1,\n  showSubtitles: false,\n  realmsNotifications: true,\n  enableWeakAttacks: false,\n  autoJump: true,\n  narrator: 0,\n  tutorialStep: 'movement',\n  'key_key.attack': -100 as KeyCode,\n  'key_key.use': -99 as KeyCode,\n  'key_key.forward': 17 as KeyCode,\n  'key_key.left': 30 as KeyCode,\n  'key_key.back': 31 as KeyCode,\n  'key_key.right': 32 as KeyCode,\n  'key_key.jump': 57 as KeyCode,\n  'key_key.sneak': 42 as KeyCode,\n  'key_key.sprint': 29 as KeyCode,\n  'key_key.drop': 16 as KeyCode,\n  'key_key.inventory': 18 as KeyCode,\n  'key_key.chat': 20 as KeyCode,\n  'key_key.playerlist': 15 as KeyCode,\n  'key_key.pickItem': -98 as KeyCode,\n  'key_key.command': 53 as KeyCode,\n  'key_key.screenshot': 60 as KeyCode,\n  'key_key.togglePerspective': 63 as KeyCode,\n  'key_key.smoothCamera': 0 as KeyCode,\n  'key_key.fullscreen': 87 as KeyCode,\n  'key_key.spectatorOutlines': 0 as KeyCode,\n  'key_key.swapHands': 33 as KeyCode,\n  'key_key.saveToolbarActivator': 46 as KeyCode,\n  'key_key.loadToolbarActivator': 45 as KeyCode,\n  'key_key.advancements': 38 as KeyCode,\n  'key_key.hotbar.1': 2 as KeyCode,\n  'key_key.hotbar.2': 3 as KeyCode,\n  'key_key.hotbar.3': 4 as KeyCode,\n  'key_key.hotbar.4': 5 as KeyCode,\n  'key_key.hotbar.5': 6 as KeyCode,\n  'key_key.hotbar.6': 7 as KeyCode,\n  'key_key.hotbar.7': 8 as KeyCode,\n  'key_key.hotbar.8': 9 as KeyCode,\n  'key_key.hotbar.9': 10 as KeyCode,\n  soundCategory_master: 1 as KeyCode,\n  soundCategory_music: 1 as KeyCode,\n  soundCategory_record: 1 as KeyCode,\n  soundCategory_weather: 1 as KeyCode,\n  soundCategory_block: 1 as KeyCode,\n  soundCategory_hostile: 1 as KeyCode,\n  soundCategory_neutral: 1 as KeyCode,\n  soundCategory_player: 1 as KeyCode,\n  soundCategory_ambient: 1 as KeyCode,\n  soundCategory_voice: 1 as KeyCode,\n  modelPart_cape: true,\n  modelPart_jacket: true,\n  modelPart_left_sleeve: true,\n  modelPart_right_sleeve: true,\n  modelPart_left_pants_leg: true,\n  modelPart_right_pants_leg: true,\n  modelPart_hat: true,\n}\n\nexport type FullFrame = typeof DEFAULT_FRAME\nexport type Frame = Partial<FullFrame>\n\n/**\n * Get the default values in options.txt.\n */\nexport function getDefaultFrame(): FullFrame {\n  return Object.assign({}, DEFAULT_FRAME, {\n    resourcePacks: [] as string[],\n    incompatibleResourcePacks: [] as string[],\n  })\n}\n\nexport type ModelPart =\n  'cape' |\n  'jacket' |\n  'left_sleeve' |\n  'right_sleeve' |\n  'left_pants_leg' |\n  'right_pants_leg' |\n  'hat'\n\nexport type SoundCategories =\n  'master' |\n  'music' |\n  'record' |\n  'weather' |\n  'block' |\n  'hostile' |\n  'neutral' |\n  'player' |\n  'ambient' |\n  'voice'\n\nexport type HotKeys = 'attack' |\n  'use' |\n  'forward' |\n  'left' |\n  'back' |\n  'right' |\n  'jump' |\n  'sneak' |\n  'sprint' |\n  'drop' |\n  'inventory' |\n  'chat' |\n  'playerlist' |\n  'pickItem' |\n  'command' |\n  'screenshot' |\n  'togglePerspective' |\n  'smoothCamera' |\n  'fullscreen' |\n  'spectatorOutlines' |\n  'swapHands' |\n  'saveToolbarActivator' |\n  'loadToolbarActivator' |\n  'advancements' |\n  'hotbar.1' |\n  'hotbar.2' |\n  'hotbar.3' |\n  'hotbar.4' |\n  'hotbar.5' |\n  'hotbar.6' |\n  'hotbar.7' |\n  'hotbar.8' |\n  'hotbar.9'\n\n/**\n * Parse raw game setting options.txt content\n *\n * @param str the options.txt content\n * @param strict strictly follow the current version of options format (outdate version might cause problem. If your options.txt is new one with new fields, don't turn on this)\n */\nexport function parse(str: string, strict?: boolean): GameSetting | Frame {\n  const intPattern = /^\\d+$/\n  const floatPattern = /^[-+]?[0-9]*\\.[0-9]+$/\n  const booleanPattern = /^(true)|(false)$/\n  const lines = str.split('\\n')\n  if (!lines || lines.length === 0) {\n    return strict ? getDefaultFrame() : {}\n  }\n  const setting = lines\n    .map(l => {\n      const i = l.indexOf(':')\n      if (i !== -1) {\n        return [l.slice(0, i), l.slice(i + 1)]\n      } else {\n        // drop the line\n        return ['', l]\n      }\n    })\n    .filter((pair) => pair[0].length !== 0)\n    .map(([key, value]) => {\n      value = value.trim()\n      let newValue = undefined as any\n      if (intPattern.test(value)) {\n        newValue = Number.parseInt(value, 10)\n      } else if (floatPattern.test(value)) {\n        newValue = Number.parseFloat(value)\n      } else if (booleanPattern.test(value)) {\n        newValue = value === 'true'\n      } else if (value.startsWith('[') && value.endsWith(']')) {\n        const raw = value.slice(1, -1)\n        if (raw.length === 0) {\n          newValue = []\n        } else {\n          // parse the sequence of string might wrapped by \"\", but it could contain space inside the \"\"\n          const result = [] as string[]\n          let buffer = ''\n          let inQuote = false\n          for (let i = 0; i < raw.length; i++) {\n            const char = raw[i]\n            if (char === '\"') {\n              inQuote = !inQuote\n            } else if (char === ',' && !inQuote) {\n              result.push(buffer)\n              buffer = ''\n            } else {\n              buffer += char\n            }\n          }\n          if (buffer.length > 0) {\n            result.push(buffer)\n          }\n          newValue = result\n        }\n      } else {\n        newValue = value\n      }\n\n      return { [key]: newValue }\n    })\n    .reduce((prev, current) => Object.assign(prev, current), {})\n  if (!strict) { return setting as Frame }\n  const source: any = getDefaultFrame()\n  const target: any = {}\n  Object.keys(source).forEach((key) => {\n    target[key] = typeof setting[key] === typeof source[key] ? setting[key] : source[key]\n    delete setting.key\n  })\n  return target as GameSetting\n}\n\n/**\n * Generate text format game setting for options.txt file.\n *\n * @param setting The game setting object\n * @param original\n * @param eol The end of line character, default is `\\n`\n */\nexport function stringify(setting: GameSetting | Frame | any, original?: string, eol = '\\n'): string {\n  let model: any\n  if (original) {\n    model = parse(original) as any\n    for (const key in model) {\n      if (key in model && key in setting) {\n        model[key] = setting[key]\n      }\n    }\n  } else { model = setting }\n  return Object.keys(model)\n    .filter((key) => key !== undefined && key !== 'undefined')\n    .map((key) => {\n      const val = model[key]\n      if (typeof val === 'undefined') { return '' }\n      return typeof val !== 'string' ? `${key}:${JSON.stringify(val)}` : `${key}:${val}`\n    }).join(eol)\n}\n\nexport type GameSetting = ReturnType<typeof getDefaultFrame>\n"],
  "mappings": "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",
  "names": ["AmbientOcclusion", "Particles", "Difficulty", "KeyCode"]
}
