import {
__commonJS
} from "./chunk-2TUXWMP5.js";
// node_modules/refractor/lang/js-templates.js
var require_js_templates = __commonJS({
"node_modules/refractor/lang/js-templates.js"(exports, module) {
module.exports = jsTemplates;
jsTemplates.displayName = "jsTemplates";
jsTemplates.aliases = [];
function jsTemplates(Prism) {
;
(function(Prism2) {
var templateString = Prism2.languages.javascript["template-string"];
var templateLiteralPattern = templateString.pattern.source;
var interpolationObject = templateString.inside["interpolation"];
var interpolationPunctuationObject = interpolationObject.inside["interpolation-punctuation"];
var interpolationPattern = interpolationObject.pattern.source;
function createTemplate(language, tag) {
if (!Prism2.languages[language]) {
return void 0;
}
return {
pattern: RegExp("((?:" + tag + ")\\s*)" + templateLiteralPattern),
lookbehind: true,
greedy: true,
inside: {
"template-punctuation": {
pattern: /^`|`$/,
alias: "string"
},
"embedded-code": {
pattern: /[\s\S]+/,
alias: language
}
}
};
}
Prism2.languages.javascript["template-string"] = [
// styled-jsx:
// css`a { color: #25F; }`
// styled-components:
// styled.h1`color: red;`
createTemplate(
"css",
/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source
),
// html`
`
// div.innerHTML = ``
createTemplate("html", /\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),
// svg``
createTemplate("svg", /\bsvg/.source),
// md`# h1`, markdown`## h2`
createTemplate("markdown", /\b(?:markdown|md)/.source),
// gql`...`, graphql`...`, graphql.experimental`...`
createTemplate(
"graphql",
/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source
),
// sql`...`
createTemplate("sql", /\bsql/.source),
// vanilla template string
templateString
].filter(Boolean);
function getPlaceholder(counter, language) {
return "___" + language.toUpperCase() + "_" + counter + "___";
}
function tokenizeWithHooks(code, grammar, language) {
var env = {
code,
grammar,
language
};
Prism2.hooks.run("before-tokenize", env);
env.tokens = Prism2.tokenize(env.code, env.grammar);
Prism2.hooks.run("after-tokenize", env);
return env.tokens;
}
function tokenizeInterpolationExpression(expression) {
var tempGrammar = {};
tempGrammar["interpolation-punctuation"] = interpolationPunctuationObject;
var tokens = Prism2.tokenize(expression, tempGrammar);
if (tokens.length === 3) {
var args = [1, 1];
args.push.apply(
args,
tokenizeWithHooks(tokens[1], Prism2.languages.javascript, "javascript")
);
tokens.splice.apply(tokens, args);
}
return new Prism2.Token(
"interpolation",
tokens,
interpolationObject.alias,
expression
);
}
function tokenizeEmbedded(code, grammar, language) {
var _tokens = Prism2.tokenize(code, {
interpolation: {
pattern: RegExp(interpolationPattern),
lookbehind: true
}
});
var placeholderCounter = 0;
var placeholderMap = {};
var embeddedCode = _tokens.map(function(token) {
if (typeof token === "string") {
return token;
} else {
var interpolationExpression = token.content;
var placeholder;
while (code.indexOf(
placeholder = getPlaceholder(placeholderCounter++, language)
) !== -1) {
}
placeholderMap[placeholder] = interpolationExpression;
return placeholder;
}
}).join("");
var embeddedTokens = tokenizeWithHooks(embeddedCode, grammar, language);
var placeholders = Object.keys(placeholderMap);
placeholderCounter = 0;
function walkTokens(tokens) {
for (var i = 0; i < tokens.length; i++) {
if (placeholderCounter >= placeholders.length) {
return;
}
var token = tokens[i];
if (typeof token === "string" || typeof token.content === "string") {
var placeholder = placeholders[placeholderCounter];
var s = typeof token === "string" ? token : (
/** @type {string} */
token.content
);
var index = s.indexOf(placeholder);
if (index !== -1) {
++placeholderCounter;
var before = s.substring(0, index);
var middle = tokenizeInterpolationExpression(
placeholderMap[placeholder]
);
var after = s.substring(index + placeholder.length);
var replacement = [];
if (before) {
replacement.push(before);
}
replacement.push(middle);
if (after) {
var afterTokens = [after];
walkTokens(afterTokens);
replacement.push.apply(replacement, afterTokens);
}
if (typeof token === "string") {
tokens.splice.apply(tokens, [i, 1].concat(replacement));
i += replacement.length - 1;
} else {
token.content = replacement;
}
}
} else {
var content = token.content;
if (Array.isArray(content)) {
walkTokens(content);
} else {
walkTokens([content]);
}
}
}
}
walkTokens(embeddedTokens);
return new Prism2.Token(
language,
embeddedTokens,
"language-" + language,
code
);
}
var supportedLanguages = {
javascript: true,
js: true,
typescript: true,
ts: true,
jsx: true,
tsx: true
};
Prism2.hooks.add("after-tokenize", function(env) {
if (!(env.language in supportedLanguages)) {
return;
}
function findTemplateStrings(tokens) {
for (var i = 0, l = tokens.length; i < l; i++) {
var token = tokens[i];
if (typeof token === "string") {
continue;
}
var content = token.content;
if (!Array.isArray(content)) {
if (typeof content !== "string") {
findTemplateStrings([content]);
}
continue;
}
if (token.type === "template-string") {
var embedded = content[1];
if (content.length === 3 && typeof embedded !== "string" && embedded.type === "embedded-code") {
var code = stringContent(embedded);
var alias = embedded.alias;
var language = Array.isArray(alias) ? alias[0] : alias;
var grammar = Prism2.languages[language];
if (!grammar) {
continue;
}
content[1] = tokenizeEmbedded(code, grammar, language);
}
} else {
findTemplateStrings(content);
}
}
}
findTemplateStrings(env.tokens);
});
function stringContent(value) {
if (typeof value === "string") {
return value;
} else if (Array.isArray(value)) {
return value.map(stringContent).join("");
} else {
return stringContent(value.content);
}
}
})(Prism);
}
}
});
export {
require_js_templates
};
//# sourceMappingURL=chunk-SA4C6OJT.js.map