{"version":3,"file":"index.cjs","names":["color: string | number[]","color: string","COLOR_MAP: ColorMapping[]","GUTTER_COLOR_MAP: ColorMapping[]","rawTmThemeString: string","rules: MonacoTheme['rules']","scopes: string[]","rule: Partial<MonacoTheme['rules'][0]>","globalColors: Record<string, string>"],"sources":["../src/index.ts"],"sourcesContent":["import * as plist from 'fast-plist';\n\nexport interface MonacoTheme {\n  base: 'vs-dark' | 'vs';\n  inherit: boolean;\n  rules: {\n    token: string;\n    foreground?: string;\n    background?: string;\n    fontStyle?: string;\n  }[];\n  colors: Record<string, string>;\n}\n\ninterface RawThemeSettings {\n  settings: Array<{\n    scope?: string | string[];\n    settings?: {\n      foreground?: string;\n      background?: string;\n      fontStyle?: string;\n    };\n  }>;\n  gutterSettings?: Record<string, string>;\n}\n\ninterface ColorMapping {\n  tm: string;\n  mn: string;\n}\n\n/**\n * Taken from ACE editor\n */\nfunction rgbColor(color: string | number[]): number[] {\n  if (typeof color === 'object') {\n    return color;\n  }\n  if (color[0] === '#') {\n    return color\n      .match(/^#(..)(..)(..)/)!\n      .slice(1)\n      .map((c) => parseInt(c, 16));\n  } else {\n    return color\n      .match(/\\(([^,]+),([^,]+),([^,]+)/)!\n      .slice(1)\n      .map((c) => parseInt(c, 10));\n  }\n}\n\nfunction darkness(color: string): number {\n  const rgb = rgbColor(color);\n  return (0.21 * rgb[0] + 0.72 * rgb[1] + 0.07 * rgb[2]) / 255;\n}\n\nfunction parseColor(color: string): string | null {\n  if (!color.length) return null;\n  let normalizedColor = color;\n  if (normalizedColor.length === 4) {\n    normalizedColor = normalizedColor.replace(/[a-fA-F\\d]/g, '$&$&');\n  }\n  if (normalizedColor.length === 7) {\n    return normalizedColor;\n  }\n  if (normalizedColor.length === 9) {\n    return normalizedColor; // substr(0, 7);\n  } else {\n    const match = normalizedColor.match(/^#(..)(..)(..)(..)$/);\n    if (!match) {\n      console.error(\"can't parse color\", normalizedColor);\n      return null;\n    }\n    const rgba = match.slice(1).map((c) => parseInt(c, 16));\n    rgba[3] = parseFloat((rgba[3] / 0xff).toPrecision(2));\n    return `rgba(${rgba.join(', ')})`;\n  }\n}\n\n/* Mapped from vscode/src/vs/workbench/services/themes/electron-browser/themeCompatibility.ts */\nconst COLOR_MAP: ColorMapping[] = [\n  {\n    tm: 'foreground',\n    mn: 'editor.foreground',\n  },\n  {\n    tm: 'background',\n    mn: 'editor.background',\n  },\n  {\n    tm: 'selection',\n    mn: 'editor.selectionBackground',\n  },\n  {\n    tm: 'inactiveSelection',\n    mn: 'editor.inactiveSelectionBackground',\n  },\n  {\n    tm: 'selectionHighlightColor',\n    mn: 'editor.selectionHighlightBackground',\n  },\n  {\n    tm: 'findMatchHighlight',\n    mn: 'editor.findMatchHighlightBackground',\n  },\n  {\n    tm: 'currentFindMatchHighlight',\n    mn: 'editor.findMatchBackground',\n  },\n  {\n    tm: 'hoverHighlight',\n    mn: 'editor.hoverHighlightBackground',\n  },\n  {\n    tm: 'wordHighlight',\n    mn: 'editor.wordHighlightBackground',\n  },\n  {\n    tm: 'wordHighlightStrong',\n    mn: 'editor.wordHighlightStrongBackground',\n  },\n  {\n    tm: 'findRangeHighlight',\n    mn: 'editor.findRangeHighlightBackground',\n  },\n  {\n    tm: 'findMatchHighlight',\n    mn: 'peekViewResult.matchHighlightBackground',\n  },\n  {\n    tm: 'referenceHighlight',\n    mn: 'peekViewEditor.matchHighlightBackground',\n  },\n  {\n    tm: 'lineHighlight',\n    mn: 'editor.lineHighlightBackground',\n  },\n  {\n    tm: 'rangeHighlight',\n    mn: 'editor.rangeHighlightBackground',\n  },\n  {\n    tm: 'caret',\n    mn: 'editorCursor.foreground',\n  },\n  {\n    tm: 'invisibles',\n    mn: 'editorWhitespace.foreground',\n  },\n  {\n    tm: 'guide',\n    mn: 'editorIndentGuide.background',\n  },\n  {\n    tm: 'activeGuide',\n    mn: 'editorIndentGuide.activeBackground',\n  },\n  {\n    tm: 'selectionBorder',\n    mn: 'editor.selectionHighlightBorder',\n  },\n];\n\nconst ansiColorMap = [\n  'ansiBlack',\n  'ansiRed',\n  'ansiGreen',\n  'ansiYellow',\n  'ansiBlue',\n  'ansiMagenta',\n  'ansiCyan',\n  'ansiWhite',\n  'ansiBrightBlack',\n  'ansiBrightRed',\n  'ansiBrightGreen',\n  'ansiBrightYellow',\n  'ansiBrightBlue',\n  'ansiBrightMagenta',\n  'ansiBrightCyan',\n  'ansiBrightWhite',\n];\n\nansiColorMap.forEach((color) => {\n  COLOR_MAP.push({\n    tm: color,\n    mn: 'terminal.' + color,\n  });\n});\n\nconst GUTTER_COLOR_MAP: ColorMapping[] = [];\n\n/**\n * @param rawTmThemeString - The contents read from a tmTheme file.\n * @returns A monaco compatible theme definition. See https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.istandalonethemedata.html\n */\nexport function parseTmTheme(rawTmThemeString: string): MonacoTheme {\n  const rawData = plist.parse(rawTmThemeString) as RawThemeSettings;\n  const globalSettings = rawData.settings[0]?.settings || {};\n  const gutterSettings = rawData.gutterSettings;\n  const rules: MonacoTheme['rules'] = [];\n\n  rawData.settings.forEach((setting) => {\n    if (!setting.settings) {\n      return;\n    }\n\n    let scopes: string[];\n\n    if (typeof setting.scope === 'string') {\n      scopes = setting.scope\n        .replace(/^[,]+/, '')\n        .replace(/[,]+$/, '')\n        .split(',');\n    } else if (Array.isArray(setting.scope)) {\n      scopes = setting.scope;\n    } else {\n      scopes = [''];\n    }\n\n    const rule: Partial<MonacoTheme['rules'][0]> = {};\n    const settings = setting.settings;\n\n    if (settings.foreground) {\n      const foregroundColor = parseColor(settings.foreground);\n      if (foregroundColor) {\n        rule.foreground = foregroundColor.toLowerCase().replace('#', '');\n      }\n    }\n\n    if (settings.background) {\n      const backgroundColor = parseColor(settings.background);\n      if (backgroundColor) {\n        rule.background = backgroundColor.toLowerCase().replace('#', '');\n      }\n    }\n\n    if (settings.fontStyle && typeof settings.fontStyle === 'string') {\n      rule.fontStyle = settings.fontStyle;\n    }\n\n    scopes.forEach((scope) => {\n      if (!scope || !Object.keys(rule).length) {\n        return;\n      }\n      const r = {\n        ...rule,\n        token: scope.trim(),\n      } as MonacoTheme['rules'][0];\n      rules.push(r);\n    });\n  });\n\n  const globalColors: Record<string, string> = {};\n\n  /* More properties to be added */\n  COLOR_MAP.forEach((obj) => {\n    if (globalSettings[obj.tm as keyof typeof globalSettings]) {\n      const color = parseColor(\n        globalSettings[obj.tm as keyof typeof globalSettings] as string,\n      );\n      if (color) {\n        globalColors[obj.mn] = color;\n      }\n    }\n  });\n\n  if (gutterSettings) {\n    GUTTER_COLOR_MAP.forEach((obj) => {\n      if (gutterSettings[obj.tm]) {\n        const color = parseColor(gutterSettings[obj.tm]);\n        if (color) {\n          globalColors[obj.mn] = color;\n        }\n      }\n    });\n  }\n\n  const editorBg = globalColors['editor.background'];\n  const base = editorBg && darkness(editorBg) < 0.5 ? 'vs-dark' : 'vs';\n\n  return {\n    base,\n    inherit: true,\n    rules,\n    colors: globalColors,\n  };\n}\n"],"mappings":"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"}