Files
hive/mcp-server/node_modules/@gerrit0/mini-shiki/dist/shiki.js
anthonyrawlins e89f2f4b7b Add comprehensive development roadmap via GitHub Issues
Created 10 detailed GitHub issues covering:
- Project activation and management UI (#1-2)
- Worker node coordination and visualization (#3-4)
- Automated GitHub repository scanning (#5)
- Intelligent model-to-issue matching (#6)
- Multi-model task execution system (#7)
- N8N workflow integration (#8)
- Hive-Bzzz P2P bridge (#9)
- Peer assistance protocol (#10)

Each issue includes detailed specifications, acceptance criteria,
technical implementation notes, and dependency mapping.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 19:41:01 +10:00

2879 lines
70 KiB
JavaScript

import * as onig from '@shikijs/engine-oniguruma';
import { readFile } from 'fs/promises';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { ShikiError as ShikiError$1 } from '@shikijs/types';
import { INITIAL, EncodedTokenMetadata, FontStyle, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';
function resolveColorReplacements(theme, options) {
const replacements = typeof theme === "string" ? {} : { ...theme.colorReplacements };
const themeName = typeof theme === "string" ? theme : theme.name;
for (const [key, value] of Object.entries(options?.colorReplacements || {})) {
if (typeof value === "string")
replacements[key] = value;
else if (key === themeName)
Object.assign(replacements, value);
}
return replacements;
}
function applyColorReplacements(color, replacements) {
if (!color)
return color;
return replacements?.[color?.toLowerCase()] || color;
}
function toArray(x) {
return Array.isArray(x) ? x : [x];
}
async function normalizeGetter(p) {
return Promise.resolve(typeof p === "function" ? p() : p).then((r) => r.default || r);
}
function isPlainLang(lang) {
return !lang || ["plaintext", "txt", "text", "plain"].includes(lang);
}
function isSpecialLang(lang) {
return lang === "ansi" || isPlainLang(lang);
}
function isNoneTheme(theme) {
return theme === "none";
}
function isSpecialTheme(theme) {
return isNoneTheme(theme);
}
function splitLines(code, preserveEnding = false) {
const parts = code.split(/(\r?\n)/g);
let index = 0;
const lines = [];
for (let i = 0; i < parts.length; i += 2) {
const line = preserveEnding ? parts[i] + (parts[i + 1] || "") : parts[i];
lines.push([line, index]);
index += parts[i].length;
index += parts[i + 1]?.length || 0;
}
return lines;
}
const _grammarStateMap = /* @__PURE__ */ new WeakMap();
function setLastGrammarStateToMap(keys, state) {
_grammarStateMap.set(keys, state);
}
function getLastGrammarStateFromMap(keys) {
return _grammarStateMap.get(keys);
}
class GrammarState {
/**
* Theme to Stack mapping
*/
_stacks = {};
lang;
get themes() {
return Object.keys(this._stacks);
}
get theme() {
return this.themes[0];
}
get _stack() {
return this._stacks[this.theme];
}
/**
* Static method to create a initial grammar state.
*/
static initial(lang, themes) {
return new GrammarState(
Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),
lang
);
}
constructor(...args) {
if (args.length === 2) {
const [stacksMap, lang] = args;
this.lang = lang;
this._stacks = stacksMap;
} else {
const [stack, lang, theme] = args;
this.lang = lang;
this._stacks = { [theme]: stack };
}
}
/**
* Get the internal stack object.
* @internal
*/
getInternalStack(theme = this.theme) {
return this._stacks[theme];
}
getScopes(theme = this.theme) {
return getScopes(this._stacks[theme]);
}
toJSON() {
return {
lang: this.lang,
theme: this.theme,
themes: this.themes,
scopes: this.getScopes()
};
}
}
function getScopes(stack) {
const scopes = [];
const visited = /* @__PURE__ */ new Set();
function pushScope(stack2) {
if (visited.has(stack2))
return;
visited.add(stack2);
const name = stack2?.nameScopesList?.scopeName;
if (name)
scopes.push(name);
if (stack2.parent)
pushScope(stack2.parent);
}
pushScope(stack);
return scopes;
}
function getGrammarStack(state, theme) {
if (!(state instanceof GrammarState))
throw new ShikiError$1("Invalid grammar state");
return state.getInternalStack(theme);
}
// src/colors.ts
var namedColors = [
"black",
"red",
"green",
"yellow",
"blue",
"magenta",
"cyan",
"white",
"brightBlack",
"brightRed",
"brightGreen",
"brightYellow",
"brightBlue",
"brightMagenta",
"brightCyan",
"brightWhite"
];
// src/decorations.ts
var decorations = {
1: "bold",
2: "dim",
3: "italic",
4: "underline",
7: "reverse",
8: "hidden",
9: "strikethrough"
};
// src/parser.ts
function findSequence(value, position) {
const nextEscape = value.indexOf("\x1B", position);
if (nextEscape !== -1) {
if (value[nextEscape + 1] === "[") {
const nextClose = value.indexOf("m", nextEscape);
if (nextClose !== -1) {
return {
sequence: value.substring(nextEscape + 2, nextClose).split(";"),
startPosition: nextEscape,
position: nextClose + 1
};
}
}
}
return {
position: value.length
};
}
function parseColor(sequence) {
const colorMode = sequence.shift();
if (colorMode === "2") {
const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));
if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))
return;
return {
type: "rgb",
rgb
};
} else if (colorMode === "5") {
const index = sequence.shift();
if (index) {
return { type: "table", index: Number(index) };
}
}
}
function parseSequence(sequence) {
const commands = [];
while (sequence.length > 0) {
const code = sequence.shift();
if (!code)
continue;
const codeInt = Number.parseInt(code);
if (Number.isNaN(codeInt))
continue;
if (codeInt === 0) {
commands.push({ type: "resetAll" });
} else if (codeInt <= 9) {
const decoration = decorations[codeInt];
if (decoration) {
commands.push({
type: "setDecoration",
value: decorations[codeInt]
});
}
} else if (codeInt <= 29) {
const decoration = decorations[codeInt - 20];
if (decoration) {
commands.push({
type: "resetDecoration",
value: decoration
});
if (decoration === "dim") {
commands.push({
type: "resetDecoration",
value: "bold"
});
}
}
} else if (codeInt <= 37) {
commands.push({
type: "setForegroundColor",
value: { type: "named", name: namedColors[codeInt - 30] }
});
} else if (codeInt === 38) {
const color = parseColor(sequence);
if (color) {
commands.push({
type: "setForegroundColor",
value: color
});
}
} else if (codeInt === 39) {
commands.push({
type: "resetForegroundColor"
});
} else if (codeInt <= 47) {
commands.push({
type: "setBackgroundColor",
value: { type: "named", name: namedColors[codeInt - 40] }
});
} else if (codeInt === 48) {
const color = parseColor(sequence);
if (color) {
commands.push({
type: "setBackgroundColor",
value: color
});
}
} else if (codeInt === 49) {
commands.push({
type: "resetBackgroundColor"
});
} else if (codeInt === 53) {
commands.push({
type: "setDecoration",
value: "overline"
});
} else if (codeInt === 55) {
commands.push({
type: "resetDecoration",
value: "overline"
});
} else if (codeInt >= 90 && codeInt <= 97) {
commands.push({
type: "setForegroundColor",
value: { type: "named", name: namedColors[codeInt - 90 + 8] }
});
} else if (codeInt >= 100 && codeInt <= 107) {
commands.push({
type: "setBackgroundColor",
value: { type: "named", name: namedColors[codeInt - 100 + 8] }
});
}
}
return commands;
}
function createAnsiSequenceParser() {
let foreground = null;
let background = null;
let decorations2 = /* @__PURE__ */ new Set();
return {
parse(value) {
const tokens = [];
let position = 0;
do {
const findResult = findSequence(value, position);
const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);
if (text.length > 0) {
tokens.push({
value: text,
foreground,
background,
decorations: new Set(decorations2)
});
}
if (findResult.sequence) {
const commands = parseSequence(findResult.sequence);
for (const styleToken of commands) {
if (styleToken.type === "resetAll") {
foreground = null;
background = null;
decorations2.clear();
} else if (styleToken.type === "resetForegroundColor") {
foreground = null;
} else if (styleToken.type === "resetBackgroundColor") {
background = null;
} else if (styleToken.type === "resetDecoration") {
decorations2.delete(styleToken.value);
}
}
for (const styleToken of commands) {
if (styleToken.type === "setForegroundColor") {
foreground = styleToken.value;
} else if (styleToken.type === "setBackgroundColor") {
background = styleToken.value;
} else if (styleToken.type === "setDecoration") {
decorations2.add(styleToken.value);
}
}
}
position = findResult.position;
} while (position < value.length);
return tokens;
}
};
}
// src/palette.ts
var defaultNamedColorsMap = {
black: "#000000",
red: "#bb0000",
green: "#00bb00",
yellow: "#bbbb00",
blue: "#0000bb",
magenta: "#ff00ff",
cyan: "#00bbbb",
white: "#eeeeee",
brightBlack: "#555555",
brightRed: "#ff5555",
brightGreen: "#00ff00",
brightYellow: "#ffff55",
brightBlue: "#5555ff",
brightMagenta: "#ff55ff",
brightCyan: "#55ffff",
brightWhite: "#ffffff"
};
function createColorPalette(namedColorsMap = defaultNamedColorsMap) {
function namedColor(name) {
return namedColorsMap[name];
}
function rgbColor(rgb) {
return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, "0")).join("")}`;
}
let colorTable;
function getColorTable() {
if (colorTable) {
return colorTable;
}
colorTable = [];
for (let i = 0; i < namedColors.length; i++) {
colorTable.push(namedColor(namedColors[i]));
}
let levels = [0, 95, 135, 175, 215, 255];
for (let r = 0; r < 6; r++) {
for (let g = 0; g < 6; g++) {
for (let b = 0; b < 6; b++) {
colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));
}
}
}
let level = 8;
for (let i = 0; i < 24; i++, level += 10) {
colorTable.push(rgbColor([level, level, level]));
}
return colorTable;
}
function tableColor(index) {
return getColorTable()[index];
}
function value(color) {
switch (color.type) {
case "named":
return namedColor(color.name);
case "rgb":
return rgbColor(color.rgb);
case "table":
return tableColor(color.index);
}
}
return {
value
};
}
function tokenizeAnsiWithTheme(theme, fileContents, options) {
const colorReplacements = resolveColorReplacements(theme, options);
const lines = splitLines(fileContents);
const colorPalette = createColorPalette(
Object.fromEntries(
namedColors.map((name) => [
name,
theme.colors?.[`terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`]
])
)
);
const parser = createAnsiSequenceParser();
return lines.map(
(line) => parser.parse(line[0]).map((token) => {
let color;
let bgColor;
if (token.decorations.has("reverse")) {
color = token.background ? colorPalette.value(token.background) : theme.bg;
bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;
} else {
color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;
bgColor = token.background ? colorPalette.value(token.background) : void 0;
}
color = applyColorReplacements(color, colorReplacements);
bgColor = applyColorReplacements(bgColor, colorReplacements);
if (token.decorations.has("dim"))
color = dimColor(color);
let fontStyle = FontStyle.None;
if (token.decorations.has("bold"))
fontStyle |= FontStyle.Bold;
if (token.decorations.has("italic"))
fontStyle |= FontStyle.Italic;
if (token.decorations.has("underline"))
fontStyle |= FontStyle.Underline;
if (token.decorations.has("strikethrough"))
fontStyle |= FontStyle.Strikethrough;
return {
content: token.value,
offset: line[1],
// TODO: more accurate offset? might need to fork ansi-sequence-parser
color,
bgColor,
fontStyle
};
})
);
}
function dimColor(color) {
const hexMatch = color.match(/#([0-9a-f]{3})([0-9a-f]{3})?([0-9a-f]{2})?/);
if (hexMatch) {
if (hexMatch[3]) {
const alpha = Math.round(Number.parseInt(hexMatch[3], 16) / 2).toString(16).padStart(2, "0");
return `#${hexMatch[1]}${hexMatch[2]}${alpha}`;
} else if (hexMatch[2]) {
return `#${hexMatch[1]}${hexMatch[2]}80`;
} else {
return `#${Array.from(hexMatch[1]).map((x) => `${x}${x}`).join("")}80`;
}
}
const cssVarMatch = color.match(/var\((--[\w-]+-ansi-[\w-]+)\)/);
if (cssVarMatch)
return `var(${cssVarMatch[1]}-dim)`;
return color;
}
function codeToTokensBase(internal, code, options = {}) {
const {
lang = "text",
theme: themeName = internal.getLoadedThemes()[0]
} = options;
if (isPlainLang(lang) || isNoneTheme(themeName))
return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);
const { theme, colorMap } = internal.setTheme(themeName);
if (lang === "ansi")
return tokenizeAnsiWithTheme(theme, code, options);
const _grammar = internal.getLanguage(lang);
if (options.grammarState) {
if (options.grammarState.lang !== _grammar.name) {
throw new ShikiError$1(`Grammar state language "${options.grammarState.lang}" does not match highlight language "${_grammar.name}"`);
}
if (!options.grammarState.themes.includes(theme.name)) {
throw new ShikiError$1(`Grammar state themes "${options.grammarState.themes}" do not contain highlight theme "${theme.name}"`);
}
}
return tokenizeWithTheme(code, _grammar, theme, colorMap, options);
}
function tokenizeWithTheme(code, grammar, theme, colorMap, options) {
const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);
const grammarState = new GrammarState(
_tokenizeWithTheme(code, grammar, theme, colorMap, options).stateStack,
grammar.name,
theme.name
);
setLastGrammarStateToMap(result.tokens, grammarState);
return result.tokens;
}
function _tokenizeWithTheme(code, grammar, theme, colorMap, options) {
const colorReplacements = resolveColorReplacements(theme, options);
const {
tokenizeMaxLineLength = 0,
tokenizeTimeLimit = 500
} = options;
const lines = splitLines(code);
let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(
options.grammarContextCode,
grammar,
theme,
colorMap,
{
...options,
grammarState: void 0,
grammarContextCode: void 0
}
).stateStack : INITIAL;
let actual = [];
const final = [];
for (let i = 0, len = lines.length; i < len; i++) {
const [line, lineOffset] = lines[i];
if (line === "") {
actual = [];
final.push([]);
continue;
}
if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {
actual = [];
final.push([{
content: line,
offset: lineOffset,
color: "",
fontStyle: 0
}]);
continue;
}
let resultWithScopes;
let tokensWithScopes;
let tokensWithScopesIndex;
if (options.includeExplanation) {
resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);
tokensWithScopes = resultWithScopes.tokens;
tokensWithScopesIndex = 0;
}
const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);
const tokensLength = result.tokens.length / 2;
for (let j = 0; j < tokensLength; j++) {
const startIndex = result.tokens[2 * j];
const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;
if (startIndex === nextStartIndex)
continue;
const metadata = result.tokens[2 * j + 1];
const color = applyColorReplacements(
colorMap[EncodedTokenMetadata.getForeground(metadata)],
colorReplacements
);
const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);
const token = {
content: line.substring(startIndex, nextStartIndex),
offset: lineOffset + startIndex,
color,
fontStyle
};
if (options.includeExplanation) {
const themeSettingsSelectors = [];
if (options.includeExplanation !== "scopeName") {
for (const setting of theme.settings) {
let selectors;
switch (typeof setting.scope) {
case "string":
selectors = setting.scope.split(/,/).map((scope) => scope.trim());
break;
case "object":
selectors = setting.scope;
break;
default:
continue;
}
themeSettingsSelectors.push({
settings: setting,
selectors: selectors.map((selector) => selector.split(/ /))
});
}
}
token.explanation = [];
let offset = 0;
while (startIndex + offset < nextStartIndex) {
const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];
const tokenWithScopesText = line.substring(
tokenWithScopes.startIndex,
tokenWithScopes.endIndex
);
offset += tokenWithScopesText.length;
token.explanation.push({
content: tokenWithScopesText,
scopes: options.includeExplanation === "scopeName" ? explainThemeScopesNameOnly(
tokenWithScopes.scopes
) : explainThemeScopesFull(
themeSettingsSelectors,
tokenWithScopes.scopes
)
});
tokensWithScopesIndex += 1;
}
}
actual.push(token);
}
final.push(actual);
actual = [];
stateStack = result.ruleStack;
}
return {
tokens: final,
stateStack
};
}
function explainThemeScopesNameOnly(scopes) {
return scopes.map((scope) => ({ scopeName: scope }));
}
function explainThemeScopesFull(themeSelectors, scopes) {
const result = [];
for (let i = 0, len = scopes.length; i < len; i++) {
const scope = scopes[i];
result[i] = {
scopeName: scope,
themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))
};
}
return result;
}
function matchesOne(selector, scope) {
return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === ".";
}
function matches(selectors, scope, parentScopes) {
if (!matchesOne(selectors[selectors.length - 1], scope))
return false;
let selectorParentIndex = selectors.length - 2;
let parentIndex = parentScopes.length - 1;
while (selectorParentIndex >= 0 && parentIndex >= 0) {
if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))
selectorParentIndex -= 1;
parentIndex -= 1;
}
if (selectorParentIndex === -1)
return true;
return false;
}
function explainThemeScope(themeSettingsSelectors, scope, parentScopes) {
const result = [];
for (const { selectors, settings } of themeSettingsSelectors) {
for (const selectorPieces of selectors) {
if (matches(selectorPieces, scope, parentScopes)) {
result.push(settings);
break;
}
}
}
return result;
}
function codeToTokensWithThemes(internal, code, options) {
const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));
const themedTokens = themes.map((t) => {
const tokens2 = codeToTokensBase(internal, code, {
...options,
theme: t.theme
});
const state = getLastGrammarStateFromMap(tokens2);
const theme = typeof t.theme === "string" ? t.theme : t.theme.name;
return {
tokens: tokens2,
state,
theme
};
});
const tokens = syncThemesTokenization(
...themedTokens.map((i) => i.tokens)
);
const mergedTokens = tokens[0].map(
(line, lineIdx) => line.map((_token, tokenIdx) => {
const mergedToken = {
content: _token.content,
variants: {},
offset: _token.offset
};
if ("includeExplanation" in options && options.includeExplanation) {
mergedToken.explanation = _token.explanation;
}
tokens.forEach((t, themeIdx) => {
const {
content: _,
explanation: __,
offset: ___,
...styles
} = t[lineIdx][tokenIdx];
mergedToken.variants[themes[themeIdx].color] = styles;
});
return mergedToken;
})
);
const mergedGrammarState = themedTokens[0].state ? new GrammarState(
Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),
themedTokens[0].state.lang
) : void 0;
if (mergedGrammarState)
setLastGrammarStateToMap(mergedTokens, mergedGrammarState);
return mergedTokens;
}
function syncThemesTokenization(...themes) {
const outThemes = themes.map(() => []);
const count = themes.length;
for (let i = 0; i < themes[0].length; i++) {
const lines = themes.map((t) => t[i]);
const outLines = outThemes.map(() => []);
outThemes.forEach((t, i2) => t.push(outLines[i2]));
const indexes = lines.map(() => 0);
const current = lines.map((l) => l[0]);
while (current.every((t) => t)) {
const minLength = Math.min(...current.map((t) => t.content.length));
for (let n = 0; n < count; n++) {
const token = current[n];
if (token.content.length === minLength) {
outLines[n].push(token);
indexes[n] += 1;
current[n] = lines[n][indexes[n]];
} else {
outLines[n].push({
...token,
content: token.content.slice(0, minLength)
});
current[n] = {
...token,
content: token.content.slice(minLength),
offset: token.offset + minLength
};
}
}
}
}
return outThemes;
}
const VSCODE_FALLBACK_EDITOR_FG = { light: "#333333", dark: "#bbbbbb" };
const VSCODE_FALLBACK_EDITOR_BG = { light: "#fffffe", dark: "#1e1e1e" };
const RESOLVED_KEY = "__shiki_resolved";
function normalizeTheme(rawTheme) {
if (rawTheme?.[RESOLVED_KEY])
return rawTheme;
const theme = {
...rawTheme
};
if (theme.tokenColors && !theme.settings) {
theme.settings = theme.tokenColors;
delete theme.tokenColors;
}
theme.type ||= "dark";
theme.colorReplacements = { ...theme.colorReplacements };
theme.settings ||= [];
let { bg, fg } = theme;
if (!bg || !fg) {
const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;
if (globalSetting?.settings?.foreground)
fg = globalSetting.settings.foreground;
if (globalSetting?.settings?.background)
bg = globalSetting.settings.background;
if (!fg && theme?.colors?.["editor.foreground"])
fg = theme.colors["editor.foreground"];
if (!bg && theme?.colors?.["editor.background"])
bg = theme.colors["editor.background"];
if (!fg)
fg = theme.type === "light" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;
if (!bg)
bg = theme.type === "light" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;
theme.fg = fg;
theme.bg = bg;
}
if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {
theme.settings.unshift({
settings: {
foreground: theme.fg,
background: theme.bg
}
});
}
let replacementCount = 0;
const replacementMap = /* @__PURE__ */ new Map();
function getReplacementColor(value) {
if (replacementMap.has(value))
return replacementMap.get(value);
replacementCount += 1;
const hex = `#${replacementCount.toString(16).padStart(8, "0").toLowerCase()}`;
if (theme.colorReplacements?.[`#${hex}`])
return getReplacementColor(value);
replacementMap.set(value, hex);
return hex;
}
theme.settings = theme.settings.map((setting) => {
const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith("#");
const replaceBg = setting.settings?.background && !setting.settings.background.startsWith("#");
if (!replaceFg && !replaceBg)
return setting;
const clone = {
...setting,
settings: {
...setting.settings
}
};
if (replaceFg) {
const replacement = getReplacementColor(setting.settings.foreground);
theme.colorReplacements[replacement] = setting.settings.foreground;
clone.settings.foreground = replacement;
}
if (replaceBg) {
const replacement = getReplacementColor(setting.settings.background);
theme.colorReplacements[replacement] = setting.settings.background;
clone.settings.background = replacement;
}
return clone;
});
for (const key of Object.keys(theme.colors || {})) {
if (key === "editor.foreground" || key === "editor.background" || key.startsWith("terminal.ansi")) {
if (!theme.colors[key]?.startsWith("#")) {
const replacement = getReplacementColor(theme.colors[key]);
theme.colorReplacements[replacement] = theme.colors[key];
theme.colors[key] = replacement;
}
}
}
Object.defineProperty(theme, RESOLVED_KEY, {
enumerable: false,
writable: false,
value: true
});
return theme;
}
async function resolveLangs(langs) {
return Array.from(new Set((await Promise.all(
langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))
)).flat()));
}
async function resolveThemes(themes) {
const resolved = await Promise.all(
themes.map(
async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))
)
);
return resolved.filter((i) => !!i);
}
let _emitDeprecation = 3;
function warnDeprecated(message, version = 3) {
if (version > _emitDeprecation)
return;
{
console.trace(`[SHIKI DEPRECATE]: ${message}`);
}
}
class ShikiError extends Error {
constructor(message) {
super(message);
this.name = "ShikiError";
}
}
class Registry extends Registry$1 {
constructor(_resolver, _themes, _langs, _alias = {}) {
super(_resolver);
this._resolver = _resolver;
this._themes = _themes;
this._langs = _langs;
this._alias = _alias;
this._themes.map((t) => this.loadTheme(t));
this.loadLanguages(this._langs);
}
_resolvedThemes = /* @__PURE__ */ new Map();
_resolvedGrammars = /* @__PURE__ */ new Map();
_langMap = /* @__PURE__ */ new Map();
_langGraph = /* @__PURE__ */ new Map();
_textmateThemeCache = /* @__PURE__ */ new WeakMap();
_loadedThemesCache = null;
_loadedLanguagesCache = null;
getTheme(theme) {
if (typeof theme === "string")
return this._resolvedThemes.get(theme);
else
return this.loadTheme(theme);
}
loadTheme(theme) {
const _theme = normalizeTheme(theme);
if (_theme.name) {
this._resolvedThemes.set(_theme.name, _theme);
this._loadedThemesCache = null;
}
return _theme;
}
getLoadedThemes() {
if (!this._loadedThemesCache)
this._loadedThemesCache = [...this._resolvedThemes.keys()];
return this._loadedThemesCache;
}
// Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`
// is expensive. Themes can switch often especially for dual-theme support.
//
// The parent class also accepts `colorMap` as the second parameter, but since we don't use that,
// we omit here so it's easier to cache the themes.
setTheme(theme) {
let textmateTheme = this._textmateThemeCache.get(theme);
if (!textmateTheme) {
textmateTheme = Theme.createFromRawTheme(theme);
this._textmateThemeCache.set(theme, textmateTheme);
}
this._syncRegistry.setTheme(textmateTheme);
}
getGrammar(name) {
if (this._alias[name]) {
const resolved = /* @__PURE__ */ new Set([name]);
while (this._alias[name]) {
name = this._alias[name];
if (resolved.has(name))
throw new ShikiError(`Circular alias \`${Array.from(resolved).join(" -> ")} -> ${name}\``);
resolved.add(name);
}
}
return this._resolvedGrammars.get(name);
}
loadLanguage(lang) {
if (this.getGrammar(lang.name))
return;
const embeddedLazilyBy = new Set(
[...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))
);
this._resolver.addLanguage(lang);
const grammarConfig = {
balancedBracketSelectors: lang.balancedBracketSelectors || ["*"],
unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []
};
this._syncRegistry._rawGrammars.set(lang.scopeName, lang);
const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);
g.name = lang.name;
this._resolvedGrammars.set(lang.name, g);
if (lang.aliases) {
lang.aliases.forEach((alias) => {
this._alias[alias] = lang.name;
});
}
this._loadedLanguagesCache = null;
if (embeddedLazilyBy.size) {
for (const e of embeddedLazilyBy) {
this._resolvedGrammars.delete(e.name);
this._loadedLanguagesCache = null;
this._syncRegistry?._injectionGrammars?.delete(e.scopeName);
this._syncRegistry?._grammars?.delete(e.scopeName);
this.loadLanguage(this._langMap.get(e.name));
}
}
}
dispose() {
super.dispose();
this._resolvedThemes.clear();
this._resolvedGrammars.clear();
this._langMap.clear();
this._langGraph.clear();
this._loadedThemesCache = null;
}
loadLanguages(langs) {
for (const lang of langs)
this.resolveEmbeddedLanguages(lang);
const langsGraphArray = Array.from(this._langGraph.entries());
const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);
if (missingLangs.length) {
const dependents = langsGraphArray.filter(([_, lang]) => lang && lang.embeddedLangs?.some((l) => missingLangs.map(([name]) => name).includes(l))).filter((lang) => !missingLangs.includes(lang));
throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\`${name}\``).join(", ")}, required by ${dependents.map(([name]) => `\`${name}\``).join(", ")}`);
}
for (const [_, lang] of langsGraphArray)
this._resolver.addLanguage(lang);
for (const [_, lang] of langsGraphArray)
this.loadLanguage(lang);
}
getLoadedLanguages() {
if (!this._loadedLanguagesCache) {
this._loadedLanguagesCache = [
.../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])
];
}
return this._loadedLanguagesCache;
}
resolveEmbeddedLanguages(lang) {
this._langMap.set(lang.name, lang);
this._langGraph.set(lang.name, lang);
if (lang.embeddedLangs) {
for (const embeddedLang of lang.embeddedLangs)
this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));
}
}
}
class Resolver {
_langs = /* @__PURE__ */ new Map();
_scopeToLang = /* @__PURE__ */ new Map();
_injections = /* @__PURE__ */ new Map();
_onigLib;
constructor(engine, langs) {
this._onigLib = {
createOnigScanner: (patterns) => engine.createScanner(patterns),
createOnigString: (s) => engine.createString(s)
};
langs.forEach((i) => this.addLanguage(i));
}
get onigLib() {
return this._onigLib;
}
getLangRegistration(langIdOrAlias) {
return this._langs.get(langIdOrAlias);
}
loadGrammar(scopeName) {
return this._scopeToLang.get(scopeName);
}
addLanguage(l) {
this._langs.set(l.name, l);
if (l.aliases) {
l.aliases.forEach((a) => {
this._langs.set(a, l);
});
}
this._scopeToLang.set(l.scopeName, l);
if (l.injectTo) {
l.injectTo.forEach((i) => {
if (!this._injections.get(i))
this._injections.set(i, []);
this._injections.get(i).push(l.scopeName);
});
}
}
getInjections(scopeName) {
const scopeParts = scopeName.split(".");
let injections = [];
for (let i = 1; i <= scopeParts.length; i++) {
const subScopeName = scopeParts.slice(0, i).join(".");
injections = [...injections, ...this._injections.get(subScopeName) || []];
}
return injections;
}
}
let instancesCount = 0;
function createShikiInternalSync(options) {
instancesCount += 1;
if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)
console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \`highlighter.dispose()\` to release unused instances.`);
let isDisposed = false;
if (!options.engine)
throw new ShikiError("`engine` option is required for synchronous mode");
const langs = (options.langs || []).flat(1);
const themes = (options.themes || []).flat(1).map(normalizeTheme);
const resolver = new Resolver(options.engine, langs);
const _registry = new Registry(resolver, themes, langs, options.langAlias);
let _lastTheme;
function getLanguage(name) {
ensureNotDisposed();
const _lang = _registry.getGrammar(typeof name === "string" ? name : name.name);
if (!_lang)
throw new ShikiError(`Language \`${name}\` not found, you may need to load it first`);
return _lang;
}
function getTheme(name) {
if (name === "none")
return { bg: "", fg: "", name: "none", settings: [], type: "dark" };
ensureNotDisposed();
const _theme = _registry.getTheme(name);
if (!_theme)
throw new ShikiError(`Theme \`${name}\` not found, you may need to load it first`);
return _theme;
}
function setTheme(name) {
ensureNotDisposed();
const theme = getTheme(name);
if (_lastTheme !== name) {
_registry.setTheme(theme);
_lastTheme = name;
}
const colorMap = _registry.getColorMap();
return {
theme,
colorMap
};
}
function getLoadedThemes() {
ensureNotDisposed();
return _registry.getLoadedThemes();
}
function getLoadedLanguages() {
ensureNotDisposed();
return _registry.getLoadedLanguages();
}
function loadLanguageSync(...langs2) {
ensureNotDisposed();
_registry.loadLanguages(langs2.flat(1));
}
async function loadLanguage(...langs2) {
return loadLanguageSync(await resolveLangs(langs2));
}
function loadThemeSync(...themes2) {
ensureNotDisposed();
for (const theme of themes2.flat(1)) {
_registry.loadTheme(theme);
}
}
async function loadTheme(...themes2) {
ensureNotDisposed();
return loadThemeSync(await resolveThemes(themes2));
}
function ensureNotDisposed() {
if (isDisposed)
throw new ShikiError("Shiki instance has been disposed");
}
function dispose() {
if (isDisposed)
return;
isDisposed = true;
_registry.dispose();
instancesCount -= 1;
}
return {
setTheme,
getTheme,
getLanguage,
getLoadedThemes,
getLoadedLanguages,
loadLanguage,
loadLanguageSync,
loadTheme,
loadThemeSync,
dispose,
[Symbol.dispose]: dispose
};
}
async function createShikiInternal(options) {
if (!options.engine) {
warnDeprecated("`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.");
}
const [
themes,
langs,
engine
] = await Promise.all([
resolveThemes(options.themes || []),
resolveLangs(options.langs || []),
options.engine
]);
return createShikiInternalSync({
...options,
themes,
langs,
engine
});
}
const bundledLanguagesInfo = [
{
"id": "abap",
"name": "ABAP",
"import": () => import('@shikijs/langs/abap')
},
{
"id": "actionscript-3",
"name": "ActionScript",
"import": () => import('@shikijs/langs/actionscript-3')
},
{
"id": "ada",
"name": "Ada",
"import": () => import('@shikijs/langs/ada')
},
{
"id": "angular-html",
"name": "Angular HTML",
"import": () => import('@shikijs/langs/angular-html')
},
{
"id": "angular-ts",
"name": "Angular TypeScript",
"import": () => import('@shikijs/langs/angular-ts')
},
{
"id": "apache",
"name": "Apache Conf",
"import": () => import('@shikijs/langs/apache')
},
{
"id": "apex",
"name": "Apex",
"import": () => import('@shikijs/langs/apex')
},
{
"id": "apl",
"name": "APL",
"import": () => import('@shikijs/langs/apl')
},
{
"id": "applescript",
"name": "AppleScript",
"import": () => import('@shikijs/langs/applescript')
},
{
"id": "ara",
"name": "Ara",
"import": () => import('@shikijs/langs/ara')
},
{
"id": "asciidoc",
"name": "AsciiDoc",
"aliases": [
"adoc"
],
"import": () => import('@shikijs/langs/asciidoc')
},
{
"id": "asm",
"name": "Assembly",
"import": () => import('@shikijs/langs/asm')
},
{
"id": "astro",
"name": "Astro",
"import": () => import('@shikijs/langs/astro')
},
{
"id": "awk",
"name": "AWK",
"import": () => import('@shikijs/langs/awk')
},
{
"id": "ballerina",
"name": "Ballerina",
"import": () => import('@shikijs/langs/ballerina')
},
{
"id": "bat",
"name": "Batch File",
"aliases": [
"batch"
],
"import": () => import('@shikijs/langs/bat')
},
{
"id": "beancount",
"name": "Beancount",
"import": () => import('@shikijs/langs/beancount')
},
{
"id": "berry",
"name": "Berry",
"aliases": [
"be"
],
"import": () => import('@shikijs/langs/berry')
},
{
"id": "bibtex",
"name": "BibTeX",
"import": () => import('@shikijs/langs/bibtex')
},
{
"id": "bicep",
"name": "Bicep",
"import": () => import('@shikijs/langs/bicep')
},
{
"id": "blade",
"name": "Blade",
"import": () => import('@shikijs/langs/blade')
},
{
"id": "bsl",
"name": "1C (Enterprise)",
"aliases": [
"1c"
],
"import": () => import('@shikijs/langs/bsl')
},
{
"id": "c",
"name": "C",
"import": () => import('@shikijs/langs/c')
},
{
"id": "cadence",
"name": "Cadence",
"aliases": [
"cdc"
],
"import": () => import('@shikijs/langs/cadence')
},
{
"id": "cairo",
"name": "Cairo",
"import": () => import('@shikijs/langs/cairo')
},
{
"id": "clarity",
"name": "Clarity",
"import": () => import('@shikijs/langs/clarity')
},
{
"id": "clojure",
"name": "Clojure",
"aliases": [
"clj"
],
"import": () => import('@shikijs/langs/clojure')
},
{
"id": "cmake",
"name": "CMake",
"import": () => import('@shikijs/langs/cmake')
},
{
"id": "cobol",
"name": "COBOL",
"import": () => import('@shikijs/langs/cobol')
},
{
"id": "codeowners",
"name": "CODEOWNERS",
"import": () => import('@shikijs/langs/codeowners')
},
{
"id": "codeql",
"name": "CodeQL",
"aliases": [
"ql"
],
"import": () => import('@shikijs/langs/codeql')
},
{
"id": "coffee",
"name": "CoffeeScript",
"aliases": [
"coffeescript"
],
"import": () => import('@shikijs/langs/coffee')
},
{
"id": "common-lisp",
"name": "Common Lisp",
"aliases": [
"lisp"
],
"import": () => import('@shikijs/langs/common-lisp')
},
{
"id": "coq",
"name": "Coq",
"import": () => import('@shikijs/langs/coq')
},
{
"id": "cpp",
"name": "C++",
"aliases": [
"c++"
],
"import": () => import('@shikijs/langs/cpp')
},
{
"id": "crystal",
"name": "Crystal",
"import": () => import('@shikijs/langs/crystal')
},
{
"id": "csharp",
"name": "C#",
"aliases": [
"c#",
"cs"
],
"import": () => import('@shikijs/langs/csharp')
},
{
"id": "css",
"name": "CSS",
"import": () => import('@shikijs/langs/css')
},
{
"id": "csv",
"name": "CSV",
"import": () => import('@shikijs/langs/csv')
},
{
"id": "cue",
"name": "CUE",
"import": () => import('@shikijs/langs/cue')
},
{
"id": "cypher",
"name": "Cypher",
"aliases": [
"cql"
],
"import": () => import('@shikijs/langs/cypher')
},
{
"id": "d",
"name": "D",
"import": () => import('@shikijs/langs/d')
},
{
"id": "dart",
"name": "Dart",
"import": () => import('@shikijs/langs/dart')
},
{
"id": "dax",
"name": "DAX",
"import": () => import('@shikijs/langs/dax')
},
{
"id": "desktop",
"name": "Desktop",
"import": () => import('@shikijs/langs/desktop')
},
{
"id": "diff",
"name": "Diff",
"import": () => import('@shikijs/langs/diff')
},
{
"id": "docker",
"name": "Dockerfile",
"aliases": [
"dockerfile"
],
"import": () => import('@shikijs/langs/docker')
},
{
"id": "dotenv",
"name": "dotEnv",
"import": () => import('@shikijs/langs/dotenv')
},
{
"id": "dream-maker",
"name": "Dream Maker",
"import": () => import('@shikijs/langs/dream-maker')
},
{
"id": "edge",
"name": "Edge",
"import": () => import('@shikijs/langs/edge')
},
{
"id": "elixir",
"name": "Elixir",
"import": () => import('@shikijs/langs/elixir')
},
{
"id": "elm",
"name": "Elm",
"import": () => import('@shikijs/langs/elm')
},
{
"id": "emacs-lisp",
"name": "Emacs Lisp",
"aliases": [
"elisp"
],
"import": () => import('@shikijs/langs/emacs-lisp')
},
{
"id": "erb",
"name": "ERB",
"import": () => import('@shikijs/langs/erb')
},
{
"id": "erlang",
"name": "Erlang",
"aliases": [
"erl"
],
"import": () => import('@shikijs/langs/erlang')
},
{
"id": "fennel",
"name": "Fennel",
"import": () => import('@shikijs/langs/fennel')
},
{
"id": "fish",
"name": "Fish",
"import": () => import('@shikijs/langs/fish')
},
{
"id": "fluent",
"name": "Fluent",
"aliases": [
"ftl"
],
"import": () => import('@shikijs/langs/fluent')
},
{
"id": "fortran-fixed-form",
"name": "Fortran (Fixed Form)",
"aliases": [
"f",
"for",
"f77"
],
"import": () => import('@shikijs/langs/fortran-fixed-form')
},
{
"id": "fortran-free-form",
"name": "Fortran (Free Form)",
"aliases": [
"f90",
"f95",
"f03",
"f08",
"f18"
],
"import": () => import('@shikijs/langs/fortran-free-form')
},
{
"id": "fsharp",
"name": "F#",
"aliases": [
"f#",
"fs"
],
"import": () => import('@shikijs/langs/fsharp')
},
{
"id": "gdresource",
"name": "GDResource",
"import": () => import('@shikijs/langs/gdresource')
},
{
"id": "gdscript",
"name": "GDScript",
"import": () => import('@shikijs/langs/gdscript')
},
{
"id": "gdshader",
"name": "GDShader",
"import": () => import('@shikijs/langs/gdshader')
},
{
"id": "genie",
"name": "Genie",
"import": () => import('@shikijs/langs/genie')
},
{
"id": "gherkin",
"name": "Gherkin",
"import": () => import('@shikijs/langs/gherkin')
},
{
"id": "git-commit",
"name": "Git Commit Message",
"import": () => import('@shikijs/langs/git-commit')
},
{
"id": "git-rebase",
"name": "Git Rebase Message",
"import": () => import('@shikijs/langs/git-rebase')
},
{
"id": "gleam",
"name": "Gleam",
"import": () => import('@shikijs/langs/gleam')
},
{
"id": "glimmer-js",
"name": "Glimmer JS",
"aliases": [
"gjs"
],
"import": () => import('@shikijs/langs/glimmer-js')
},
{
"id": "glimmer-ts",
"name": "Glimmer TS",
"aliases": [
"gts"
],
"import": () => import('@shikijs/langs/glimmer-ts')
},
{
"id": "glsl",
"name": "GLSL",
"import": () => import('@shikijs/langs/glsl')
},
{
"id": "gnuplot",
"name": "Gnuplot",
"import": () => import('@shikijs/langs/gnuplot')
},
{
"id": "go",
"name": "Go",
"import": () => import('@shikijs/langs/go')
},
{
"id": "graphql",
"name": "GraphQL",
"aliases": [
"gql"
],
"import": () => import('@shikijs/langs/graphql')
},
{
"id": "groovy",
"name": "Groovy",
"import": () => import('@shikijs/langs/groovy')
},
{
"id": "hack",
"name": "Hack",
"import": () => import('@shikijs/langs/hack')
},
{
"id": "haml",
"name": "Ruby Haml",
"import": () => import('@shikijs/langs/haml')
},
{
"id": "handlebars",
"name": "Handlebars",
"aliases": [
"hbs"
],
"import": () => import('@shikijs/langs/handlebars')
},
{
"id": "haskell",
"name": "Haskell",
"aliases": [
"hs"
],
"import": () => import('@shikijs/langs/haskell')
},
{
"id": "haxe",
"name": "Haxe",
"import": () => import('@shikijs/langs/haxe')
},
{
"id": "hcl",
"name": "HashiCorp HCL",
"import": () => import('@shikijs/langs/hcl')
},
{
"id": "hjson",
"name": "Hjson",
"import": () => import('@shikijs/langs/hjson')
},
{
"id": "hlsl",
"name": "HLSL",
"import": () => import('@shikijs/langs/hlsl')
},
{
"id": "html",
"name": "HTML",
"import": () => import('@shikijs/langs/html')
},
{
"id": "html-derivative",
"name": "HTML (Derivative)",
"import": () => import('@shikijs/langs/html-derivative')
},
{
"id": "http",
"name": "HTTP",
"import": () => import('@shikijs/langs/http')
},
{
"id": "hxml",
"name": "HXML",
"import": () => import('@shikijs/langs/hxml')
},
{
"id": "hy",
"name": "Hy",
"import": () => import('@shikijs/langs/hy')
},
{
"id": "imba",
"name": "Imba",
"import": () => import('@shikijs/langs/imba')
},
{
"id": "ini",
"name": "INI",
"aliases": [
"properties"
],
"import": () => import('@shikijs/langs/ini')
},
{
"id": "java",
"name": "Java",
"import": () => import('@shikijs/langs/java')
},
{
"id": "javascript",
"name": "JavaScript",
"aliases": [
"js"
],
"import": () => import('@shikijs/langs/javascript')
},
{
"id": "jinja",
"name": "Jinja",
"import": () => import('@shikijs/langs/jinja')
},
{
"id": "jison",
"name": "Jison",
"import": () => import('@shikijs/langs/jison')
},
{
"id": "json",
"name": "JSON",
"import": () => import('@shikijs/langs/json')
},
{
"id": "json5",
"name": "JSON5",
"import": () => import('@shikijs/langs/json5')
},
{
"id": "jsonc",
"name": "JSON with Comments",
"import": () => import('@shikijs/langs/jsonc')
},
{
"id": "jsonl",
"name": "JSON Lines",
"import": () => import('@shikijs/langs/jsonl')
},
{
"id": "jsonnet",
"name": "Jsonnet",
"import": () => import('@shikijs/langs/jsonnet')
},
{
"id": "jssm",
"name": "JSSM",
"aliases": [
"fsl"
],
"import": () => import('@shikijs/langs/jssm')
},
{
"id": "jsx",
"name": "JSX",
"import": () => import('@shikijs/langs/jsx')
},
{
"id": "julia",
"name": "Julia",
"aliases": [
"jl"
],
"import": () => import('@shikijs/langs/julia')
},
{
"id": "kotlin",
"name": "Kotlin",
"aliases": [
"kt",
"kts"
],
"import": () => import('@shikijs/langs/kotlin')
},
{
"id": "kusto",
"name": "Kusto",
"aliases": [
"kql"
],
"import": () => import('@shikijs/langs/kusto')
},
{
"id": "latex",
"name": "LaTeX",
"import": () => import('@shikijs/langs/latex')
},
{
"id": "lean",
"name": "Lean 4",
"aliases": [
"lean4"
],
"import": () => import('@shikijs/langs/lean')
},
{
"id": "less",
"name": "Less",
"import": () => import('@shikijs/langs/less')
},
{
"id": "liquid",
"name": "Liquid",
"import": () => import('@shikijs/langs/liquid')
},
{
"id": "llvm",
"name": "LLVM IR",
"import": () => import('@shikijs/langs/llvm')
},
{
"id": "log",
"name": "Log file",
"import": () => import('@shikijs/langs/log')
},
{
"id": "logo",
"name": "Logo",
"import": () => import('@shikijs/langs/logo')
},
{
"id": "lua",
"name": "Lua",
"import": () => import('@shikijs/langs/lua')
},
{
"id": "luau",
"name": "Luau",
"import": () => import('@shikijs/langs/luau')
},
{
"id": "make",
"name": "Makefile",
"aliases": [
"makefile"
],
"import": () => import('@shikijs/langs/make')
},
{
"id": "markdown",
"name": "Markdown",
"aliases": [
"md"
],
"import": () => import('@shikijs/langs/markdown')
},
{
"id": "marko",
"name": "Marko",
"import": () => import('@shikijs/langs/marko')
},
{
"id": "matlab",
"name": "MATLAB",
"import": () => import('@shikijs/langs/matlab')
},
{
"id": "mdc",
"name": "MDC",
"import": () => import('@shikijs/langs/mdc')
},
{
"id": "mdx",
"name": "MDX",
"import": () => import('@shikijs/langs/mdx')
},
{
"id": "mermaid",
"name": "Mermaid",
"aliases": [
"mmd"
],
"import": () => import('@shikijs/langs/mermaid')
},
{
"id": "mipsasm",
"name": "MIPS Assembly",
"aliases": [
"mips"
],
"import": () => import('@shikijs/langs/mipsasm')
},
{
"id": "mojo",
"name": "Mojo",
"import": () => import('@shikijs/langs/mojo')
},
{
"id": "move",
"name": "Move",
"import": () => import('@shikijs/langs/move')
},
{
"id": "narrat",
"name": "Narrat Language",
"aliases": [
"nar"
],
"import": () => import('@shikijs/langs/narrat')
},
{
"id": "nextflow",
"name": "Nextflow",
"aliases": [
"nf"
],
"import": () => import('@shikijs/langs/nextflow')
},
{
"id": "nginx",
"name": "Nginx",
"import": () => import('@shikijs/langs/nginx')
},
{
"id": "nim",
"name": "Nim",
"import": () => import('@shikijs/langs/nim')
},
{
"id": "nix",
"name": "Nix",
"import": () => import('@shikijs/langs/nix')
},
{
"id": "nushell",
"name": "nushell",
"aliases": [
"nu"
],
"import": () => import('@shikijs/langs/nushell')
},
{
"id": "objective-c",
"name": "Objective-C",
"aliases": [
"objc"
],
"import": () => import('@shikijs/langs/objective-c')
},
{
"id": "objective-cpp",
"name": "Objective-C++",
"import": () => import('@shikijs/langs/objective-cpp')
},
{
"id": "ocaml",
"name": "OCaml",
"import": () => import('@shikijs/langs/ocaml')
},
{
"id": "pascal",
"name": "Pascal",
"import": () => import('@shikijs/langs/pascal')
},
{
"id": "perl",
"name": "Perl",
"import": () => import('@shikijs/langs/perl')
},
{
"id": "php",
"name": "PHP",
"import": () => import('@shikijs/langs/php')
},
{
"id": "plsql",
"name": "PL/SQL",
"import": () => import('@shikijs/langs/plsql')
},
{
"id": "po",
"name": "Gettext PO",
"aliases": [
"pot",
"potx"
],
"import": () => import('@shikijs/langs/po')
},
{
"id": "polar",
"name": "Polar",
"import": () => import('@shikijs/langs/polar')
},
{
"id": "postcss",
"name": "PostCSS",
"import": () => import('@shikijs/langs/postcss')
},
{
"id": "powerquery",
"name": "PowerQuery",
"import": () => import('@shikijs/langs/powerquery')
},
{
"id": "powershell",
"name": "PowerShell",
"aliases": [
"ps",
"ps1"
],
"import": () => import('@shikijs/langs/powershell')
},
{
"id": "prisma",
"name": "Prisma",
"import": () => import('@shikijs/langs/prisma')
},
{
"id": "prolog",
"name": "Prolog",
"import": () => import('@shikijs/langs/prolog')
},
{
"id": "proto",
"name": "Protocol Buffer 3",
"aliases": [
"protobuf"
],
"import": () => import('@shikijs/langs/proto')
},
{
"id": "pug",
"name": "Pug",
"aliases": [
"jade"
],
"import": () => import('@shikijs/langs/pug')
},
{
"id": "puppet",
"name": "Puppet",
"import": () => import('@shikijs/langs/puppet')
},
{
"id": "purescript",
"name": "PureScript",
"import": () => import('@shikijs/langs/purescript')
},
{
"id": "python",
"name": "Python",
"aliases": [
"py"
],
"import": () => import('@shikijs/langs/python')
},
{
"id": "qml",
"name": "QML",
"import": () => import('@shikijs/langs/qml')
},
{
"id": "qmldir",
"name": "QML Directory",
"import": () => import('@shikijs/langs/qmldir')
},
{
"id": "qss",
"name": "Qt Style Sheets",
"import": () => import('@shikijs/langs/qss')
},
{
"id": "r",
"name": "R",
"import": () => import('@shikijs/langs/r')
},
{
"id": "racket",
"name": "Racket",
"import": () => import('@shikijs/langs/racket')
},
{
"id": "raku",
"name": "Raku",
"aliases": [
"perl6"
],
"import": () => import('@shikijs/langs/raku')
},
{
"id": "razor",
"name": "ASP.NET Razor",
"import": () => import('@shikijs/langs/razor')
},
{
"id": "reg",
"name": "Windows Registry Script",
"import": () => import('@shikijs/langs/reg')
},
{
"id": "regexp",
"name": "RegExp",
"aliases": [
"regex"
],
"import": () => import('@shikijs/langs/regexp')
},
{
"id": "rel",
"name": "Rel",
"import": () => import('@shikijs/langs/rel')
},
{
"id": "riscv",
"name": "RISC-V",
"import": () => import('@shikijs/langs/riscv')
},
{
"id": "rst",
"name": "reStructuredText",
"import": () => import('@shikijs/langs/rst')
},
{
"id": "ruby",
"name": "Ruby",
"aliases": [
"rb"
],
"import": () => import('@shikijs/langs/ruby')
},
{
"id": "rust",
"name": "Rust",
"aliases": [
"rs"
],
"import": () => import('@shikijs/langs/rust')
},
{
"id": "sas",
"name": "SAS",
"import": () => import('@shikijs/langs/sas')
},
{
"id": "sass",
"name": "Sass",
"import": () => import('@shikijs/langs/sass')
},
{
"id": "scala",
"name": "Scala",
"import": () => import('@shikijs/langs/scala')
},
{
"id": "scheme",
"name": "Scheme",
"import": () => import('@shikijs/langs/scheme')
},
{
"id": "scss",
"name": "SCSS",
"import": () => import('@shikijs/langs/scss')
},
{
"id": "sdbl",
"name": "1C (Query)",
"aliases": [
"1c-query"
],
"import": () => import('@shikijs/langs/sdbl')
},
{
"id": "shaderlab",
"name": "ShaderLab",
"aliases": [
"shader"
],
"import": () => import('@shikijs/langs/shaderlab')
},
{
"id": "shellscript",
"name": "Shell",
"aliases": [
"bash",
"sh",
"shell",
"zsh"
],
"import": () => import('@shikijs/langs/shellscript')
},
{
"id": "shellsession",
"name": "Shell Session",
"aliases": [
"console"
],
"import": () => import('@shikijs/langs/shellsession')
},
{
"id": "smalltalk",
"name": "Smalltalk",
"import": () => import('@shikijs/langs/smalltalk')
},
{
"id": "solidity",
"name": "Solidity",
"import": () => import('@shikijs/langs/solidity')
},
{
"id": "soy",
"name": "Closure Templates",
"aliases": [
"closure-templates"
],
"import": () => import('@shikijs/langs/soy')
},
{
"id": "sparql",
"name": "SPARQL",
"import": () => import('@shikijs/langs/sparql')
},
{
"id": "splunk",
"name": "Splunk Query Language",
"aliases": [
"spl"
],
"import": () => import('@shikijs/langs/splunk')
},
{
"id": "sql",
"name": "SQL",
"import": () => import('@shikijs/langs/sql')
},
{
"id": "ssh-config",
"name": "SSH Config",
"import": () => import('@shikijs/langs/ssh-config')
},
{
"id": "stata",
"name": "Stata",
"import": () => import('@shikijs/langs/stata')
},
{
"id": "stylus",
"name": "Stylus",
"aliases": [
"styl"
],
"import": () => import('@shikijs/langs/stylus')
},
{
"id": "svelte",
"name": "Svelte",
"import": () => import('@shikijs/langs/svelte')
},
{
"id": "swift",
"name": "Swift",
"import": () => import('@shikijs/langs/swift')
},
{
"id": "system-verilog",
"name": "SystemVerilog",
"import": () => import('@shikijs/langs/system-verilog')
},
{
"id": "systemd",
"name": "Systemd Units",
"import": () => import('@shikijs/langs/systemd')
},
{
"id": "talonscript",
"name": "TalonScript",
"aliases": [
"talon"
],
"import": () => import('@shikijs/langs/talonscript')
},
{
"id": "tasl",
"name": "Tasl",
"import": () => import('@shikijs/langs/tasl')
},
{
"id": "tcl",
"name": "Tcl",
"import": () => import('@shikijs/langs/tcl')
},
{
"id": "templ",
"name": "Templ",
"import": () => import('@shikijs/langs/templ')
},
{
"id": "terraform",
"name": "Terraform",
"aliases": [
"tf",
"tfvars"
],
"import": () => import('@shikijs/langs/terraform')
},
{
"id": "tex",
"name": "TeX",
"import": () => import('@shikijs/langs/tex')
},
{
"id": "toml",
"name": "TOML",
"import": () => import('@shikijs/langs/toml')
},
{
"id": "ts-tags",
"name": "TypeScript with Tags",
"aliases": [
"lit"
],
"import": () => import('@shikijs/langs/ts-tags')
},
{
"id": "tsv",
"name": "TSV",
"import": () => import('@shikijs/langs/tsv')
},
{
"id": "tsx",
"name": "TSX",
"import": () => import('@shikijs/langs/tsx')
},
{
"id": "turtle",
"name": "Turtle",
"import": () => import('@shikijs/langs/turtle')
},
{
"id": "twig",
"name": "Twig",
"import": () => import('@shikijs/langs/twig')
},
{
"id": "typescript",
"name": "TypeScript",
"aliases": [
"ts"
],
"import": () => import('@shikijs/langs/typescript')
},
{
"id": "typespec",
"name": "TypeSpec",
"aliases": [
"tsp"
],
"import": () => import('@shikijs/langs/typespec')
},
{
"id": "typst",
"name": "Typst",
"aliases": [
"typ"
],
"import": () => import('@shikijs/langs/typst')
},
{
"id": "v",
"name": "V",
"import": () => import('@shikijs/langs/v')
},
{
"id": "vala",
"name": "Vala",
"import": () => import('@shikijs/langs/vala')
},
{
"id": "vb",
"name": "Visual Basic",
"aliases": [
"cmd"
],
"import": () => import('@shikijs/langs/vb')
},
{
"id": "verilog",
"name": "Verilog",
"import": () => import('@shikijs/langs/verilog')
},
{
"id": "vhdl",
"name": "VHDL",
"import": () => import('@shikijs/langs/vhdl')
},
{
"id": "viml",
"name": "Vim Script",
"aliases": [
"vim",
"vimscript"
],
"import": () => import('@shikijs/langs/viml')
},
{
"id": "vue",
"name": "Vue",
"import": () => import('@shikijs/langs/vue')
},
{
"id": "vue-html",
"name": "Vue HTML",
"import": () => import('@shikijs/langs/vue-html')
},
{
"id": "vyper",
"name": "Vyper",
"aliases": [
"vy"
],
"import": () => import('@shikijs/langs/vyper')
},
{
"id": "wasm",
"name": "WebAssembly",
"import": () => import('@shikijs/langs/wasm')
},
{
"id": "wenyan",
"name": "Wenyan",
"aliases": [
"\u6587\u8A00"
],
"import": () => import('@shikijs/langs/wenyan')
},
{
"id": "wgsl",
"name": "WGSL",
"import": () => import('@shikijs/langs/wgsl')
},
{
"id": "wikitext",
"name": "Wikitext",
"aliases": [
"mediawiki",
"wiki"
],
"import": () => import('@shikijs/langs/wikitext')
},
{
"id": "wit",
"name": "WebAssembly Interface Types",
"import": () => import('@shikijs/langs/wit')
},
{
"id": "wolfram",
"name": "Wolfram",
"aliases": [
"wl"
],
"import": () => import('@shikijs/langs/wolfram')
},
{
"id": "xml",
"name": "XML",
"import": () => import('@shikijs/langs/xml')
},
{
"id": "xsl",
"name": "XSL",
"import": () => import('@shikijs/langs/xsl')
},
{
"id": "yaml",
"name": "YAML",
"aliases": [
"yml"
],
"import": () => import('@shikijs/langs/yaml')
},
{
"id": "zenscript",
"name": "ZenScript",
"import": () => import('@shikijs/langs/zenscript')
},
{
"id": "zig",
"name": "Zig",
"import": () => import('@shikijs/langs/zig')
}
];
const bundledLanguagesBase = Object.fromEntries(bundledLanguagesInfo.map((i) => [i.id, i.import]));
const bundledLanguagesAlias = Object.fromEntries(bundledLanguagesInfo.flatMap((i) => i.aliases?.map((a) => [a, i.import]) || []));
const bundledLanguages = {
...bundledLanguagesBase,
...bundledLanguagesAlias
};
const bundledThemesInfo = [
{
"id": "andromeeda",
"displayName": "Andromeeda",
"type": "dark",
"import": () => import('@shikijs/themes/andromeeda')
},
{
"id": "aurora-x",
"displayName": "Aurora X",
"type": "dark",
"import": () => import('@shikijs/themes/aurora-x')
},
{
"id": "ayu-dark",
"displayName": "Ayu Dark",
"type": "dark",
"import": () => import('@shikijs/themes/ayu-dark')
},
{
"id": "catppuccin-frappe",
"displayName": "Catppuccin Frapp\xE9",
"type": "dark",
"import": () => import('@shikijs/themes/catppuccin-frappe')
},
{
"id": "catppuccin-latte",
"displayName": "Catppuccin Latte",
"type": "light",
"import": () => import('@shikijs/themes/catppuccin-latte')
},
{
"id": "catppuccin-macchiato",
"displayName": "Catppuccin Macchiato",
"type": "dark",
"import": () => import('@shikijs/themes/catppuccin-macchiato')
},
{
"id": "catppuccin-mocha",
"displayName": "Catppuccin Mocha",
"type": "dark",
"import": () => import('@shikijs/themes/catppuccin-mocha')
},
{
"id": "dark-plus",
"displayName": "Dark Plus",
"type": "dark",
"import": () => import('@shikijs/themes/dark-plus')
},
{
"id": "dracula",
"displayName": "Dracula Theme",
"type": "dark",
"import": () => import('@shikijs/themes/dracula')
},
{
"id": "dracula-soft",
"displayName": "Dracula Theme Soft",
"type": "dark",
"import": () => import('@shikijs/themes/dracula-soft')
},
{
"id": "everforest-dark",
"displayName": "Everforest Dark",
"type": "dark",
"import": () => import('@shikijs/themes/everforest-dark')
},
{
"id": "everforest-light",
"displayName": "Everforest Light",
"type": "light",
"import": () => import('@shikijs/themes/everforest-light')
},
{
"id": "github-dark",
"displayName": "GitHub Dark",
"type": "dark",
"import": () => import('@shikijs/themes/github-dark')
},
{
"id": "github-dark-default",
"displayName": "GitHub Dark Default",
"type": "dark",
"import": () => import('@shikijs/themes/github-dark-default')
},
{
"id": "github-dark-dimmed",
"displayName": "GitHub Dark Dimmed",
"type": "dark",
"import": () => import('@shikijs/themes/github-dark-dimmed')
},
{
"id": "github-dark-high-contrast",
"displayName": "GitHub Dark High Contrast",
"type": "dark",
"import": () => import('@shikijs/themes/github-dark-high-contrast')
},
{
"id": "github-light",
"displayName": "GitHub Light",
"type": "light",
"import": () => import('@shikijs/themes/github-light')
},
{
"id": "github-light-default",
"displayName": "GitHub Light Default",
"type": "light",
"import": () => import('@shikijs/themes/github-light-default')
},
{
"id": "github-light-high-contrast",
"displayName": "GitHub Light High Contrast",
"type": "light",
"import": () => import('@shikijs/themes/github-light-high-contrast')
},
{
"id": "gruvbox-dark-hard",
"displayName": "Gruvbox Dark Hard",
"type": "dark",
"import": () => import('@shikijs/themes/gruvbox-dark-hard')
},
{
"id": "gruvbox-dark-medium",
"displayName": "Gruvbox Dark Medium",
"type": "dark",
"import": () => import('@shikijs/themes/gruvbox-dark-medium')
},
{
"id": "gruvbox-dark-soft",
"displayName": "Gruvbox Dark Soft",
"type": "dark",
"import": () => import('@shikijs/themes/gruvbox-dark-soft')
},
{
"id": "gruvbox-light-hard",
"displayName": "Gruvbox Light Hard",
"type": "light",
"import": () => import('@shikijs/themes/gruvbox-light-hard')
},
{
"id": "gruvbox-light-medium",
"displayName": "Gruvbox Light Medium",
"type": "light",
"import": () => import('@shikijs/themes/gruvbox-light-medium')
},
{
"id": "gruvbox-light-soft",
"displayName": "Gruvbox Light Soft",
"type": "light",
"import": () => import('@shikijs/themes/gruvbox-light-soft')
},
{
"id": "houston",
"displayName": "Houston",
"type": "dark",
"import": () => import('@shikijs/themes/houston')
},
{
"id": "kanagawa-dragon",
"displayName": "Kanagawa Dragon",
"type": "dark",
"import": () => import('@shikijs/themes/kanagawa-dragon')
},
{
"id": "kanagawa-lotus",
"displayName": "Kanagawa Lotus",
"type": "light",
"import": () => import('@shikijs/themes/kanagawa-lotus')
},
{
"id": "kanagawa-wave",
"displayName": "Kanagawa Wave",
"type": "dark",
"import": () => import('@shikijs/themes/kanagawa-wave')
},
{
"id": "laserwave",
"displayName": "LaserWave",
"type": "dark",
"import": () => import('@shikijs/themes/laserwave')
},
{
"id": "light-plus",
"displayName": "Light Plus",
"type": "light",
"import": () => import('@shikijs/themes/light-plus')
},
{
"id": "material-theme",
"displayName": "Material Theme",
"type": "dark",
"import": () => import('@shikijs/themes/material-theme')
},
{
"id": "material-theme-darker",
"displayName": "Material Theme Darker",
"type": "dark",
"import": () => import('@shikijs/themes/material-theme-darker')
},
{
"id": "material-theme-lighter",
"displayName": "Material Theme Lighter",
"type": "light",
"import": () => import('@shikijs/themes/material-theme-lighter')
},
{
"id": "material-theme-ocean",
"displayName": "Material Theme Ocean",
"type": "dark",
"import": () => import('@shikijs/themes/material-theme-ocean')
},
{
"id": "material-theme-palenight",
"displayName": "Material Theme Palenight",
"type": "dark",
"import": () => import('@shikijs/themes/material-theme-palenight')
},
{
"id": "min-dark",
"displayName": "Min Dark",
"type": "dark",
"import": () => import('@shikijs/themes/min-dark')
},
{
"id": "min-light",
"displayName": "Min Light",
"type": "light",
"import": () => import('@shikijs/themes/min-light')
},
{
"id": "monokai",
"displayName": "Monokai",
"type": "dark",
"import": () => import('@shikijs/themes/monokai')
},
{
"id": "night-owl",
"displayName": "Night Owl",
"type": "dark",
"import": () => import('@shikijs/themes/night-owl')
},
{
"id": "nord",
"displayName": "Nord",
"type": "dark",
"import": () => import('@shikijs/themes/nord')
},
{
"id": "one-dark-pro",
"displayName": "One Dark Pro",
"type": "dark",
"import": () => import('@shikijs/themes/one-dark-pro')
},
{
"id": "one-light",
"displayName": "One Light",
"type": "light",
"import": () => import('@shikijs/themes/one-light')
},
{
"id": "plastic",
"displayName": "Plastic",
"type": "dark",
"import": () => import('@shikijs/themes/plastic')
},
{
"id": "poimandres",
"displayName": "Poimandres",
"type": "dark",
"import": () => import('@shikijs/themes/poimandres')
},
{
"id": "red",
"displayName": "Red",
"type": "dark",
"import": () => import('@shikijs/themes/red')
},
{
"id": "rose-pine",
"displayName": "Ros\xE9 Pine",
"type": "dark",
"import": () => import('@shikijs/themes/rose-pine')
},
{
"id": "rose-pine-dawn",
"displayName": "Ros\xE9 Pine Dawn",
"type": "light",
"import": () => import('@shikijs/themes/rose-pine-dawn')
},
{
"id": "rose-pine-moon",
"displayName": "Ros\xE9 Pine Moon",
"type": "dark",
"import": () => import('@shikijs/themes/rose-pine-moon')
},
{
"id": "slack-dark",
"displayName": "Slack Dark",
"type": "dark",
"import": () => import('@shikijs/themes/slack-dark')
},
{
"id": "slack-ochin",
"displayName": "Slack Ochin",
"type": "light",
"import": () => import('@shikijs/themes/slack-ochin')
},
{
"id": "snazzy-light",
"displayName": "Snazzy Light",
"type": "light",
"import": () => import('@shikijs/themes/snazzy-light')
},
{
"id": "solarized-dark",
"displayName": "Solarized Dark",
"type": "dark",
"import": () => import('@shikijs/themes/solarized-dark')
},
{
"id": "solarized-light",
"displayName": "Solarized Light",
"type": "light",
"import": () => import('@shikijs/themes/solarized-light')
},
{
"id": "synthwave-84",
"displayName": "Synthwave '84",
"type": "dark",
"import": () => import('@shikijs/themes/synthwave-84')
},
{
"id": "tokyo-night",
"displayName": "Tokyo Night",
"type": "dark",
"import": () => import('@shikijs/themes/tokyo-night')
},
{
"id": "vesper",
"displayName": "Vesper",
"type": "dark",
"import": () => import('@shikijs/themes/vesper')
},
{
"id": "vitesse-black",
"displayName": "Vitesse Black",
"type": "dark",
"import": () => import('@shikijs/themes/vitesse-black')
},
{
"id": "vitesse-dark",
"displayName": "Vitesse Dark",
"type": "dark",
"import": () => import('@shikijs/themes/vitesse-dark')
},
{
"id": "vitesse-light",
"displayName": "Vitesse Light",
"type": "light",
"import": () => import('@shikijs/themes/vitesse-light')
}
];
const bundledThemes = Object.fromEntries(bundledThemesInfo.map((i) => [i.id, i.import]));
async function loadBuiltinWasm() {
const __dirname = dirname(fileURLToPath(import.meta.url));
await loadWasm(readFile(__dirname + "/onig.wasm"));
}
function loadWasm(options) {
return onig.loadWasm(options);
}
function createOnigurumaEngine(options) {
return onig.createOnigurumaEngine(options);
}
export { bundledLanguages, bundledLanguagesInfo, bundledThemes, bundledThemesInfo, codeToTokensWithThemes, createOnigurumaEngine, createShikiInternal, loadBuiltinWasm, loadWasm };