diff --git a/.github/scripts/docker-profile.test.mjs b/.github/scripts/docker-profile.test.mjs
index 2346e4718..a39dcf6b1 100644
--- a/.github/scripts/docker-profile.test.mjs
+++ b/.github/scripts/docker-profile.test.mjs
@@ -4,7 +4,7 @@ import assert from 'node:assert/strict'
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
-import { imagePackages, linkPackages, prepareProfile } from '../../docker/profile.mjs'
+import { imagePackages, linkPackages, missingDependencies, prepareProfile } from '../../docker/profile.mjs'
const root = new URL('../../', import.meta.url)
const read = (path) => readFileSync(new URL(path, root), 'utf8')
@@ -27,6 +27,30 @@ test('imagePackages lists the unpacked packages by name', () => {
} finally { rmSync(dir, { recursive: true, force: true }) }
})
+test('missingDependencies names each declared runtime dependency a package does not carry', () => {
+ const dir = packagesDir()
+ try {
+ const core = join(dir, 'ds-bot-0.2.1')
+ writeFileSync(join(core, 'package.json'), JSON.stringify({ name: 'ds-bot', dependencies: { '@larksuiteoapi/node-sdk': '1.0.0', ws: '8.0.0' }, peerDependencies: { '@deepseek-ai/dsh-llm': '*' } }))
+ assert.deepEqual(missingDependencies(imagePackages(dir)), ['ds-bot -> @larksuiteoapi/node-sdk', 'ds-bot -> ws'], 'a linked package brings none of its dependencies')
+ for (const dep of ['@larksuiteoapi/node-sdk', 'ws']) {
+ mkdirSync(join(core, 'node_modules', dep), { recursive: true })
+ writeFileSync(join(core, 'node_modules', dep, 'package.json'), '{}')
+ }
+ assert.deepEqual(missingDependencies(imagePackages(dir)), [], 'peers are not checked: the DSH profile provides them')
+ } finally { rmSync(dir, { recursive: true, force: true }) }
+})
+
+test('the image installs ds-bot runtime dependencies from the lockfile and checks them', () => {
+ // Without this the Feishu long connection fails in the container: the SDK import is lazy, so
+ // the image starts healthy and only the connection reports an error.
+ const dockerfile = read('Dockerfile')
+ assert.match(dockerfile, /cd core \\\n && npm ci --omit=dev --ignore-scripts/, 'the pinned runtime dependencies, without build tools or install scripts')
+ assert.match(dockerfile, /mv node_modules "\$\(echo \/out\/ds-bot-\*\)\/node_modules"/, 'next to the linked package, where its imports resolve')
+ assert.match(dockerfile, /missingDependencies\(imagePackages\('\/out'\)\)/, 'the build stops on a missing dependency')
+ assert.match(read('core/.npmrc'), /^legacy-peer-deps=true$/m, 'the @deepseek-ai peers stay out of the image package')
+})
+
test('a new profile gets the web bundles plus every image package, linked', () => {
const next = linkPackages(undefined, [{ name: 'ds-bot', dir: '/opt/p/core' }, { name: '@flybot/tree', dir: '/opt/p/tree' }])
assert.deepEqual(next.dependencies, { 'ds-bot': 'link:/opt/p/core', '@flybot/tree': 'link:/opt/p/tree' })
diff --git a/.github/scripts/openapi.test.mjs b/.github/scripts/openapi.test.mjs
index 01a0f12ba..2ee2f0659 100644
--- a/.github/scripts/openapi.test.mjs
+++ b/.github/scripts/openapi.test.mjs
@@ -41,6 +41,9 @@ test('FBA safe/watch contracts preserve native asymmetries and human/host-only b
assert.deepEqual(op('project-role').humanRoles, ['owner'])
for (const endpoint of ['personal-agent-token-create', 'personal-agent-delegation-set', 'project-close-prepare', 'project-close-confirm', 'project-terminal-open', 'project-agent-history']) assert.equal(op(endpoint).personalAgent.watch, false, endpoint)
assert.deepEqual(op('personal-agent-propose-task').security, [{ personalAgentToken: [] }])
+ assert.equal(op('feishu').personalAgent.safe, false)
+ assert.equal(op('feishu').personalAgent.watch, false)
+ assert.deepEqual(op('feishu').security, [{ memberSession: [] }])
for (const name of ['claim', 'handoff.offer', 'handoff.accept', 'complete', 'arbitrate', 'split']) assert.throws(() => op('project-development', 'command', name), /Unspecified/)
assert.equal(spec.components.schemas.PersonalAgentTokenCreateResult.properties.token.readOnly, true)
assert.equal(spec.components.schemas.PersonalAgentTokenCreateResult.properties.token.writeOnly, undefined)
diff --git a/Dockerfile b/Dockerfile
index e10b85bcb..9d167e3a3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -14,6 +14,15 @@ RUN node .github/scripts/check-pack.mjs /pkgs \
&& for tgz in /pkgs/*.tgz; do \
dir="/out/$(basename "$tgz" .tgz)"; mkdir -p "$dir" && tar -xzf "$tgz" -C "$dir" --strip-components=1; \
done
+# The profile links these packages, and a `link:` installs none of a linked package's own
+# dependencies. So ds-bot's runtime ones (the Feishu long-connection SDK, the Claude and Codex
+# executor SDKs) go into its node_modules here, at the versions core/package-lock.json pins;
+# core/.npmrc keeps the @deepseek-ai peers out, DSH provides those. The build stops if any
+# image package still lacks a declared dependency.
+RUN cd core \
+ && npm ci --omit=dev --ignore-scripts --no-audit --no-fund \
+ && mv node_modules "$(echo /out/ds-bot-*)/node_modules" \
+ && node --input-type=module -e "import { imagePackages, missingDependencies } from '/src/docker/profile.mjs'; const missing = missingDependencies(imagePackages('/out')); if (missing.length) { console.error('runtime dependencies missing from the image: ' + missing.join(', ')); process.exit(1) }"
# Stage 2: the runtime.
FROM ${NODE_IMAGE}
diff --git a/changelog.d/docker-local-api-trust.fixed.md b/changelog.d/docker-local-api-trust.fixed.md
new file mode 100644
index 000000000..ff665c83b
--- /dev/null
+++ b/changelog.d/docker-local-api-trust.fixed.md
@@ -0,0 +1 @@
+Require an explicit trusted browser address for the local Docker override so signing in through a published port also permits authenticated API and WebSocket requests, while other hosts and cross-origin requests remain blocked.
diff --git a/changelog.d/docker-runtime-deps.fixed.md b/changelog.d/docker-runtime-deps.fixed.md
new file mode 100644
index 000000000..dcde78ab3
--- /dev/null
+++ b/changelog.d/docker-runtime-deps.fixed.md
@@ -0,0 +1 @@
+The Docker image now carries the FlyBot core's runtime dependencies. The profile links the packages, and a link installs none of their own dependencies, so a container started healthy but could not open the Feishu long connection (and could not load the Claude or Codex executor SDKs). The build now fails if a declared dependency is missing, and a Feishu connection that fails because the SDK is absent says so in the diagnostics instead of pointing at the network and credentials.
diff --git a/changelog.d/feishu-migration.added.md b/changelog.d/feishu-migration.added.md
new file mode 100644
index 000000000..32ac37210
--- /dev/null
+++ b/changelog.d/feishu-migration.added.md
@@ -0,0 +1 @@
+Add guided Feishu application setup with long-connection and HTTP reception, persistent threaded Bot routing, rich messages and attachments, linked card submissions, delivery reactions, and application-scoped calendar, document, table, meeting and task tools with native write approvals. Retain custom bot webhooks and add a local Docker port-publishing override. Use one Connect entry with compact permission choices, optional JSON preview and responsive setup navigation.
diff --git a/core/client.js b/core/client.js
index d7d5f3936..7de042523 100644
--- a/core/client.js
+++ b/core/client.js
@@ -39,9 +39,126 @@ __export(index_exports, {
});
module.exports = __toCommonJS(index_exports);
+// src/client/feishu-copy.js
+var FEISHU_ZH = {
+ "Optional tools": "按需选择",
+ "Select the tools you need. The permission JSON updates automatically.": "勾选需要的工具,权限 JSON 会自动更新。",
+ "Clipboard is unavailable. Copy the selected JSON below.": "无法访问剪贴板,请手动复制已选中的权限 JSON。",
+ "Base permissions are always included.": "已包含全部基础权限",
+ "View permission JSON": "查看权限 JSON",
+ "Open Feishu Open Platform": "打开飞书开放平台",
+ "Long connection": "长连接",
+ "Event address": "事件地址",
+ "Recommended · no public address": "推荐 · 无需公网地址",
+ "Requires a public HTTPS address": "需要公网 HTTPS 地址",
+ "Connection steps": "接入步骤",
+ "Step {current} of {total}": "第 {current} 步,共 {total} 步",
+ "Previous step": "上一步",
+ "Check App ID and App Secret. A nonexistent App ID may be reported as an internal error.": "App ID 或 App Secret 不正确,请在应用的“凭证与基础信息”页面重新复制。App ID 不存在时,飞书可能只返回“内部错误”。",
+ "FlyBot cannot reach open.feishu.cn. Check the server network or proxy.": "FlyBot 服务器连不上 open.feishu.cn,请检查服务器的网络或代理设置。",
+ "Credentials accepted, but Bot information is unavailable. Enable the Bot capability and publish a version. You can continue now and test again after publishing.": "凭据正确,但还读不到机器人:应用还没有开启机器人能力,或开启后还没有发布版本。可以先继续下一步,发布版本后再测试。",
+ "Apply for the missing app permission, publish a new version, wait for approval, then check permissions again.": "请在飞书开放平台申请缺少的应用权限并发布新版本;需要管理员审批时等待通过,再重新检测。",
+ "The application has reached its long-connection limit (up to 50 connections).": "应用的长连接数已达上限(最多 50 个连接)。",
+ "Could not connect to open.feishu.cn; check the server network, proxy and application credentials.": "连不上 open.feishu.cn,请检查服务器网络、代理和应用凭据。",
+ "The Feishu long-connection SDK is not installed on the FlyBot server. Reinstall FlyBot, or rebuild the image if it runs in Docker.": "FlyBot 服务器上没有安装飞书长连接 SDK。请重新安装 FlyBot;用 Docker 运行时请重新构建镜像。",
+ "Operation failed; check network, permissions and published app version": "操作失败,请检查网络、应用权限及已发布的应用版本。",
+ "Conversation handlers": "会话处理的 Bot",
+ "Conversation handler": "处理的 Bot",
+ "Follow the default Bot": "跟随默认 Bot",
+ "Reply in thread": "回复消息串",
+ "Connection name": "接入名称",
+ "App has read-only permission": "只开通了只读",
+ "Also process other robots that mention this robot (up to 8 consecutive requests)": "其他机器人 @ 这个机器人时,也交给 Bot 处理(连续最多 8 次)",
+ "Files": "文件",
+ "Setup guide": "设置引导",
+ "Connect Feishu": "接入飞书",
+ "New connection": "新建接入",
+ "Prepare a public event address": "准备公网事件地址",
+ "Create an app on Feishu Open Platform": "在飞书开放平台创建应用",
+ "Enter credentials and test connection": "填写凭据并测试连接",
+ "Subscribe to message events and card callbacks": "订阅消息事件与卡片回调",
+ "Publish an app version": "发布应用版本",
+ "Choose the Bot represented by the robot": "选择机器人代表的 Bot",
+ "Try it in Feishu": "在飞书中试一试",
+ "Long connection (recommended, no public address)": "长连接(推荐,不需要公网地址)",
+ "Event address (HTTP, needs a public address)": "事件地址(HTTP,需要公网地址)",
+ "Create an internal app, add the Bot capability, and apply for the permissions below. Do not configure events yet.": "创建企业自建应用,在“添加应用能力”中添加机器人,按下方列表申请权限并设置通讯录权限范围。先不要配置事件订阅。",
+ "Only Feishu (open.feishu.cn) is supported; Lark is not supported.": "只支持飞书(open.feishu.cn),不支持 Lark 国际版。",
+ "Copy permission JSON": "复制权限 JSON",
+ "Copied": "已复制",
+ "Extended permissions (Feishu tools)": "扩展权限(飞书工具)",
+ "Calendar": "日历",
+ "Documents and wiki": "文档与知识库",
+ "Bitable": "多维表格",
+ "Spreadsheets": "电子表格",
+ "Video meetings": "视频会议",
+ "Tasks": "任务",
+ "Import this JSON in Permission management → Batch import/export. Set the contact data scope to people who will use the robot.": "在“权限管理 → 批量导入/导出”中粘贴 JSON 并申请开通;在“数据权限”中把通讯录权限范围设为会使用机器人的成员。",
+ "Public HTTPS event origin": "公网 HTTPS 事件地址前缀",
+ "Forward only the event port to a public HTTPS address. Do not expose the FlyBot console. Leave Encrypt Key empty.": "准备公网可以访问的 HTTPS 地址,只转发事件端口,不开放控制台。Encrypt Key 保持为空:FlyBot 不接收加密推送的事件。",
+ "Credentials are encrypted on the platform and cannot be viewed after saving. Bots never receive them.": "FlyBot 加密保存凭据,保存后不能再查看。凭据只留在平台,不交给 Bot。",
+ "Leave saved credentials blank to keep them. Switching receiving methods reuses the same Feishu application and conversations.": "已有凭据留空即沿用;切换接收方式沿用原来的飞书应用和会话,不需要重新创建。",
+ "Switching to a long connection deletes the saved Verification Token.": "改用长连接后,原来保存的 Verification Token 会被删除。",
+ "Save and test connection": "保存并测试连接",
+ "Connection to Feishu": "与飞书的连接",
+ "Refreshes every 3 seconds": "每 3 秒刷新",
+ "Connected": "已连接",
+ "Connecting…": "正在连接…",
+ "Connection failed": "连接失败",
+ "Wait until connected: Feishu only allows saving the long connection subscription after FlyBot connects. Check credentials and network if it keeps waiting.": "还没有连上:飞书只有在 FlyBot 连上之后,才允许把订阅方式保存为长连接。如果一直停在这里,检查 App ID、App Secret,以及服务器能否访问 open.feishu.cn。",
+ "Now set Events and callbacks → Event configuration → Use long connection to receive events, then save.": "现在到“事件与回调 → 事件配置”,把订阅方式设为“使用长连接接收事件”并保存。",
+ "Add Receive message v2.0 (im.message.receive_v1).": "添加事件“接收消息 v2.0”(im.message.receive_v1)。",
+ "In Callback configuration, use the long connection and add Card action trigger (card.action.trigger).": "在“回调配置”中选择“使用长连接接收回调”并保存,添加“卡片回传交互”(card.action.trigger)。",
+ "In both Event configuration and Callback configuration, select Send to developer server, use the same address below, and save.": "在“事件配置”和“回调配置”中分别选择“将事件/回调发送至开发者服务器”,填写下方同一个请求地址并保存。",
+ "Address verified": "请求地址已通过验证",
+ "Waiting for address verification": "等待飞书验证请求地址;失败时检查 Verification Token,并返回上一步修改。",
+ "Received an event": "已收到飞书事件",
+ "No event received yet": "尚未收到飞书事件",
+ "Without card.action.trigger, cards can display but buttons and forms do not respond. Neither test connection nor connected status checks callback subscriptions.": "没有订阅 card.action.trigger 时,卡片能显示,但按钮和表单没有反应。测试连接、基础权限检测和“已连接”都不检测回调订阅。",
+ "Connect each Feishu app to only one FlyBot instance; multiple instances split incoming messages.": "同一个飞书应用只接到一个 FlyBot:同时接到多个实例时,消息会被随机分走。",
+ "Create and publish a version in Version management and release. Include the required members or departments. Wait for enterprise approval if required.": "在“版本管理与发布”中创建版本,在可用范围中选择能使用机器人的成员或部门,申请线上发布;需要审核时等待企业管理员通过。",
+ "Permissions, Bot capability, events and callbacks take effect after publishing. Publish again after any change.": "权限、机器人能力、消息事件和卡片回调订阅在发布后才生效;之后修改也要重新发布版本。",
+ "Test connection": "测试连接",
+ "One Feishu application represents one Bot. Group mentions and private messages go to the selected local Bot.": "一个飞书应用就是一个机器人。群里 @ 它的消息和发给它的私聊消息交给选中的本地 Bot 处理,回复以机器人的身份发出。",
+ "Choose a Bot": "选择 Bot",
+ "Add the application under Group settings → Group robots. Mention it in the group, or send a private message.": "在“群设置 → 群机器人”中添加这个应用,在群里 @ 机器人,或直接私聊它。",
+ "Ask the Bot to send a card with a submit button. Click it and confirm Submitted. Ordinary chat success does not verify card callbacks.": "请机器人发送一张带提交按钮的卡片,实际点击并确认出现“已提交”提示;普通聊天成功不能代替卡片交互验证。",
+ "Each group or private chat keeps one FlyBot conversation; thread replies return to the original thread. Message edits and recalls are not synchronized.": "一个群聊或私聊对应一个 FlyBot 会话;消息串中的回复发回原消息串。不同步消息的编辑和撤回。",
+ "Who may send messages": "谁可以发消息",
+ "Allow an open_id": "允许发消息的 open_id",
+ "Allowed senders can send messages; this does not grant platform identity or approval authority.": "白名单只表示允许发消息,不等于平台用户或审批权限。",
+ "Identity linking": "身份关联",
+ "Feishu open_id": "飞书 open_id",
+ "Platform member": "平台成员",
+ "Link identity": "关联身份",
+ "Link to an existing signed-in platform member. No external members or new login accounts are created. Unlinked card submissions and meeting bookings are refused.": "关联到已有平台成员,不创建外部成员或新登录账号。未关联的卡片提交和视频会议预约会被拒绝。",
+ "Feishu tools": "飞书工具",
+ "Disabled": "禁用",
+ "Read only": "只读",
+ "Read/write, ask before writes": "读写,写入需询问",
+ "Read/write": "读写",
+ "Permissions of the Feishu application": "飞书应用的权限",
+ "Check permissions again": "重新检测",
+ "App permission not granted": "飞书应用未开通",
+ "Diagnostics": "诊断记录",
+ "Delivery records": "投递记录",
+ "Cards": "卡片",
+ "Delete connection": "删除接入",
+ "Later": "稍后继续",
+ "Next": "下一步",
+ "Back": "上一步",
+ "Finish": "完成",
+ "Save": "保存",
+ "App ID must be cli_ followed by 16 hexadecimal characters": "App ID 必须是 cli_ 加 16 位十六进制字符。",
+ "Enter the App Secret": "请填写 App Secret。",
+ "Enter the Verification Token": "请填写 Verification Token。",
+ "Prepare a public HTTPS event address": "请先准备公网可以访问的 HTTPS 事件地址。"
+};
+
// src/client/i18n.js
var NAMESPACE = "ds-bot";
var ZH = {
+ ...FEISHU_ZH,
// Workflows settings (#1364). The page lists factory pipelines and your own graphs.
Workflows: "工作流",
"A workflow is a group of your Bots. Drag the flowchart to change who hands work to whom.": "工作流是一组你的 Bot。拖动流程图,改谁把工作交给谁。",
@@ -1573,6 +1690,15 @@ function installLocale(locale) {
if (typeof off === "function") off();
};
}
+function installBrowserLocale(tag) {
+ const active = typeof tag === "string" ? tag : "en";
+ return installLocale({
+ getLocale: () => ({ active }),
+ register: () => () => {
+ },
+ bind: () => (key, params) => fill(active.startsWith("zh") ? ZH[key] ?? key : key, params)
+ });
+}
function t(key, params) {
return bound ? bound(key, params) : fill(key, params);
}
@@ -2286,8 +2412,8 @@ function bodyOf(def, paint, flat = false) {
return "";
}
}
-var eyeMarkup = ([cx, cy, w, h50, tilt]) => ``;
-var happyEyeMarkup = ([cx, cy, w, h50, tilt]) => ``;
+var eyeMarkup = ([cx, cy, w, h51, tilt]) => ``;
+var happyEyeMarkup = ([cx, cy, w, h51, tilt]) => ``;
var maskBox = (size) => `maskUnits="userSpaceOnUse" x="${-size}" y="${-size}" width="${size * 3}" height="${size * 3}"`;
var holes = (def, eyes) => `${eyes}`;
var MASK_ID = "%MASK%";
@@ -3099,29 +3225,29 @@ function inviteCountdown(expiresAt, offsetMs = 0) {
const total = Math.max(1, Math.ceil(left / 1e3));
return `${Math.floor(total / 60)}:${String(total % 60).padStart(2, "0")} left to join`;
}
-function RoomInvitePreview({ h: h50, preview, kind = "face-link-preview", busy = false, joinLabel = "Join", clearLabel = "Clear", showClear = true, onJoin, onClear, now } = {}) {
- if (!preview || typeof h50 !== "function") return null;
+function RoomInvitePreview({ h: h51, preview, kind = "face-link-preview", busy = false, joinLabel = "Join", clearLabel = "Clear", showClear = true, onJoin, onClear, now } = {}) {
+ if (!preview || typeof h51 !== "function") return null;
const at = `${kind}`;
const child = (name) => `${at}-${name}`;
const countdown = now === void 0 ? inviteCountdown(preview.expiresAt, preview.clockOffsetMs) : inviteCountdownAt(preview.expiresAt, preview.clockOffsetMs, now);
- return h50(
+ return h51(
"div",
{ className: "fs-preview", "data-flybot": at, role: "status" },
- h50("div", { className: "fs-preview-name", "data-flybot": child("name") }, preview.name || "Face-to-face room"),
- preview.lead ? h50("div", { className: "fs-preview-meta", "data-flybot": child("lead") }, `Lead: ${preview.lead}`) : null,
- preview.people ? h50("div", { className: "fs-preview-meta", "data-flybot": child("members") }, preview.people) : null,
- preview.expiresAt ? h50("div", { className: "fs-preview-meta", "data-flybot": child("expiry") }, countdown) : null,
- onJoin || onClear ? h50(
+ h51("div", { className: "fs-preview-name", "data-flybot": child("name") }, preview.name || "Face-to-face room"),
+ preview.lead ? h51("div", { className: "fs-preview-meta", "data-flybot": child("lead") }, `Lead: ${preview.lead}`) : null,
+ preview.people ? h51("div", { className: "fs-preview-meta", "data-flybot": child("members") }, preview.people) : null,
+ preview.expiresAt ? h51("div", { className: "fs-preview-meta", "data-flybot": child("expiry") }, countdown) : null,
+ onJoin || onClear ? h51(
"div",
{ className: "fs-preview-foot", "data-flybot": child("foot") },
- showClear && onClear ? h50("button", {
+ showClear && onClear ? h51("button", {
type: "button",
className: "fs-btn fs-btn-sm",
"data-flybot": child("clear"),
disabled: !!busy,
onClick: onClear
}, clearLabel) : null,
- onJoin ? h50("button", {
+ onJoin ? h51("button", {
type: "button",
className: "fs-btn fs-btn-sm fs-btn-primary",
"data-flybot": child("join"),
@@ -3751,12 +3877,12 @@ function liveSprings(apply2) {
const dt = Math.min(0.5, Math.max(1e-3, (now - last) / 1e3));
last = now;
const steps = Math.ceil(dt * 240);
- const h50 = dt / steps;
+ const h51 = dt / steps;
let moving = false;
for (const value of values.values()) {
for (let index = 0; index < steps; index += 1) {
- value.v += (-value.k * (value.x - value.to) - value.c * value.v) * h50;
- value.x += value.v * h50;
+ value.v += (-value.k * (value.x - value.to) - value.c * value.v) * h51;
+ value.x += value.v * h51;
}
if (Math.abs(value.x - value.to) < 0.05 && Math.abs(value.v) < 1) {
value.x = value.to;
@@ -4496,6 +4622,62 @@ button.bt-set-row:hover{background:var(--bt-hover)}
.bt-connector[data-state=error] .bt-connector-status{color:#e02135;white-space:normal}
.bt-connector-actions{flex:none;display:flex;gap:6px}
.bt-connector-form{display:flex;flex-direction:column;gap:8px;padding-left:48px;animation:bt-q-in ${SPRING_SHAPE.duration}ms ${SPRING_SHAPE.easing},bt-veil-in .2s ease-out}
+.bt-feishu-setup{container-type:inline-size;min-width:0;width:100%;max-width:960px;box-sizing:border-box;padding:20px;border:1px solid var(--bt-line);border-radius:14px;background:var(--bt-card);color:var(--bt-ink);font:13px/1.6 ui-sans-serif,system-ui,sans-serif;overflow-wrap:anywhere;animation:bt-veil-in .16s ease-out}
+.bt-feishu-setup *{box-sizing:border-box}
+.bt-feishu-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--bt-line)}
+.bt-feishu-header h3{padding:0;margin:0 0 4px;font-size:17px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-header>.bt-input{width:220px;max-width:45%;flex:none}
+.bt-feishu-setup .bt-set-hint{margin:0;font-size:12px;line-height:1.7;color:var(--bt-ink-2)}
+.bt-feishu-body{display:flex;flex-direction:column;gap:22px;padding-top:18px}
+.bt-feishu-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
+.bt-feishu-modes button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:11px 14px;border:1px solid var(--bt-line-2);border-radius:10px;background:var(--bt-card);color:var(--bt-ink);font:inherit;text-align:left;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-modes button:hover{background:var(--bt-hover)}
+.bt-feishu-modes button[aria-pressed=true]{border-color:var(--bt-accent);background:color-mix(in srgb,var(--bt-accent) 6%,var(--bt-card));box-shadow:0 0 0 1px var(--bt-accent)}
+.bt-feishu-modes strong{font-size:13px;font-weight:600}.bt-feishu-modes small{color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-layout{display:grid;grid-template-columns:160px minmax(0,1fr);gap:24px;align-items:start}
+.bt-feishu-progress{min-width:0}.bt-feishu-progress ol{display:flex;flex-direction:column;gap:4px;list-style:none;margin:0;padding:0}
+.bt-feishu-progress li{min-width:0}.bt-feishu-progress button{display:flex;align-items:center;gap:9px;width:100%;padding:9px 8px;border:0;border-radius:8px;background:transparent;color:var(--bt-ink-2);font:inherit;font-size:12px;line-height:19px;text-align:left;cursor:pointer}
+.bt-feishu-progress button:hover:not(:disabled){background:var(--bt-hover)}
+.bt-feishu-progress button[aria-current=step]{background:color-mix(in srgb,var(--bt-accent) 7%,var(--bt-card));color:var(--bt-accent);font-weight:600}
+.bt-feishu-progress button:disabled{opacity:.48;cursor:default}
+.bt-feishu-step-number{display:flex;align-items:center;justify-content:center;flex:none;width:22px;height:22px;border:1px solid var(--bt-line-2);border-radius:50%;font-size:11px;font-variant-numeric:tabular-nums}
+.bt-feishu-progress [aria-current=step] .bt-feishu-step-number{background:var(--bt-accent);border-color:var(--bt-accent);color:white}
+.bt-feishu-progress [data-done=true] .bt-feishu-step-number{border-color:transparent;background:var(--bt-hover);color:var(--bt-ink-2)}
+.bt-feishu-step{min-width:0}.bt-feishu-step-heading{margin-bottom:16px}.bt-feishu-eyebrow{display:block;margin-bottom:4px;color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-step h4{margin:0;font-size:16px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-step-content>div{display:flex;flex-direction:column;align-items:stretch;gap:14px}
+.bt-feishu-external{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;align-self:flex-start;border:1px solid var(--bt-line-2);border-radius:8px;padding:7px 11px;color:var(--bt-ink);font-size:12px;font-weight:500;text-decoration:none}
+.bt-feishu-external:hover{background:var(--bt-hover)}.bt-feishu-external span{color:var(--bt-ink-2)}
+.bt-feishu-permissions{display:flex;flex-direction:column;gap:10px;padding-top:5px}.bt-feishu-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.bt-feishu-section-head strong{font-size:13px;font-weight:600}
+.bt-feishu-optional{color:var(--bt-ink-2);font-size:11px}.bt-feishu-permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
+.bt-feishu-permission{display:flex;align-items:center;gap:9px;min-width:0;min-height:42px;margin:0;padding:9px 11px;border:1px solid var(--bt-line);border-radius:9px;background:var(--bt-card);font-size:12px;line-height:20px;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-permission:hover{border-color:var(--bt-line-2);background:var(--bt-hover)}
+.bt-feishu-permission[data-checked=true]{border-color:color-mix(in srgb,var(--bt-accent) 55%,var(--bt-line));background:color-mix(in srgb,var(--bt-accent) 5%,var(--bt-card))}
+.bt-feishu-setup input[type=checkbox]{appearance:auto;flex:none;width:15px;height:15px;min-height:0;margin:0;padding:0;border-radius:4px;accent-color:var(--bt-accent);cursor:pointer}
+.bt-feishu-permission-copy{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
+.bt-feishu-setup .bt-feishu-button{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;gap:6px;flex:none;width:auto;min-height:34px;height:auto;margin:0;padding:6px 12px;border:1px solid var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink);font:inherit;font-size:12px;font-weight:500;cursor:pointer;box-shadow:none}
+.bt-feishu-setup .bt-feishu-button:hover:not(:disabled){background:var(--bt-hover)}.bt-feishu-setup .bt-feishu-button:disabled{opacity:.4;cursor:default}
+.bt-feishu-setup .bt-feishu-primary{background:var(--bt-accent);border-color:var(--bt-accent);color:#fff;padding-inline:18px}
+.bt-feishu-setup .bt-feishu-primary:hover:not(:disabled){background:color-mix(in srgb,var(--bt-accent) 88%,#000)}
+.bt-feishu-setup .bt-feishu-quiet{border-color:transparent;background:transparent;color:var(--bt-ink-2)}
+.bt-feishu-setup :is(button,a,input,select,textarea):focus-visible{outline:2px solid var(--bt-accent);outline-offset:3px}
+.bt-feishu-setup details{min-width:0}.bt-feishu-setup summary{cursor:pointer;font-size:12px;font-weight:500;line-height:20px;padding:8px 0;color:var(--bt-ink-2)}
+.bt-feishu-json{border:0}.bt-feishu-setup .bt-feishu-json summary{padding:2px 0;color:var(--bt-accent);font-weight:400}
+.bt-feishu-setup .bt-feishu-json textarea{width:100%;height:180px;min-height:120px;max-height:320px;margin-top:10px;padding:12px;border:1px solid var(--bt-line);border-radius:8px;background:var(--bt-sidebar);color:var(--bt-ink-2);font:11px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;resize:vertical;white-space:pre;overflow:auto;overflow-wrap:normal}
+.bt-feishu-field,.bt-feishu-setup .bt-q-field{display:flex;flex-direction:column;flex:initial;gap:6px;min-width:0;min-height:0;margin:0;padding:0;border:0;cursor:default;color:var(--bt-ink-2);font-size:12px}
+.bt-feishu-setup .bt-input{min-width:0;height:38px;padding:0 11px;font-size:13px;border-color:var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink)}
+.bt-feishu-field+.bt-feishu-field{margin-top:2px}.bt-feishu-setup .bt-input:disabled{opacity:.65;background:var(--bt-sidebar)}
+.bt-feishu-check{display:flex;align-items:flex-start;gap:9px;font-size:12px}.bt-feishu-check input{margin-top:3px!important}
+.bt-feishu-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:22px;padding-top:16px;border-top:1px solid var(--bt-line)}
+.bt-feishu-footer>div{display:flex;align-items:center;gap:6px}.bt-feishu-result,.bt-feishu-error{margin:14px 0 0;padding:10px 12px;border-radius:8px;font-size:12px;line-height:1.6;background:var(--bt-sidebar);color:var(--bt-ink-2)}
+.bt-feishu-result[data-success=true]{color:var(--bt-ink);border:1px solid var(--bt-line)}.bt-feishu-error{color:#d33e4e;background:color-mix(in srgb,#e5484d 7%,var(--bt-card))}
+.bt-feishu-management{border-top:1px solid var(--bt-line);padding-top:8px}.bt-feishu-management>details+details{border-top:1px solid var(--bt-line)}
+.bt-feishu-management>details>summary{padding:12px 0;color:var(--bt-ink)}.bt-feishu-management>details[open]{display:flex;flex-direction:column;gap:10px;padding-bottom:14px}
+.bt-feishu-management>details>fieldset{min-width:0;margin:4px 0;padding:12px;border:1px solid var(--bt-line);border-radius:10px}.bt-feishu-management legend{font-size:12px;font-weight:600;padding-inline:4px}
+.bt-feishu-management fieldset>.bt-q-field+.bt-q-field{margin-top:10px}.bt-feishu-setup code,.bt-feishu-setup pre{white-space:pre-wrap;overflow-wrap:anywhere}.bt-feishu-setup ul{padding-left:18px;margin:4px 0}
+.bt-feishu-webhook{margin-top:18px;padding-top:10px;border-top:1px solid var(--bt-line)}.bt-feishu-webhook[open]{display:flex;flex-direction:column;gap:12px}.bt-feishu-webhook>summary{color:var(--bt-ink-2)}
+@container (max-width:640px){.bt-feishu-layout{display:flex;flex-direction:column;gap:18px}.bt-feishu-progress{width:100%}.bt-feishu-progress ol{flex-direction:row;gap:5px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.bt-feishu-progress li{flex:1}.bt-feishu-progress button{justify-content:center;padding:5px;gap:7px}.bt-feishu-step-label{display:none}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{display:block;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bt-feishu-progress li:has([aria-current=step]){flex:4}.bt-feishu-step{width:100%}.bt-feishu-header{flex-direction:column;gap:10px}.bt-feishu-header>.bt-input{max-width:100%;width:100%}}
+@container (max-width:340px){.bt-feishu-modes{gap:8px}.bt-feishu-modes button{padding:9px 10px}.bt-feishu-modes small{font-size:10px}.bt-feishu-permission{padding:8px}.bt-feishu-footer>div{gap:2px}.bt-feishu-footer .bt-feishu-button{padding-inline:9px}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{max-width:90px}}
.bt-connector-form-row{display:flex;align-items:center;gap:6px}
.bt-connector-apps{display:flex;flex-direction:column;gap:8px}
.bt-connector-link{flex:1;font-size:12px;color:var(--bt-ink-2)}
@@ -5426,7 +5608,7 @@ function QuestionView({ question, onAnswer, onDismiss, ownAnswer = false, raised
};
useOptionKeys(options.length, (index) => choose(options[index].label), ownRef);
const ownLetter = options.length > 0 ? keyLetter(options.length) : void 0;
- const field = ownAnswer ? (0, import_react6.createElement)("textarea", {
+ const field2 = ownAnswer ? (0, import_react6.createElement)("textarea", {
ref: ownRef,
rows: 1,
value: own,
@@ -5465,12 +5647,12 @@ function QuestionView({ question, onAnswer, onDismiss, ownAnswer = false, raised
selected && !raised ? (0, import_react6.createElement)("span", { className: "bt-q-check", title: t("Selected") }, (0, import_react6.createElement)(CheckIcon)) : null
);
});
- if (raised && field) {
+ if (raised && field2) {
rows.push((0, import_react6.createElement)(
"label",
{ key: "own", className: "bt-q-opt bt-q-ownrow", "data-filled": custom !== "" ? "" : void 0 },
ownLetter ? (0, import_react6.createElement)("span", { className: "bt-key", "aria-hidden": true }, ownLetter) : null,
- (0, import_react6.createElement)("span", { className: "bt-q-body" }, field)
+ (0, import_react6.createElement)("span", { className: "bt-q-body" }, field2)
));
}
let foot = null;
@@ -5507,10 +5689,10 @@ function QuestionView({ question, onAnswer, onDismiss, ownAnswer = false, raised
(0, import_react6.createElement)("button", { type: "button", className: "bt-q-x", "aria-label": t("Dismiss question"), title: t("Dismiss"), onClick: onDismiss }, (0, import_react6.createElement)(CloseIcon))
),
rows.length > 0 ? (0, import_react6.createElement)("div", { className: "bt-q-list", role: "group" }, rows) : null,
- field && !raised ? (0, import_react6.createElement)(
+ field2 && !raised ? (0, import_react6.createElement)(
"div",
{ className: "bt-q-custom" },
- (0, import_react6.createElement)("label", { className: "bt-q-field" }, field),
+ (0, import_react6.createElement)("label", { className: "bt-q-field" }, field2),
!multi && canSubmit ? (0, import_react6.createElement)("button", { type: "submit", className: "bt-q-submit" }, t("Submit")) : null
) : null,
foot
@@ -6370,6 +6552,7 @@ function AssistantCell({ node, groupPart, sessionId, openFile, fileMentions, use
const closing = useClosingText(node, useTurnData);
const hidden = Boolean(roster.roomsById[sessionId]) || isHiddenTurn(roster, sessionId, data.turn);
const person = typedBy(roster, sessionId, data.turn);
+ const feishu = roster.feishuTurns?.[sessionId]?.[data.turn];
const texts2 = groupPart === "reasoning" ? [] : data.blocks.filter((block) => block.kind === "text" && block.text.trim() !== "").map((block, index) => index === 0 ? stripTrace(block.text) : block.text).filter((text2) => text2.trim() !== "");
const running = data.status === "running";
useLiveNote(actions, sessionId, `text:${node.key ?? data.seq}`, !hidden && running && texts2.length > 0 ? { text: true } : null);
@@ -6380,8 +6563,10 @@ function AssistantCell({ node, groupPart, sessionId, openFile, fileMentions, use
const selfId = roster.byId[sessionId]?.id ?? sessionId;
const bubbles = texts2.length ? person ? (0, import_react9.createElement)(PersonMessage, { name: person, texts: texts2, roster, selfId, actions, sessionId, msgKey: `${sessionId}:${data.turn}:${node.key ?? data.seq ?? ""}`, useUi }) : (0, import_react9.createElement)(Bubbles, { texts: texts2, roster, selfId, actions, streaming: running, sessionId, msgKey: `${sessionId}:${data.turn}:${node.key ?? data.seq ?? ""}`, useUi, mentions, lead: friendLead(roster.byId[sessionId], texts2) }) : null;
return (0, import_react9.createElement)(
- import_react9.Fragment,
- null,
+ feishu ? "div" : import_react9.Fragment,
+ feishu ? { id: `feishu-message-${feishu.messageId ?? data.turn}`, "data-feishu-root": feishu.rootId ?? "" } : null,
+ feishu?.rootId ? (0, import_react9.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", title: feishu.rootId, onClick: () => document.getElementById(`feishu-message-${feishu.rootId}`)?.scrollIntoView?.({ block: "center" }) }, t("Reply in thread")) : null,
+ feishu?.attachments?.length ? (0, import_react9.createElement)(RemoteFiles, { files: feishu.attachments, appId: feishu.appId, plugin: "feishu", botId: selfId }) : null,
relays.map((relay) => {
const source = relay.source;
const sender = roster.byId[source.senderSessionId] ?? { id: source.senderSessionId, name: source.senderName ?? t("a Bot"), color: "gray" };
@@ -6549,7 +6734,7 @@ function RemoteMessage({ source, text: text2, roster, actions, sessionId, msgKey
carrier ? (0, import_react9.createElement)("span", { className: "bt-remote-handle" }, t("via {name}", { name: carrier })) : null
),
(0, import_react9.createElement)(Bubbles, { texts: [stripTrace(text2)], roster, selfId: bot.id, actions, sessionId, msgKey, useUi, lead: (0, import_react9.createElement)("span", { className: "bt-lead", title: person }, (0, import_react9.createElement)(PersonMark, { name: person })) }),
- files.length ? (0, import_react9.createElement)(RemoteFiles, { files, plugin: member?.plugin ?? "social", botId: roster.byId[sessionId]?.id ?? sessionId }) : null
+ files.length ? (0, import_react9.createElement)(RemoteFiles, { files, appId: source.feishu?.appId, plugin: source.feishu ? "feishu" : member?.plugin ?? "social", botId: roster.byId[sessionId]?.id ?? sessionId }) : null
);
}
const mark = (0, import_react9.createElement)(BotMark, { bot, size: 22 });
@@ -6565,7 +6750,7 @@ function RemoteMessage({ source, text: text2, roster, actions, sessionId, msgKey
(0, import_react9.createElement)("span", { className: "bt-remote-handle", title: source.remote.home ?? handle, "aria-label": t("Friend's Bot") }, (0, import_react9.createElement)(GlobeMark), handle)
),
(0, import_react9.createElement)(Bubbles, { texts: [stripTrace(text2)], roster, selfId: bot.id, actions, sessionId, msgKey, useUi, lead }),
- files.length ? (0, import_react9.createElement)(RemoteFiles, { files, plugin: member?.plugin ?? "social", botId: roster.byId[sessionId]?.id ?? sessionId }) : null
+ files.length ? (0, import_react9.createElement)(RemoteFiles, { files, appId: source.feishu?.appId, plugin: source.feishu ? "feishu" : member?.plugin ?? "social", botId: roster.byId[sessionId]?.id ?? sessionId }) : null
);
}
function FirstContact({ source, roster, sessionId }) {
@@ -6582,14 +6767,14 @@ function GlobeMark() {
(0, import_react9.createElement)("path", { d: "M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18" })
);
}
-function RemoteFiles({ files, plugin, botId }) {
+function RemoteFiles({ files, plugin, botId, appId }) {
const [busy, setBusy] = (0, import_react9.useState)("");
const [error, setError] = (0, import_react9.useState)("");
const download2 = async (file) => {
setBusy(file.id);
setError("");
try {
- const got = await call(`flybot/${plugin}/attachment`, { id: file.id, botId });
+ const got = plugin === "feishu" ? await call("feishu", { operation: "attachment", appId, attachmentId: file.id }) : await call(`flybot/${plugin}/attachment`, { id: file.id, botId });
const value = got?.value ?? got;
const bytes = Uint8Array.from(atob(value.content_base64), (c) => c.charCodeAt(0));
const url = URL.createObjectURL(new Blob([bytes], { type: "application/octet-stream" }));
@@ -6855,6 +7040,10 @@ var SILENT_REGISTRATION_TOOLS = /* @__PURE__ */ new Set([
"track_tasks",
"request_secret",
"list_secrets",
+ "feishu_apps",
+ "feishu_tool",
+ "feishu_card",
+ "feishu_file",
"group_relay",
"read_own_chat",
"read_group_chat",
@@ -7761,7 +7950,7 @@ function useNow(active) {
return now;
}
var since = (now, at) => typeof at === "number" && now - at >= 6e4 ? ` · ${elapsedLabel(now - at)}` : "";
-var alwaysChoices = (approval, bot) => bot?.remote ? [] : [
+var alwaysChoices = (approval, bot) => bot?.remote || approval.tool === "feishu_tool" ? [] : [
["always-bot", "Always allow for this Bot"],
...approval.roomId ? [["always-room", "Always allow for this group"]] : []
];
@@ -9980,18 +10169,18 @@ function UpdateButton({ useUpdate, actions }) {
const [box, setBox] = (0, import_react17.useState)(null);
const [error, setError] = (0, import_react17.useState)("");
const [dshError, setDshError] = (0, import_react17.useState)("");
- const button = (0, import_react17.useRef)(null);
+ const button2 = (0, import_react17.useRef)(null);
(0, import_react17.useEffect)(() => {
if (!open) return void 0;
const onDown = (event) => {
- if (event.target instanceof Element && (event.target.closest(".bt-update-pop") || button.current?.contains(event.target))) return;
+ if (event.target instanceof Element && (event.target.closest(".bt-update-pop") || button2.current?.contains(event.target))) return;
setOpen(false);
};
const onKey = (event) => {
if (event.key === "Escape") {
event.stopPropagation();
setOpen(false);
- button.current?.focus();
+ button2.current?.focus();
}
};
window.addEventListener("mousedown", onDown);
@@ -10008,7 +10197,7 @@ function UpdateButton({ useUpdate, actions }) {
if (!update?.available && !dshRow && phase === "idle" && dshPhase === "idle") return null;
const cloudPhase = phase === "installing" || dshPhase === "installing" ? "installing" : phase !== "idle" ? phase : dshPhase;
const toggle = () => {
- const rect = button.current?.getBoundingClientRect();
+ const rect = button2.current?.getBoundingClientRect();
if (rect) setBox({ left: Math.max(8, Math.min(rect.left, window.innerWidth - 288)), top: rect.bottom + 6 });
setOpen((value) => !value);
};
@@ -10028,7 +10217,7 @@ function UpdateButton({ useUpdate, actions }) {
import_react17.Fragment,
null,
(0, import_react17.createElement)("button", {
- ref: button,
+ ref: button2,
type: "button",
className: "bt-round bt-update",
"data-phase": cloudPhase,
@@ -10175,7 +10364,7 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
return () => actions.seatAccount(false);
}, [seat]);
const [box, setBox] = (0, import_react17.useState)(null);
- const button = (0, import_react17.useRef)(null);
+ const button2 = (0, import_react17.useRef)(null);
(0, import_react17.useEffect)(() => {
if (settingsOpen) setOpen(false);
}, [settingsOpen]);
@@ -10196,14 +10385,14 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
(0, import_react17.useEffect)(() => {
if (!open) return void 0;
const onDown = (event) => {
- if (event.target instanceof Element && (event.target.closest(".bt-account-menu") || button.current?.contains(event.target))) return;
+ if (event.target instanceof Element && (event.target.closest(".bt-account-menu") || button2.current?.contains(event.target))) return;
setOpen(false);
};
const onKey = (event) => {
if (event.key === "Escape") {
event.stopPropagation();
setOpen(false);
- button.current?.focus();
+ button2.current?.focus();
}
};
window.addEventListener("mousedown", onDown);
@@ -10214,7 +10403,7 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
};
}, [open]);
const toggle = () => {
- const rect = button.current?.getBoundingClientRect();
+ const rect = button2.current?.getBoundingClientRect();
if (rect) setBox({ left: rect.left, bottom: window.innerHeight - rect.top + 5 });
setOpen((value) => !value);
};
@@ -10235,7 +10424,7 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
null,
(0, import_react17.createElement)(
"button",
- { ref: button, type: "button", className: "bt-account", "aria-label": t("Account"), "aria-haspopup": "menu", "aria-expanded": open, onClick: toggle },
+ { ref: button2, type: "button", className: "bt-account", "aria-label": t("Account"), "aria-haspopup": "menu", "aria-expanded": open, onClick: toggle },
(0, import_react17.createElement)("span", { className: "bt-you", "aria-hidden": true }, (0, import_react17.createElement)(BotMark, { look: MAIN_LOOK, size: 24 }))
),
open && box ? (0, import_react_dom4.createPortal)((0, import_react17.createElement)(
@@ -10246,7 +10435,7 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
import_react17.Fragment,
{ key: index },
index > 0 ? (0, import_react17.createElement)("div", { className: "bt-menu-sep", role: "separator" }) : null,
- group.map(([label, Icon, run, hint]) => (0, import_react17.createElement)("button", {
+ group.map(([label, Icon, run, hint2]) => (0, import_react17.createElement)("button", {
key: label,
type: "button",
role: "menuitem",
@@ -10254,7 +10443,7 @@ function AccountLauncher({ seat = true, settingsOpen, openSettings, openOnboardi
setOpen(false);
void Promise.resolve(run()).catch((error) => actions.reportError(error, "menu"));
}
- }, (0, import_react17.createElement)(Icon), (0, import_react17.createElement)("span", { className: "bt-menu-label" }, label), hint ? (0, import_react17.createElement)("span", { className: "bt-menu-hint" }, hint) : null))
+ }, (0, import_react17.createElement)(Icon), (0, import_react17.createElement)("span", { className: "bt-menu-label" }, label), hint2 ? (0, import_react17.createElement)("span", { className: "bt-menu-hint" }, hint2) : null))
))
), document.body) : null
);
@@ -11935,12 +12124,12 @@ function ComposerPlus({ sessionId, inputActions, useRoster, actions }) {
const roster = useRoster((value) => value);
const [open, setOpen] = (0, import_react21.useState)(null);
const [shown, leaving] = useLinger(open, 120);
- const button = (0, import_react21.useRef)(null);
+ const button2 = (0, import_react21.useRef)(null);
const menu = (0, import_react21.useRef)(null);
(0, import_react21.useEffect)(() => {
if (!open) return void 0;
const onDown = (event) => {
- if (![button.current, menu.current].some((node) => node?.contains(event.target))) setOpen(null);
+ if (![button2.current, menu.current].some((node) => node?.contains(event.target))) setOpen(null);
};
const onKey = (event) => {
if (event.key === "Escape") {
@@ -11962,12 +12151,12 @@ function ComposerPlus({ sessionId, inputActions, useRoster, actions }) {
setOpen(null);
return;
}
- const rect = button.current.getBoundingClientRect();
+ const rect = button2.current.getBoundingClientRect();
setOpen({ left: rect.left, bottom: window.innerHeight - rect.top + 8 });
};
const attach = () => {
setOpen(null);
- button.current?.closest("[data-composer-card]")?.querySelector("input[type=file]")?.click();
+ button2.current?.closest("[data-composer-card]")?.querySelector("input[type=file]")?.click();
};
const schedule = () => {
setOpen(null);
@@ -11982,7 +12171,7 @@ function ComposerPlus({ sessionId, inputActions, useRoster, actions }) {
import_react21.Fragment,
null,
(0, import_react21.createElement)("button", {
- ref: button,
+ ref: button2,
type: "button",
className: "bt-plus",
"aria-label": t("Add"),
@@ -12569,20 +12758,20 @@ var Caret = () => (0, import_react22.createElement)("svg", { className: "bt-mode
function useAnchoredMenu() {
const [place, setPlace] = (0, import_react22.useState)(null);
const [shownPlace, leaving] = useLinger(place, MENU_EXIT_MS);
- const button = (0, import_react22.useRef)(null);
+ const button2 = (0, import_react22.useRef)(null);
const menu = (0, import_react22.useRef)(null);
const close = () => setPlace(null);
(0, import_react22.useEffect)(() => {
if (place === null) return void 0;
const onDown = (event) => {
- if (menu.current?.contains(event.target) || button.current?.contains(event.target)) return;
+ if (menu.current?.contains(event.target) || button2.current?.contains(event.target)) return;
close();
};
const onKey = (event) => {
if (event.key === "Escape") {
event.stopPropagation();
close();
- button.current?.focus();
+ button2.current?.focus();
}
};
const onScroll = (event) => {
@@ -12598,17 +12787,17 @@ function useAnchoredMenu() {
};
}, [place]);
const open = () => {
- const rect = button.current.getBoundingClientRect();
+ const rect = button2.current.getBoundingClientRect();
const width = Math.max(240, rect.width);
const left = Math.max(8, Math.min(rect.right - width, window.innerWidth - width - 8));
const below = window.innerHeight - rect.bottom;
setPlace(below >= 260 || below >= rect.top ? { left, width, top: rect.bottom + 4, maxHeight: below - 16, "--bt-origin": "top right" } : { left, width, bottom: window.innerHeight - rect.top + 4, maxHeight: rect.top - 16, "--bt-origin": "bottom right" });
};
- return { isOpen: place !== null, shownPlace, leaving, button, menu, open, close };
+ return { isOpen: place !== null, shownPlace, leaving, button: button2, menu, open, close };
}
function ModelMenu({ bot, roster, actions, run, wide = false, onPick, onPickEffort }) {
if (bot?.remote !== void 0) return null;
- const { isOpen, shownPlace, leaving, button, menu, open, close } = useAnchoredMenu();
+ const { isOpen, shownPlace, leaving, button: button2, menu, open, close } = useAnchoredMenu();
const shown = modelOf(bot, roster);
const current = bot.model ?? bot.appliedModel;
const served = servedOf(roster, current);
@@ -12641,7 +12830,7 @@ function ModelMenu({ bot, roster, actions, run, wide = false, onPick, onPickEffo
(0, import_react22.createElement)(
"button",
{
- ref: button,
+ ref: button2,
type: "button",
className: "bt-model-trigger",
"data-wide": wide || void 0,
@@ -12959,7 +13148,7 @@ var import_react_dom9 = require("react-dom");
var folderName = (path) => String(path).replace(/[\\/]+$/, "").split(/[\\/]/).pop() || String(path);
var Tick = ({ on }) => (0, import_react24.createElement)("span", { className: "bt-model-tick", "aria-hidden": true }, on ? (0, import_react24.createElement)(CheckIcon) : null);
function FolderMenu({ value, group = false, actions, run, onPick, wide = false }) {
- const { isOpen, shownPlace, leaving, button, menu, open, close } = useAnchoredMenu();
+ const { isOpen, shownPlace, leaving, button: button2, menu, open, close } = useAnchoredMenu();
const [info, setInfo] = (0, import_react24.useState)(null);
const [view, setView] = (0, import_react24.useState)("list");
const [draft, setDraft] = (0, import_react24.useState)("");
@@ -13066,7 +13255,7 @@ function FolderMenu({ value, group = false, actions, run, onPick, wide = false }
(0, import_react24.createElement)(
"button",
{
- ref: button,
+ ref: button2,
type: "button",
className: "bt-model-trigger",
"data-wide": wide || void 0,
@@ -14307,7 +14496,7 @@ var standingOf = (target, roster) => {
function StandingApprovalsCard({ scope, target, roster, actions, run, Card: Card2 }) {
const grants = scope === "room" ? standingOf(target, roster) : target?.standingApprovals ?? [];
if (grants.length === 0) return null;
- const hint = scope === "room" ? t("Your Bots in this group do these without asking.") : t("This Bot does these without asking.");
+ const hint2 = scope === "room" ? t("Your Bots in this group do these without asking.") : t("This Bot does these without asking.");
return (0, import_react29.createElement)(
Card2,
{ title: t("Always allowed") },
@@ -14318,7 +14507,7 @@ function StandingApprovalsCard({ scope, target, roster, actions, run, Card: Card
"span",
{ className: "bt-set-copy" },
(0, import_react29.createElement)("span", { className: "bt-bs-label" }, grant.label || grant.kind),
- (0, import_react29.createElement)("span", { className: "bt-set-hint" }, hint)
+ (0, import_react29.createElement)("span", { className: "bt-set-hint" }, hint2)
),
(0, import_react29.createElement)("button", {
type: "button",
@@ -14387,11 +14576,11 @@ function InlineText({ label, value, placeholder, required = false, maxLength, mu
}
});
}
-function Row({ label, hint, stack = false, children }) {
+function Row({ label, hint: hint2, stack = false, children }) {
return (0, import_react30.createElement)(
"label",
{ className: stack ? "bt-set-row bt-bs-row bt-bs-stack" : "bt-set-row bt-bs-row" },
- (0, import_react30.createElement)("span", { className: "bt-set-copy" }, (0, import_react30.createElement)("span", { className: "bt-bs-label" }, label), hint ? (0, import_react30.createElement)("span", { className: "bt-set-hint" }, hint) : null),
+ (0, import_react30.createElement)("span", { className: "bt-set-copy" }, (0, import_react30.createElement)("span", { className: "bt-bs-label" }, label), hint2 ? (0, import_react30.createElement)("span", { className: "bt-set-hint" }, hint2) : null),
children
);
}
@@ -14405,11 +14594,11 @@ function Switch({ on, label, disabled, onChange }) {
(0, import_react30.createElement)("span", { className: "bt-switch-knob", "aria-hidden": true })
);
}
-function SwitchRow({ label, hint, on, disabled, onChange, showLabel = true }) {
+function SwitchRow({ label, hint: hint2, on, disabled, onChange, showLabel = true }) {
return (0, import_react30.createElement)(
"div",
{ className: "bt-set-row bt-bs-row" },
- (0, import_react30.createElement)("span", { className: "bt-set-copy" }, showLabel ? (0, import_react30.createElement)("span", { className: "bt-bs-label" }, label) : null, hint ? (0, import_react30.createElement)("span", { className: "bt-set-hint" }, hint) : null),
+ (0, import_react30.createElement)("span", { className: "bt-set-copy" }, showLabel ? (0, import_react30.createElement)("span", { className: "bt-bs-label" }, label) : null, hint2 ? (0, import_react30.createElement)("span", { className: "bt-set-hint" }, hint2) : null),
(0, import_react30.createElement)(Switch, { on, label, disabled, onChange })
);
}
@@ -15235,7 +15424,7 @@ function CommandPalette({ start, token, roster, actions, useSessions }) {
}
return JSON.stringify(hits);
});
- const matchesName = (...fields) => wanted === "" || fields.some((field) => (field ?? "").toLowerCase().includes(wanted));
+ const matchesName = (...fields) => wanted === "" || fields.some((field2) => (field2 ?? "").toLowerCase().includes(wanted));
const sections = [];
const people2 = [
...roster.bots.filter((bot) => isListedRemoteChat(bot) && matchesName(bot.name, bot.role, pickerBotLabel(bot))).map((bot) => ({
@@ -17904,8 +18093,305 @@ button.bt-us-row:hover{background:var(--bt-hover)}
@media (prefers-reduced-motion:reduce){.bt-us *,.bt-us *::before{animation:none!important;transition:none!important}}
`;
-// src/client/connectors.js
+// src/shared/feishu.js
+var APP_ID = /^cli_[0-9a-f]{16}$/i;
+var BASE_SCOPES = ["im:message.group_at_msg:readonly", "im:message.p2p_msg:readonly", "im:message:send_as_bot", "im:message.reactions:write_only", "im:resource", "im:message:readonly", "im:chat:readonly", "contact:contact.base:readonly", "contact:user.base:readonly", "im:message.group_msg.include_bot:read"];
+var PRODUCTS = [
+ { id: "calendar", label: "Calendar", scopes: ["calendar:calendar"] },
+ { id: "docs", label: "Documents and wiki", scopes: ["docx:document", "drive:drive", "wiki:wiki"] },
+ { id: "bitable", label: "Bitable", scopes: ["bitable:app"] },
+ { id: "sheets", label: "Spreadsheets", scopes: ["sheets:spreadsheet"] },
+ { id: "meeting", label: "Video meetings", scopes: ["vc:reserve"] },
+ { id: "task", label: "Tasks", scopes: ["task:task:write"] }
+];
+var STEPS = ["Create an app on Feishu Open Platform", "Enter credentials and test connection", "Subscribe to message events and card callbacks", "Publish an app version", "Choose the Bot represented by the robot", "Try it in Feishu"];
+var setupSteps = (mode) => mode === "http" ? ["Prepare a public event address", ...STEPS] : [...STEPS];
+var permissionJSON = (selected = []) => JSON.stringify({ scopes: { tenant: [.../* @__PURE__ */ new Set([...BASE_SCOPES, ...PRODUCTS.filter((p) => selected.includes(p.id)).flatMap((p) => p.scopes)])], user: [] } }, null, 2);
+function scopeGranted(scope, list = []) {
+ if (scope === "im:message:readonly") return ["im:message:readonly", "im:message", "im:message.history:readonly"].some((s) => list.includes(s));
+ if (scope === "im:message.reactions:write_only") return list.includes(scope) || list.includes("im:message");
+ return list.includes(scope);
+}
+function productAccess(product, list = []) {
+ if (product.scopes.every((s) => list.includes(s))) return "write";
+ if (["meeting", "task"].includes(product.id)) return "disabled";
+ return product.scopes.every((s) => list.includes(s) || list.includes(`${s}:readonly`)) ? "read" : "disabled";
+}
+function validateCredentials({ appId, appSecret, verificationToken }, mode) {
+ if (!APP_ID.test(appId ?? "")) throw new Error("App ID must be cli_ followed by 16 hexadecimal characters");
+ if (typeof appSecret !== "string" || !appSecret.trim()) throw new Error("Enter the App Secret");
+ if (!["socket", "http"].includes(mode)) throw new Error("Choose a receiving method");
+ if (mode === "http" && !verificationToken?.trim()) throw new Error("Enter the Verification Token");
+}
+function publicAddress(value) {
+ try {
+ const u = new URL(value);
+ return u.protocol === "https:" && !u.username && !u.password && !u.hash && !u.search && !/^(localhost$|127\.|10\.|0\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|\[|169\.254\.)/.test(u.hostname) && !u.hostname.endsWith(".local");
+ } catch {
+ return false;
+ }
+}
+
+// src/client/feishu-setup.js
var import_react39 = require("react");
+var button = (text2, onClick, disabled = false, variant = "") => (0, import_react39.createElement)("button", { type: "button", className: `bt-soft bt-soft-sm bt-feishu-button ${variant}`, onClick, disabled }, t(text2));
+var hint = (key) => (0, import_react39.createElement)("p", { className: "bt-set-hint" }, t(key));
+var field = (label, value, change, type = "text", disabled = false) => (0, import_react39.createElement)("label", { className: "bt-feishu-field" }, (0, import_react39.createElement)("span", {}, t(label)), (0, import_react39.createElement)("input", { className: "bt-input", type, value, disabled, autoComplete: type === "password" ? "new-password" : "off", "aria-label": t(label), onChange: (e) => change(e.target.value) }));
+function FeishuSetup({ actions, roster, onClose }) {
+ const [apps, setApps] = (0, import_react39.useState)([]), [members, setMembers] = (0, import_react39.useState)([]), [selected, setSelected] = (0, import_react39.useState)(""), [step, setStep] = (0, import_react39.useState)(0);
+ const [mode, setMode] = (0, import_react39.useState)("socket"), [appId, setAppId] = (0, import_react39.useState)(""), [secret, setSecret] = (0, import_react39.useState)(""), [token, setToken] = (0, import_react39.useState)(""), [url, setUrl] = (0, import_react39.useState)(""), [name, setName] = (0, import_react39.useState)("Feishu");
+ const [botId, setBotId] = (0, import_react39.useState)(""), [openId, setOpenId] = (0, import_react39.useState)(""), [memberId, setMemberId] = (0, import_react39.useState)(""), [extensions, setExtensions] = (0, import_react39.useState)([]), [copied, setCopied] = (0, import_react39.useState)(false);
+ const [busy, setBusy] = (0, import_react39.useState)(false), [error, setError] = (0, import_react39.useState)(""), [result, setResult] = (0, import_react39.useState)(null), [webhook, setWebhook] = (0, import_react39.useState)("");
+ const initial = (0, import_react39.useRef)(true);
+ const app = apps.find((a) => a.id === selected), steps = setupSteps(mode), offset = mode === "http" ? 1 : 0, n = step - offset;
+ const load = (0, import_react39.useCallback)(async () => {
+ const out = await actions.feishu({ operation: "list" });
+ setApps(out.apps ?? []);
+ setMembers(out.members ?? []);
+ if (initial.current) {
+ initial.current = false;
+ const queryId = new URLSearchParams(window.location.search).get("feishu-app");
+ const saved = out.apps?.find((a) => a.id === queryId) ?? out.apps?.[0];
+ if (saved) {
+ setSelected(saved.id);
+ setAppId(saved.id);
+ setMode(saved.mode);
+ setStep(saved.step ?? 0);
+ setBotId(saved.botId ?? "");
+ setUrl(saved.publicUrl ?? "");
+ setName(saved.name ?? "Feishu");
+ }
+ }
+ }, [actions]);
+ (0, import_react39.useEffect)(() => {
+ void load().catch((e) => setError(hostText(e.message)));
+ const timer = setInterval(() => {
+ void load().catch(() => {
+ });
+ }, 3e3);
+ return () => clearInterval(timer);
+ }, [load]);
+ const run = async (fn) => {
+ setBusy(true);
+ setError("");
+ try {
+ const value = await fn();
+ await load();
+ return value;
+ } catch (e) {
+ setError(hostText(e.message));
+ return void 0;
+ } finally {
+ setBusy(false);
+ }
+ };
+ const select = (id) => {
+ const saved = apps.find((a) => a.id === id);
+ setSelected(id);
+ setAppId(id);
+ setMode(saved?.mode ?? "socket");
+ setStep(saved?.step ?? 0);
+ setBotId(saved?.botId ?? "");
+ setUrl(saved?.publicUrl ?? "");
+ setName(saved?.name ?? "Feishu");
+ setSecret("");
+ setToken("");
+ setResult(null);
+ };
+ const advance = async (target) => {
+ if (selected) await run(() => actions.feishu({ operation: "configure", appId: selected, step: target, ...botId ? { botId } : {} }));
+ setStep(target);
+ };
+ const save = () => void run(async () => {
+ const out = await actions.feishu({ operation: "save", appId, appSecret: secret, verificationToken: token, mode, publicUrl: url, name, step: offset + 2 });
+ setApps(out.apps);
+ setSelected(appId);
+ setSecret("");
+ setToken("");
+ setResult(out.test);
+ setStep(offset + (out.test?.credentialError ? 1 : 2));
+ });
+ const action = (payload) => void run(() => actions.feishu({ appId: selected, ...payload }));
+ const copyPermissions = async (event) => {
+ const section = event.currentTarget.closest(".bt-feishu-permissions");
+ setError("");
+ try {
+ if (!navigator.clipboard?.writeText) throw new Error("Clipboard unavailable");
+ await navigator.clipboard.writeText(permissionJSON(extensions));
+ setCopied(true);
+ } catch {
+ const preview = section.querySelector(".bt-feishu-json"), textarea = preview.querySelector("textarea");
+ preview.open = true;
+ textarea.focus();
+ textarea.select();
+ setCopied(false);
+ setError(t("Clipboard is unavailable. Copy the selected JSON below."));
+ }
+ };
+ const permissionPicker = (0, import_react39.createElement)(
+ "section",
+ { className: "bt-feishu-permissions" },
+ (0, import_react39.createElement)("div", { className: "bt-feishu-section-head" }, (0, import_react39.createElement)("strong", {}, t("Extended permissions (Feishu tools)")), (0, import_react39.createElement)("span", { className: "bt-feishu-optional" }, t("Optional tools"))),
+ hint("Select the tools you need. The permission JSON updates automatically."),
+ (0, import_react39.createElement)("div", { className: "bt-feishu-permission-grid" }, PRODUCTS.map((p) => (0, import_react39.createElement)(
+ "label",
+ { key: p.id, className: "bt-feishu-permission", "data-checked": extensions.includes(p.id) },
+ (0, import_react39.createElement)("input", { type: "checkbox", checked: extensions.includes(p.id), onChange: (e) => {
+ setExtensions(e.target.checked ? [...extensions, p.id] : extensions.filter((x) => x !== p.id));
+ setCopied(false);
+ } }),
+ (0, import_react39.createElement)("span", {}, t(p.label))
+ ))),
+ (0, import_react39.createElement)(
+ "div",
+ { className: "bt-feishu-permission-copy" },
+ button(copied ? "Copied" : "Copy permission JSON", copyPermissions),
+ (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("Base permissions are always included."))
+ ),
+ (0, import_react39.createElement)("details", { className: "bt-feishu-json" }, (0, import_react39.createElement)("summary", {}, t("View permission JSON")), (0, import_react39.createElement)("textarea", { className: "bt-input", readOnly: true, rows: 8, value: permissionJSON(extensions), "aria-label": t("Copy permission JSON") })),
+ hint("Import this JSON in Permission management → Batch import/export. Set the contact data scope to people who will use the robot.")
+ );
+ let content;
+ if (step === 0 && mode === "http") content = (0, import_react39.createElement)("div", {}, hint("Forward only the event port to a public HTTPS address. Do not expose the FlyBot console. Leave Encrypt Key empty."), field("Public HTTPS event origin", url, setUrl));
+ else if (n === 0) content = (0, import_react39.createElement)(
+ "div",
+ {},
+ hint("Create an internal app, add the Bot capability, and apply for the permissions below. Do not configure events yet."),
+ (0, import_react39.createElement)("a", { className: "bt-feishu-external", href: "https://open.feishu.cn/app", target: "_blank", rel: "noopener noreferrer" }, t("Open Feishu Open Platform"), (0, import_react39.createElement)("span", { "aria-hidden": true }, "↗")),
+ permissionPicker
+ );
+ else if (n === 1) content = (0, import_react39.createElement)(
+ "div",
+ {},
+ hint("Credentials are encrypted on the platform and cannot be viewed after saving. Bots never receive them."),
+ hint("Leave saved credentials blank to keep them. Switching receiving methods reuses the same Feishu application and conversations."),
+ app?.mode === "http" && mode === "socket" ? hint("Switching to a long connection deletes the saved Verification Token.") : null,
+ field("Connection name", name, setName),
+ field("App ID", appId, setAppId, "text", !!selected),
+ field("App Secret", secret, setSecret, "password"),
+ mode === "http" ? field("Verification Token", token, setToken, "password") : null,
+ appId && !APP_ID.test(appId) ? hint("App ID must be cli_ followed by 16 hexadecimal characters") : null,
+ button("Save and test connection", save, busy || !APP_ID.test(appId) || !selected && !secret.trim() || mode === "http" && (!publicAddress(url) || !token && app?.mode !== "http"), "bt-feishu-primary")
+ );
+ else if (n === 2) content = (0, import_react39.createElement)(
+ "div",
+ {},
+ mode === "socket" ? (0, import_react39.createElement)(
+ "div",
+ {},
+ (0, import_react39.createElement)("strong", {}, t("Connection to Feishu")),
+ (0, import_react39.createElement)("p", { role: "status" }, t(app?.connection === "ready" ? "Connected" : app?.connection === "error" ? "Connection failed" : "Connecting…")),
+ hint("Refreshes every 3 seconds"),
+ app?.connection === "ready" ? hint("Now set Events and callbacks → Event configuration → Use long connection to receive events, then save.") : hint("Wait until connected: Feishu only allows saving the long connection subscription after FlyBot connects. Check credentials and network if it keeps waiting."),
+ hint("In Callback configuration, use the long connection and add Card action trigger (card.action.trigger).")
+ ) : (0, import_react39.createElement)("div", {}, hint("In both Event configuration and Callback configuration, select Send to developer server, use the same address below, and save."), (0, import_react39.createElement)("code", {}, `${url.replace(/\/$/, "")}/api/feishu/events/${selected}`), hint(app?.verifiedAt ? "Address verified" : "Waiting for address verification")),
+ hint("Add Receive message v2.0 (im.message.receive_v1)."),
+ hint("Without card.action.trigger, cards can display but buttons and forms do not respond. Neither test connection nor connected status checks callback subscriptions."),
+ hint("Connect each Feishu app to only one FlyBot instance; multiple instances split incoming messages."),
+ hint(app?.lastEventAt ? "Received an event" : "No event received yet")
+ );
+ else if (n === 3) content = (0, import_react39.createElement)("div", {}, hint("Create and publish a version in Version management and release. Include the required members or departments. Wait for enterprise approval if required."), hint("Permissions, Bot capability, events and callbacks take effect after publishing. Publish again after any change."), button("Test connection", () => void run(async () => {
+ const out = await actions.feishu({ operation: "test", appId: selected });
+ setResult(out);
+ }), busy));
+ else if (n === 4) content = (0, import_react39.createElement)("div", {}, hint("One Feishu application represents one Bot. Group mentions and private messages go to the selected local Bot."), (0, import_react39.createElement)("select", { className: "bt-input", "aria-label": t("Choose a Bot"), value: botId, onChange: (e) => setBotId(e.target.value) }, (0, import_react39.createElement)("option", { value: "" }, t("Choose a Bot")), ownBots(roster).filter((b) => !b.projectAgent && !b.ephemeral).map((b) => (0, import_react39.createElement)("option", { key: b.id, value: b.id }, b.name))));
+ else content = (0, import_react39.createElement)("div", {}, hint("Add the application under Group settings → Group robots. Mention it in the group, or send a private message."), hint("Ask the Bot to send a card with a submit button. Click it and confirm Submitted. Ordinary chat success does not verify card callbacks."), hint("Each group or private chat keeps one FlyBot conversation; thread replies return to the original thread."), (0, import_react39.createElement)("ul", {}, (app?.recent ?? []).map((e) => (0, import_react39.createElement)("li", { key: e.id }, `${e.text ?? ""} · ${e.status}`))));
+ const identity = (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Identity linking")), hint("Link to an existing signed-in platform member. No external members or new login accounts are created. Unlinked card submissions and meeting bookings are refused."), field("Feishu open_id", openId, setOpenId), (0, import_react39.createElement)("select", { className: "bt-input", value: memberId, "aria-label": t("Platform member"), onChange: (e) => setMemberId(e.target.value) }, (0, import_react39.createElement)("option", { value: "" }, t("Platform member")), members.map((m) => (0, import_react39.createElement)("option", { key: m.id, value: m.id }, m.name))), button("Link identity", () => action({ operation: "identity", openId, ...memberId ? { memberId } : {} }), busy || !openId), (0, import_react39.createElement)("ul", {}, (app?.identities ?? []).map((i) => (0, import_react39.createElement)("li", { key: i.openId }, `${i.openId} → ${i.memberId}`))));
+ return (0, import_react39.createElement)(
+ "section",
+ { className: "bt-feishu-setup", "aria-label": t("Connect Feishu") },
+ (0, import_react39.createElement)(
+ "header",
+ { className: "bt-feishu-header" },
+ (0, import_react39.createElement)("div", {}, (0, import_react39.createElement)("h3", {}, t("Connect Feishu")), hint("Only Feishu (open.feishu.cn) is supported; Lark is not supported.")),
+ apps.length ? (0, import_react39.createElement)("select", { className: "bt-input", value: selected, onChange: (e) => select(e.target.value), "aria-label": t("Connect Feishu") }, (0, import_react39.createElement)("option", { value: "" }, t("New connection")), apps.map((a) => (0, import_react39.createElement)("option", { key: a.id, value: a.id }, `${a.name} (${a.id})`))) : null
+ ),
+ app?.linkOnly ? (0, import_react39.createElement)("div", { className: "bt-feishu-body" }, identity, button("Later", onClose, false, "bt-feishu-quiet")) : (0, import_react39.createElement)(
+ "div",
+ { className: "bt-feishu-body" },
+ (0, import_react39.createElement)("div", { className: "bt-feishu-modes", role: "group", "aria-label": t("How to connect") }, ["socket", "http"].map((m) => (0, import_react39.createElement)("button", {
+ key: m,
+ type: "button",
+ "aria-pressed": mode === m,
+ "aria-label": t(m === "socket" ? "Long connection (recommended, no public address)" : "Event address (HTTP, needs a public address)"),
+ onClick: () => {
+ setMode(m);
+ setStep(m === "http" ? 0 : selected ? 1 : 0);
+ }
+ }, (0, import_react39.createElement)("strong", {}, t(m === "socket" ? "Long connection" : "Event address")), (0, import_react39.createElement)("small", {}, t(m === "socket" ? "Recommended · no public address" : "Requires a public HTTPS address"))))),
+ (0, import_react39.createElement)(
+ "div",
+ { className: "bt-feishu-layout" },
+ (0, import_react39.createElement)("nav", { className: "bt-feishu-progress", "aria-label": t("Connection steps") }, (0, import_react39.createElement)("ol", {}, steps.map((title, i) => (0, import_react39.createElement)("li", { key: title }, (0, import_react39.createElement)("button", {
+ type: "button",
+ "aria-label": t(title),
+ "aria-current": step === i ? "step" : void 0,
+ "data-done": i < step,
+ disabled: i > offset + 1 && !selected,
+ onClick: () => setStep(i)
+ }, (0, import_react39.createElement)("span", { className: "bt-feishu-step-number", "aria-hidden": true }, i < step ? "✓" : i + 1), (0, import_react39.createElement)("span", { className: "bt-feishu-step-label" }, t(title))))))),
+ (0, import_react39.createElement)(
+ "div",
+ { className: "bt-feishu-step" },
+ (0, import_react39.createElement)("div", { className: "bt-feishu-step-heading" }, (0, import_react39.createElement)("span", { className: "bt-feishu-eyebrow" }, t("Step {current} of {total}", { current: step + 1, total: steps.length })), (0, import_react39.createElement)("h4", {}, t(steps[step]))),
+ (0, import_react39.createElement)("div", { className: "bt-feishu-step-content" }, content),
+ result ? (0, import_react39.createElement)("p", { className: "bt-feishu-result", role: "status", "data-success": result.ok }, result.ok ? `${t("Connected")} ${result.bot ?? ""}` : hostText(result.error)) : null,
+ (0, import_react39.createElement)(
+ "footer",
+ { className: "bt-feishu-footer" },
+ button("Previous step", () => setStep(Math.max(0, step - 1)), step === 0 || busy),
+ (0, import_react39.createElement)("div", {}, button("Later", onClose, false, "bt-feishu-quiet"), step < steps.length - 1 ? button("Next", () => void advance(step + 1), busy || n === 3 && !result?.ok || n === 1 && (!selected || app?.mode !== mode) || n === 4 && !botId || mode === "http" && step === 0 && !publicAddress(url) || n > 1 && !selected, "bt-feishu-primary") : button("Finish", onClose, false, "bt-feishu-primary"))
+ )
+ )
+ ),
+ app ? (0, import_react39.createElement)(
+ "div",
+ { className: "bt-feishu-management" },
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Who may send messages")), hint("Allowed senders can send messages; this does not grant platform identity or approval authority."), (0, import_react39.createElement)("label", { className: "bt-feishu-check" }, (0, import_react39.createElement)("input", { type: "checkbox", checked: app.allowBots === true, onChange: (e) => action({ operation: "configure", allowBots: e.target.checked }) }), t("Also process other robots that mention this robot (up to 8 consecutive requests)")), field("Allow an open_id", openId, setOpenId), button("Allow", () => action({ operation: "allow", openId }), busy || !openId), (app.allowed ?? []).map((id) => (0, import_react39.createElement)("p", { key: id }, id, button("Block", () => action({ operation: "allow", openId: id, enabled: false }), busy)))),
+ identity,
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Conversation handlers")), [...new Set((app.recent ?? []).map((e) => e.chatId).filter(Boolean))].map((chatId) => (0, import_react39.createElement)("label", { key: chatId, className: "bt-q-field" }, chatId, (0, import_react39.createElement)("select", { className: "bt-input", value: app.chatBots?.[chatId] ?? "", "aria-label": `${t("Conversation handler")} ${chatId}`, onChange: (e) => action({ operation: "configure", chatId, botId: e.target.value || null }) }, (0, import_react39.createElement)("option", { value: "" }, t("Follow the default Bot")), ownBots(roster).filter((b) => !b.projectAgent && !b.ephemeral).map((b) => (0, import_react39.createElement)("option", { key: b.id, value: b.id }, b.name)))))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Permissions of the Feishu application")), permissionPicker, button("Check permissions again", () => action({ operation: "scopes" }), busy), (0, import_react39.createElement)("ul", {}, BASE_SCOPES.filter((s) => !scopeGranted(s, app.scopes)).map((s) => (0, import_react39.createElement)("li", { key: s }, s)))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Feishu tools")), ownBots(roster).filter((b) => !b.projectAgent && !b.ephemeral).map((b) => (0, import_react39.createElement)("fieldset", { key: b.id }, (0, import_react39.createElement)("legend", {}, b.name), PRODUCTS.map((p) => (0, import_react39.createElement)(
+ "label",
+ { key: p.id, className: "bt-q-field" },
+ t(p.label),
+ productAccess(p, app.scopes) !== "write" ? (0, import_react39.createElement)("small", {}, t(productAccess(p, app.scopes) === "read" ? "App has read-only permission" : "App permission not granted")) : null,
+ (0, import_react39.createElement)("select", { className: "bt-input", "aria-label": `${b.name} ${t(p.label)}`, value: app.grants?.[b.id]?.[p.id] ?? "disabled", onChange: (e) => action({ operation: "grant", botId: b.id, product: p.id, mode: e.target.value }) }, [["disabled", "Disabled"], ["read", "Read only"], ["ask", "Read/write, ask before writes"], ["write", "Read/write"]].map(([v, label]) => (0, import_react39.createElement)("option", { key: v, value: v }, t(label))))
+ ))))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Diagnostics")), (0, import_react39.createElement)("ul", {}, (app.diagnostics ?? []).map((d, i) => (0, import_react39.createElement)("li", { key: i }, `${d.kind}: ${hostText(d.message)} ${d.code ?? ""} ${d.detail ?? ""}`)))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Delivery records")), (app.outbox ?? []).map((o) => (0, import_react39.createElement)("p", { key: o.id }, `${o.id}: ${o.status}`, o.status === "failed" ? button("Try again", () => action({ operation: "retry", outboxId: o.id })) : null))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Files")), (app.files ?? []).map((file) => button(file.name, () => void run(async () => {
+ const value = await actions.feishu({ operation: "attachment", appId: app.id, attachmentId: file.id });
+ const bytes = Uint8Array.from(atob(value.content_base64), (c) => c.charCodeAt(0));
+ const href = URL.createObjectURL(new Blob([bytes]));
+ const a = Object.assign(document.createElement("a"), { href, download: value.name ?? file.name });
+ a.click();
+ setTimeout(() => URL.revokeObjectURL(href), 1e4);
+ })))),
+ (0, import_react39.createElement)("details", {}, (0, import_react39.createElement)("summary", {}, t("Cards")), (app.cards ?? []).map((c) => (0, import_react39.createElement)(CardPanel, { key: c.id, card: c, action }))),
+ button("Delete connection", () => void run(async () => {
+ await actions.feishu({ operation: "delete", appId: selected });
+ select("");
+ }), busy)
+ ) : null
+ ),
+ !app ? (0, import_react39.createElement)("details", { className: "bt-feishu-webhook" }, (0, import_react39.createElement)("summary", {}, t("Custom bot webhook")), field("Webhook URL", webhook, setWebhook, "password"), button("Connect", () => void run(() => actions.connectorConnect("feishu", { mode: "webhook", credentials: { webhook } })), busy || !webhook)) : null,
+ error ? (0, import_react39.createElement)("p", { className: "bt-feishu-error", role: "alert" }, error) : null
+ );
+}
+function CardPanel({ card, action }) {
+ const [fields, setFields] = (0, import_react39.useState)({});
+ return (0, import_react39.createElement)(
+ "article",
+ {},
+ (0, import_react39.createElement)("strong", {}, card.card.title ?? "FlyBot"),
+ (card.card.blocks ?? []).map((b, i) => b.type === "input" ? field(b.label ?? b.name, fields[b.name] ?? "", (value) => setFields({ ...fields, [b.name]: value })) : (0, import_react39.createElement)("pre", { key: i }, b.text ?? JSON.stringify(b))),
+ (card.card.actions ?? []).map((a) => button(a.label ?? a.id, () => action({ operation: "card-action", cardId: card.id, action: a.id, fields }), card.closed))
+ );
+}
+
+// src/client/connectors.js
+var import_react40 = require("react");
var TOKEN_URL = "https://github.com/settings/personal-access-tokens/new";
var COMPOSIO_KEY_URL = "https://platform.composio.dev/";
var FEISHU_WEBHOOK_URL = "https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot";
@@ -17939,17 +18425,17 @@ var APPS = [
["youtube", "YouTube"]
];
var appName = (slug) => APPS.find(([id]) => id === slug)?.[1] ?? slug;
-var GitHubMark = () => (0, import_react39.createElement)(
+var GitHubMark = () => (0, import_react40.createElement)(
"svg",
{ width: 20, height: 20, viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": true },
- (0, import_react39.createElement)("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" })
+ (0, import_react40.createElement)("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" })
);
-var FeishuMark = () => (0, import_react39.createElement)(
+var FeishuMark = () => (0, import_react40.createElement)(
"svg",
{ width: 20, height: 20, viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": true },
- (0, import_react39.createElement)("path", { d: "M3.2 6.6c3 .1 6.4 1.5 8.6 3.9-1.9.4-3.5 1.4-4.7 2.9-1.9-.6-3.4-1.9-3.9-3.6-.2-.7-.2-1.5 0-3.2z" }),
- (0, import_react39.createElement)("path", { d: "M16.8 5.4c-2.9.2-5.6 1.5-7.4 3.4 1.7 1.2 3.1 2.8 3.9 4.9 2.2-1.1 3.8-3.2 4-5.6.1-.9-.1-1.9-.4-2.7z" }),
- (0, import_react39.createElement)("path", { d: "M8.6 12.1c.9.7 1.7 1.6 2.2 2.7-1.1.2-2.3 0-3.3-.6.2-.8.6-1.5 1.1-2.1z" })
+ (0, import_react40.createElement)("path", { d: "M3.2 6.6c3 .1 6.4 1.5 8.6 3.9-1.9.4-3.5 1.4-4.7 2.9-1.9-.6-3.4-1.9-3.9-3.6-.2-.7-.2-1.5 0-3.2z" }),
+ (0, import_react40.createElement)("path", { d: "M16.8 5.4c-2.9.2-5.6 1.5-7.4 3.4 1.7 1.2 3.1 2.8 3.9 4.9 2.2-1.1 3.8-3.2 4-5.6.1-.9-.1-1.9-.4-2.7z" }),
+ (0, import_react40.createElement)("path", { d: "M8.6 12.1c.9.7 1.7 1.6 2.2 2.7-1.1.2-2.3 0-3.3-.6.2-.8.6-1.5 1.1-2.1z" })
);
var MARKS = { github: GitHubMark, composio: ConnectorIcon, feishu: FeishuMark };
var ABOUT = {
@@ -17969,11 +18455,11 @@ function statusText2(connector) {
}
function CredentialField({ credential, value, onChange, onEnter, autoFocus }) {
const label = t(credential.label);
- if (credential.masked) return (0, import_react39.createElement)(MaskedInput, { value, onChange, onEnter, label, autoFocus });
- return (0, import_react39.createElement)(
+ if (credential.masked) return (0, import_react40.createElement)(MaskedInput, { value, onChange, onEnter, label, autoFocus });
+ return (0, import_react40.createElement)(
"label",
{ className: "bt-q-field" },
- (0, import_react39.createElement)("input", {
+ (0, import_react40.createElement)("input", {
className: "bt-input",
type: "text",
value,
@@ -17989,31 +18475,31 @@ function CredentialField({ credential, value, onChange, onEnter, autoFocus }) {
);
}
function AllowedSenders({ connector, actions, run, busy }) {
- const [openId, setOpenId] = (0, import_react39.useState)("");
+ const [openId, setOpenId] = (0, import_react40.useState)("");
const allowed = connector.allowed ?? [];
const refused = connector.inbound?.refusedSenders ?? [];
const allow = (id) => void run(actions.connectorAllow(connector.id, id));
- return (0, import_react39.createElement)(
+ return (0, import_react40.createElement)(
"div",
{ className: "bt-connector-allowed" },
- (0, import_react39.createElement)("span", { className: "bt-connector-person-title" }, t("Who may talk to the Bots")),
- allowed.length === 0 && refused.length === 0 ? (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("Nobody yet. A message from anyone else starts no turn.")) : null,
- allowed.map((entry) => (0, import_react39.createElement)(
+ (0, import_react40.createElement)("span", { className: "bt-connector-person-title" }, t("Who may talk to the Bots")),
+ allowed.length === 0 && refused.length === 0 ? (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("Nobody yet. A message from anyone else starts no turn.")) : null,
+ allowed.map((entry) => (0, import_react40.createElement)(
"div",
{ key: entry.openId, className: "bt-connector-person" },
- (0, import_react39.createElement)("span", { className: "bt-connector-person-name" }, entry.name ?? entry.openId),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorBlock(connector.id, entry.openId)) }, t("Block"))
+ (0, import_react40.createElement)("span", { className: "bt-connector-person-name" }, entry.name ?? entry.openId),
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorBlock(connector.id, entry.openId)) }, t("Block"))
)),
- refused.map((entry) => (0, import_react39.createElement)(
+ refused.map((entry) => (0, import_react40.createElement)(
"div",
{ key: entry.openId, className: "bt-connector-person" },
- (0, import_react39.createElement)("span", { className: "bt-connector-person-name" }, entry.name ?? entry.openId),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => allow(entry.openId) }, t("Allow"))
+ (0, import_react40.createElement)("span", { className: "bt-connector-person-name" }, entry.name ?? entry.openId),
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => allow(entry.openId) }, t("Allow"))
)),
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form-row" },
- (0, import_react39.createElement)("input", {
+ (0, import_react40.createElement)("input", {
className: "bt-input",
type: "text",
value: openId,
@@ -18028,7 +18514,7 @@ function AllowedSenders({ connector, actions, run, busy }) {
}
}
}),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || openId.trim() === "", onClick: () => {
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || openId.trim() === "", onClick: () => {
allow(openId.trim());
setOpenId("");
} }, t("Allow"))
@@ -18038,20 +18524,20 @@ function AllowedSenders({ connector, actions, run, busy }) {
var APP_STATUS = { ready: () => t("Ready"), "sign-in": () => t("Needs sign-in") };
function AppChip({ name, status, onRemove }) {
const label = APP_STATUS[status]?.();
- return (0, import_react39.createElement)(
+ return (0, import_react40.createElement)(
"button",
{ type: "button", className: "bt-state bt-app-chip", "aria-pressed": true, "data-status": status ?? "unknown", title: t("Remove {app}", { app: name }), onClick: onRemove },
name,
- label ? (0, import_react39.createElement)("span", { className: "bt-app-status" }, ` · ${label}`) : null
+ label ? (0, import_react40.createElement)("span", { className: "bt-app-status" }, ` · ${label}`) : null
);
}
function AppPicker({ apps, onChange, search, statuses = {} }) {
- const [query, setQuery] = (0, import_react39.useState)("");
- const [found, setFound] = (0, import_react39.useState)(null);
- const [failed, setFailed] = (0, import_react39.useState)(null);
- const names = (0, import_react39.useRef)(new Map(APPS));
- const asked = (0, import_react39.useRef)(0);
- (0, import_react39.useEffect)(() => {
+ const [query, setQuery] = (0, import_react40.useState)("");
+ const [found, setFound] = (0, import_react40.useState)(null);
+ const [failed, setFailed] = (0, import_react40.useState)(null);
+ const names = (0, import_react40.useRef)(new Map(APPS));
+ const asked = (0, import_react40.useRef)(0);
+ (0, import_react40.useEffect)(() => {
const text2 = query.trim();
if (text2 === "" || search === void 0) {
setFound(null);
@@ -18078,13 +18564,13 @@ function AppPicker({ apps, onChange, search, statuses = {} }) {
const needle = query.trim().toLowerCase();
const local = APPS.filter(([slug, name]) => needle === "" || slug.includes(needle) || name.toLowerCase().includes(needle)).map(([slug, name]) => ({ slug, name }));
const results = (found ?? local).filter((app) => !picked.has(app.slug));
- return (0, import_react39.createElement)(
+ return (0, import_react40.createElement)(
"div",
{ className: "bt-connector-apps" },
- apps.length > 0 ? (0, import_react39.createElement)("div", { className: "bt-states", "aria-label": t("Picked apps") }, apps.map((slug) => (0, import_react39.createElement)(AppChip, { key: slug, name: nameOf(slug), status: statuses[slug], onRemove: () => onChange(apps.filter((app) => app !== slug)) }))) : null,
- (0, import_react39.createElement)("input", { className: "bt-input", type: "search", value: query, spellCheck: false, "aria-label": t("Search apps"), placeholder: t("Search Composio apps"), onChange: (event) => setQuery(event.target.value) }),
- failed ? (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("Could not search Composio: {error}", { error: failed })) : null,
- (0, import_react39.createElement)("div", { className: "bt-states", "aria-label": t("Apps to add") }, results.length === 0 ? (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("No apps match")) : results.map((app) => (0, import_react39.createElement)("button", { key: app.slug, type: "button", className: "bt-state", "aria-pressed": false, onClick: () => {
+ apps.length > 0 ? (0, import_react40.createElement)("div", { className: "bt-states", "aria-label": t("Picked apps") }, apps.map((slug) => (0, import_react40.createElement)(AppChip, { key: slug, name: nameOf(slug), status: statuses[slug], onRemove: () => onChange(apps.filter((app) => app !== slug)) }))) : null,
+ (0, import_react40.createElement)("input", { className: "bt-input", type: "search", value: query, spellCheck: false, "aria-label": t("Search apps"), placeholder: t("Search Composio apps"), onChange: (event) => setQuery(event.target.value) }),
+ failed ? (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("Could not search Composio: {error}", { error: failed })) : null,
+ (0, import_react40.createElement)("div", { className: "bt-states", "aria-label": t("Apps to add") }, results.length === 0 ? (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("No apps match")) : results.map((app) => (0, import_react40.createElement)("button", { key: app.slug, type: "button", className: "bt-state", "aria-pressed": false, onClick: () => {
names.current.set(app.slug, app.name);
onChange([...apps, app.slug]);
} }, app.name)))
@@ -18092,22 +18578,22 @@ function AppPicker({ apps, onChange, search, statuses = {} }) {
}
function AppStatusList({ apps, statuses }) {
if (apps.length === 0 || Object.keys(statuses).length === 0) return null;
- return (0, import_react39.createElement)("ul", { className: "bt-connector-app-list", "aria-label": t("App status") }, apps.map((slug) => (0, import_react39.createElement)(
+ return (0, import_react40.createElement)("ul", { className: "bt-connector-app-list", "aria-label": t("App status") }, apps.map((slug) => (0, import_react40.createElement)(
"li",
{ key: slug, className: "bt-connector-app", "data-status": statuses[slug] ?? "unknown" },
- (0, import_react39.createElement)("span", { className: "bt-connector-app-name" }, appName(slug)),
- (0, import_react39.createElement)("span", { className: "bt-app-status" }, APP_STATUS[statuses[slug]]?.() ?? "")
+ (0, import_react40.createElement)("span", { className: "bt-connector-app-name" }, appName(slug)),
+ (0, import_react40.createElement)("span", { className: "bt-app-status" }, APP_STATUS[statuses[slug]]?.() ?? "")
)));
}
function ConnectorRow({ connector, roster, actions }) {
- const [form, setForm] = (0, import_react39.useState)(false);
- const [bots, setBots] = (0, import_react39.useState)(false);
- const [token, setToken] = (0, import_react39.useState)("");
- const [apps, setApps] = (0, import_react39.useState)(() => connector.apps ?? []);
- const [picking, setPicking] = (0, import_react39.useState)(false);
- const [busy, setBusy] = (0, import_react39.useState)(false);
- const [error, setError] = (0, import_react39.useState)(null);
- const [message, setMessage] = (0, import_react39.useState)("");
+ const [form, setForm] = (0, import_react40.useState)(() => !!(connector.id === "feishu" && actions.feishu && typeof window !== "undefined" && window.location && new URLSearchParams(window.location.search).has("feishu-app")));
+ const [bots, setBots] = (0, import_react40.useState)(false);
+ const [token, setToken] = (0, import_react40.useState)("");
+ const [apps, setApps] = (0, import_react40.useState)(() => connector.apps ?? []);
+ const [picking, setPicking] = (0, import_react40.useState)(false);
+ const [busy, setBusy] = (0, import_react40.useState)(false);
+ const [error, setError] = (0, import_react40.useState)(null);
+ const [message, setMessage] = (0, import_react40.useState)("");
const run = (task, after) => {
setBusy(true);
setError(null);
@@ -18118,16 +18604,17 @@ function ConnectorRow({ connector, roster, actions }) {
const gateway = connector.id === "composio";
const sender = connector.kind === "sender";
const channel = connector.kind === "channel";
+ const guided = channel && actions.feishu;
const modes = connector.modes ?? [];
- const [mode, setMode] = (0, import_react39.useState)(() => connector.mode ?? modes[0]?.id);
- const [values, setValues] = (0, import_react39.useState)({});
+ const [mode, setMode] = (0, import_react40.useState)(() => connector.mode ?? modes[0]?.id);
+ const [values, setValues] = (0, import_react40.useState)({});
const chosen = modes.find((entry) => entry.id === mode) ?? modes[0];
- const field = (name) => values[name] ?? "";
+ const field2 = (name) => values[name] ?? "";
const setField = (name, value) => setValues((current) => ({ ...current, [name]: value }));
- const filled = chosen !== void 0 && chosen.credentials.every((credential) => field(credential.name).trim() !== "");
- const [statuses, setStatuses] = (0, import_react39.useState)({});
+ const filled = chosen !== void 0 && chosen.credentials.every((credential) => field2(credential.name).trim() !== "");
+ const [statuses, setStatuses] = (0, import_react40.useState)({});
const appsKey = (connector.apps ?? []).join(",");
- (0, import_react39.useEffect)(() => {
+ (0, import_react40.useEffect)(() => {
if (!gateway || connector.state !== "ready" || appsKey === "" || actions.connectorAppStatus === void 0) {
setStatuses({});
return void 0;
@@ -18142,12 +18629,12 @@ function ConnectorRow({ connector, roster, actions }) {
live = false;
};
}, [gateway, connector.state, appsKey, picking]);
- const search = (0, import_react39.useCallback)((query) => actions.connectorAppSearch(connector.id, query, connector.state === "off" ? token : void 0), [connector.id, connector.state, token]);
+ const search = (0, import_react40.useCallback)((query) => actions.connectorAppSearch(connector.id, query, connector.state === "off" ? token : void 0), [connector.id, connector.state, token]);
const connect = () => {
if (busy) return;
if (channel) {
if (chosen === void 0 || !filled) return;
- const credentials = Object.fromEntries(chosen.credentials.map((credential) => [credential.name, field(credential.name)]));
+ const credentials = Object.fromEntries(chosen.credentials.map((credential) => [credential.name, field2(credential.name)]));
void run(actions.connectorConnect(connector.id, { mode: chosen.id, credentials }), () => {
setValues({});
setForm(false);
@@ -18176,52 +18663,54 @@ function ConnectorRow({ connector, roster, actions }) {
const canPost = sender || channel && connector.mode === "webhook";
const perBot = !sender && (!channel || connector.mode === "app");
const Mark = MARKS[connector.id];
- const row = (0, import_react39.useRef)(null);
+ const row = (0, import_react40.useRef)(null);
useMorph(row, `${form}:${picking}:${bots}:${error !== null}:${connector.state}:${mode}`);
- return (0, import_react39.createElement)(
+ return (0, import_react40.createElement)(
"div",
{ ref: row, className: "bt-connector", "data-state": connector.state },
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)(
"div",
{ className: "bt-connector-head" },
- (0, import_react39.createElement)("span", { className: "bt-connector-mark" }, Mark ? (0, import_react39.createElement)(Mark) : null),
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)("span", { className: "bt-connector-mark" }, Mark ? (0, import_react40.createElement)(Mark) : null),
+ (0, import_react40.createElement)(
"span",
{ className: "bt-connector-text" },
- (0, import_react39.createElement)("span", { className: "bt-connector-name" }, connector.name),
- (0, import_react39.createElement)("span", { className: "bt-connector-status" }, statusText2(connector))
+ (0, import_react40.createElement)("span", { className: "bt-connector-name" }, connector.name),
+ (0, import_react40.createElement)("span", { className: "bt-connector-status" }, statusText2(connector))
),
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)(
"span",
{ className: "bt-connector-actions" },
- connector.state === "error" ? (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorRetry(connector.id)) }, t("Try again")) : null,
- on && gateway && !picking ? (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
+ connector.state === "error" ? (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorRetry(connector.id)) }, t("Try again")) : null,
+ on && gateway && !picking ? (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
setApps(connector.apps ?? []);
setPicking(true);
} }, t("Choose apps")) : null,
- on && perBot ? (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", "aria-expanded": bots, onClick: () => setBots((value) => !value) }, bots ? t("Done") : t("Choose Bots")) : null,
- on ? (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorDisconnect(connector.id)) }, t("Disconnect")) : form ? null : (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => setForm(true) }, t("Connect"))
+ on && perBot ? (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", "aria-expanded": bots, onClick: () => setBots((value) => !value) }, bots ? t("Done") : t("Choose Bots")) : null,
+ guided ? (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", "aria-expanded": form, onClick: () => setForm((value) => !value) }, t("Connect")) : null,
+ on ? (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => void run(actions.connectorDisconnect(connector.id)) }, t("Disconnect")) : form || guided ? null : (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => setForm(true) }, t("Connect"))
)
),
- on && gateway && !picking ? (0, import_react39.createElement)(AppStatusList, { apps: connector.apps ?? [], statuses }) : null,
- on && perBot ? (0, import_react39.createElement)("span", { className: "bt-connector-uses" }, usageText(roster, connector.id)) : null,
- on && bots ? (0, import_react39.createElement)(ConnectorBots, { connector, roster, actions, run, SwitchRow }) : null,
- on && channel && connector.mode === "app" ? (0, import_react39.createElement)(AllowedSenders, { connector, actions, run, busy }) : null,
- on && canPost ? (0, import_react39.createElement)(
+ on && gateway && !picking ? (0, import_react40.createElement)(AppStatusList, { apps: connector.apps ?? [], statuses }) : null,
+ on && perBot ? (0, import_react40.createElement)("span", { className: "bt-connector-uses" }, usageText(roster, connector.id)) : null,
+ on && bots ? (0, import_react40.createElement)(ConnectorBots, { connector, roster, actions, run, SwitchRow }) : null,
+ on && channel && !connector.managed && connector.mode === "app" ? (0, import_react40.createElement)(AllowedSenders, { connector, actions, run, busy }) : null,
+ on && canPost ? (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form" },
- (0, import_react39.createElement)("label", { className: "bt-q-field" }, (0, import_react39.createElement)("input", { className: "bt-input", type: "text", value: message, "aria-label": t("Message to send to Feishu"), placeholder: t("Type a message for the Feishu group"), onChange: (event) => setMessage(event.target.value) })),
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)("label", { className: "bt-q-field" }, (0, import_react40.createElement)("input", { className: "bt-input", type: "text", value: message, "aria-label": t("Message to send to Feishu"), placeholder: t("Type a message for the Feishu group"), onChange: (event) => setMessage(event.target.value) })),
+ (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form-row" },
- (0, import_react39.createElement)("span", { className: "bt-connector-link" }),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || message.trim() === "" || actions.connectorSend === void 0, onClick: () => void run(actions.connectorSend(connector.id, message), () => setMessage("")) }, t("Send"))
+ (0, import_react40.createElement)("span", { className: "bt-connector-link" }),
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || message.trim() === "" || actions.connectorSend === void 0, onClick: () => void run(actions.connectorSend(connector.id, message), () => setMessage("")) }, t("Send"))
)
) : null,
- !on && form ? (0, import_react39.createElement)(
+ channel && form && actions.feishu ? (0, import_react40.createElement)(FeishuSetup, { actions, roster, onClose: () => setForm(false) }) : null,
+ !on && form && (!channel || !actions.feishu) ? (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form" },
- channel ? (0, import_react39.createElement)("div", { className: "bt-states", role: "group", "aria-label": t("How to connect") }, modes.map((entry) => (0, import_react39.createElement)("button", {
+ channel ? (0, import_react40.createElement)("div", { className: "bt-states", role: "group", "aria-label": t("How to connect") }, modes.map((entry) => (0, import_react40.createElement)("button", {
key: entry.id,
type: "button",
className: "bt-state",
@@ -18232,67 +18721,67 @@ function ConnectorRow({ connector, roster, actions }) {
setError(null);
}
}, t(entry.label)))) : null,
- channel ? (chosen?.credentials ?? []).map((credential, index) => (0, import_react39.createElement)(CredentialField, {
+ channel ? (chosen?.credentials ?? []).map((credential, index) => (0, import_react40.createElement)(CredentialField, {
key: credential.name,
credential,
- value: field(credential.name),
+ value: field2(credential.name),
onChange: (value) => setField(credential.name, value),
onEnter: connect,
autoFocus: index === 0
- })) : (0, import_react39.createElement)("label", { className: "bt-q-field bt-secret-field" }, (0, import_react39.createElement)(MaskedInput, { value: token, onChange: setToken, onEnter: connect, label: gateway ? t("Composio API key") : t("GitHub token"), autoFocus: true })),
- gateway ? (0, import_react39.createElement)(AppPicker, { apps, onChange: setApps, search: token.trim() === "" ? void 0 : search }) : null,
- (0, import_react39.createElement)(
+ })) : (0, import_react40.createElement)("label", { className: "bt-q-field bt-secret-field" }, (0, import_react40.createElement)(MaskedInput, { value: token, onChange: setToken, onEnter: connect, label: gateway ? t("Composio API key") : t("GitHub token"), autoFocus: true })),
+ gateway ? (0, import_react40.createElement)(AppPicker, { apps, onChange: setApps, search: token.trim() === "" ? void 0 : search }) : null,
+ (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form-row" },
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)(
"a",
{ className: "bt-connector-link", href: channel ? chosen?.link ?? FEISHU_WEBHOOK_URL : gateway ? COMPOSIO_KEY_URL : TOKEN_URL, target: "_blank", rel: "noopener noreferrer" },
channel ? t(chosen?.linkLabel ?? "Get a webhook URL in Feishu") : gateway ? t("Get a Composio API key") : t("Create a token on GitHub")
),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
setForm(false);
setToken("");
setValues({});
setError(null);
} }, t("Cancel")),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || (channel ? !filled : token.trim() === ""), onClick: connect }, busy ? t("Connecting…") : t("Connect"))
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || (channel ? !filled : token.trim() === ""), onClick: connect }, busy ? t("Connecting…") : t("Connect"))
)
) : null,
- on && gateway && picking ? (0, import_react39.createElement)(
+ on && gateway && picking ? (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form" },
- (0, import_react39.createElement)(AppPicker, { apps, onChange: setApps, search, statuses }),
- (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("The first time a Bot uses an app, it shows a sign-in link in the chat.")),
- (0, import_react39.createElement)(
+ (0, import_react40.createElement)(AppPicker, { apps, onChange: setApps, search, statuses }),
+ (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("The first time a Bot uses an app, it shows a sign-in link in the chat.")),
+ (0, import_react40.createElement)(
"div",
{ className: "bt-connector-form-row" },
- (0, import_react39.createElement)("span", { className: "bt-connector-link" }),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
+ (0, import_react40.createElement)("span", { className: "bt-connector-link" }),
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy, onClick: () => {
setPicking(false);
setError(null);
} }, t("Cancel")),
- (0, import_react39.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || apps.length === 0, onClick: saveApps }, busy ? t("Connecting…") : t("Save"))
+ (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: busy || apps.length === 0, onClick: saveApps }, busy ? t("Connecting…") : t("Save"))
)
) : null,
- error ? (0, import_react39.createElement)("div", { className: "bt-connector-error", role: "alert" }, error) : null
+ error ? (0, import_react40.createElement)("div", { className: "bt-connector-error", role: "alert" }, error) : null
);
}
function ConnectorsPage({ roster, actions }) {
const list = roster?.connectors ?? [];
- return (0, import_react39.createElement)(
+ return (0, import_react40.createElement)(
"section",
{ className: "bt-set-section" },
- (0, import_react39.createElement)("div", { className: "bt-set-card bt-connectors-card" }, list.length === 0 ? (0, import_react39.createElement)("div", { className: "bt-set-row" }, (0, import_react39.createElement)("span", { className: "bt-set-hint" }, t("No connectors"))) : list.map((connector) => (0, import_react39.createElement)(ConnectorRow, { key: connector.id, connector, roster, actions })))
+ (0, import_react40.createElement)("div", { className: "bt-set-card bt-connectors-card" }, list.length === 0 ? (0, import_react40.createElement)("div", { className: "bt-set-row" }, (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("No connectors"))) : list.map((connector) => (0, import_react40.createElement)(ConnectorRow, { key: connector.id, connector, roster, actions })))
);
}
// src/client/feedback.js
-var import_react40 = require("react");
-var FeedbackIcon = () => (0, import_react40.createElement)(
+var import_react41 = require("react");
+var FeedbackIcon = () => (0, import_react41.createElement)(
"svg",
{ width: 15, height: 15, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true },
- (0, import_react40.createElement)("path", { d: "M4 4.5h12a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H9l-3.5 3v-3H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1z" }),
- (0, import_react40.createElement)("path", { d: "M10 7v2.6M10 11.4h.01" })
+ (0, import_react41.createElement)("path", { d: "M4 4.5h12a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H9l-3.5 3v-3H4a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1z" }),
+ (0, import_react41.createElement)("path", { d: "M10 7v2.6M10 11.4h.01" })
);
function download(name, text2) {
const url = URL.createObjectURL(new Blob([text2], { type: "text/plain;charset=utf-8" }));
@@ -18315,16 +18804,16 @@ function entrySummary(entry) {
}
var SOURCES = { turn: "Model call", host: "FlyBot", api: "FlyBot", browser: "This window" };
function FeedbackPage({ actions, run, Section, Row: Row4 }) {
- const [what, setWhat] = (0, import_react40.useState)("");
- const [report, setReport] = (0, import_react40.useState)(null);
- const [preview, setPreview] = (0, import_react40.useState)(false);
- const [note, setNote] = (0, import_react40.useState)("");
+ const [what, setWhat] = (0, import_react41.useState)("");
+ const [report, setReport] = (0, import_react41.useState)(null);
+ const [preview, setPreview] = (0, import_react41.useState)(false);
+ const [note, setNote] = (0, import_react41.useState)("");
const fetchReport = () => actions.diagnostics({ client: clientFacts(), clientErrors: clientErrors() }).then((next) => {
setReport(next);
return next;
});
const load = () => fetchReport().then(() => void 0);
- (0, import_react40.useEffect)(() => {
+ (0, import_react41.useEffect)(() => {
void run(load());
}, []);
const copyReport = () => run(fetchReport().then(async (next) => {
@@ -18332,7 +18821,7 @@ function FeedbackPage({ actions, run, Section, Row: Row4 }) {
setNote(copied ? t("Copied the diagnostics.") : t("Could not copy. Select the text below and copy it."));
if (!copied) setPreview(true);
}));
- const [issueLink, setIssueLink] = (0, import_react40.useState)(null);
+ const [issueLink, setIssueLink] = (0, import_react41.useState)(null);
const openIssue = () => {
const win = window.open("", "_blank");
if (win !== null) win.opener = null;
@@ -18360,59 +18849,59 @@ function FeedbackPage({ actions, run, Section, Row: Row4 }) {
const total = (report?.total ?? 0) + browserErrors.length;
const shown = entries2.slice(0, 8);
return [
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
Section,
{ key: "report", title: t("Report a problem") },
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
"div",
{ className: "bt-set-row bt-set-paste bt-fb-what" },
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
"label",
{ className: "bt-set-copy", htmlFor: "bt-fb-what" },
- (0, import_react40.createElement)("span", null, t("What happened?")),
- (0, import_react40.createElement)("span", { className: "bt-set-hint" }, t("What you did, what you expected, and what happened instead. It goes into the issue."))
+ (0, import_react41.createElement)("span", null, t("What happened?")),
+ (0, import_react41.createElement)("span", { className: "bt-set-hint" }, t("What you did, what you expected, and what happened instead. It goes into the issue."))
),
- (0, import_react40.createElement)("textarea", { id: "bt-fb-what", className: "bt-input bt-input-area", value: what, maxLength: WHAT_MAX, placeholder: t("For example: I asked Writer in the group chat and it showed an error."), onChange: (event) => setWhat(event.target.value) })
+ (0, import_react41.createElement)("textarea", { id: "bt-fb-what", className: "bt-input bt-input-area", value: what, maxLength: WHAT_MAX, placeholder: t("For example: I asked Writer in the group chat and it showed an error."), onChange: (event) => setWhat(event.target.value) })
),
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
Row4,
{ label: t("Diagnostics"), hint: t("Versions, system, models, and the latest errors. Saved keys, tokens, and your home folder are hidden.") },
- (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => setPreview(!preview), "aria-expanded": preview }, preview ? t("Hide") : t("Show")),
- (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: copyReport }, t("Copy"))
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => setPreview(!preview), "aria-expanded": preview }, preview ? t("Hide") : t("Show")),
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: copyReport }, t("Copy"))
),
- preview ? (0, import_react40.createElement)("div", { className: "bt-set-row bt-fb-preview" }, (0, import_react40.createElement)("pre", { tabIndex: 0, "aria-label": t("Diagnostics") }, report?.markdown || t("Loading…"))) : null,
- (0, import_react40.createElement)(
+ preview ? (0, import_react41.createElement)("div", { className: "bt-set-row bt-fb-preview" }, (0, import_react41.createElement)("pre", { tabIndex: 0, "aria-label": t("Diagnostics") }, report?.markdown || t("Loading…"))) : null,
+ (0, import_react41.createElement)(
Row4,
{ label: t("GitHub issue"), hint: t("Opens a new issue in the FlyBot repository with all of this filled in. Nothing is sent until you submit it there.") },
- (0, import_react40.createElement)("button", { type: "button", className: "bt-fb-primary", onClick: openIssue }, t("Report on GitHub"))
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-fb-primary", onClick: openIssue }, t("Report on GitHub"))
)
),
- note ? (0, import_react40.createElement)(
+ note ? (0, import_react41.createElement)(
"div",
{ key: "note", className: "bt-note bt-fb-note", role: "status" },
note,
- issueLink ? [" ", (0, import_react40.createElement)("a", { key: "link", href: issueLink, target: "_blank", rel: "noopener noreferrer" }, t("Open the issue"))] : null
+ issueLink ? [" ", (0, import_react41.createElement)("a", { key: "link", href: issueLink, target: "_blank", rel: "noopener noreferrer" }, t("Open the issue"))] : null
) : null,
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
Section,
{ key: "errors", title: report ? t("Recent errors · {count}", { count: total }) : t("Recent errors") },
- shown.length === 0 ? (0, import_react40.createElement)(Row4, { label: t("No errors recorded."), hint: t("Failed model calls and FlyBot problems show here, newest first.") }) : shown.map((entry, index) => (0, import_react40.createElement)(
+ shown.length === 0 ? (0, import_react41.createElement)(Row4, { label: t("No errors recorded."), hint: t("Failed model calls and FlyBot problems show here, newest first.") }) : shown.map((entry, index) => (0, import_react41.createElement)(
"div",
{ key: `${entry.time}-${index}`, className: "bt-set-row bt-fb-entry", title: entry.text },
- (0, import_react40.createElement)("span", { className: "bt-fb-dot", "data-level": entry.level, "aria-hidden": true }),
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)("span", { className: "bt-fb-dot", "data-level": entry.level, "aria-hidden": true }),
+ (0, import_react41.createElement)(
"div",
{ className: "bt-set-copy" },
- (0, import_react40.createElement)("span", { className: "bt-fb-text" }, entrySummary(entry)),
- (0, import_react40.createElement)("span", { className: "bt-set-hint" }, [whenText2(entry.time), entry.bot, entry.where, t(SOURCES[entry.source] ?? "FlyBot")].filter(Boolean).join(" · "))
+ (0, import_react41.createElement)("span", { className: "bt-fb-text" }, entrySummary(entry)),
+ (0, import_react41.createElement)("span", { className: "bt-set-hint" }, [whenText2(entry.time), entry.bot, entry.where, t(SOURCES[entry.source] ?? "FlyBot")].filter(Boolean).join(" · "))
),
- entry.code ? (0, import_react40.createElement)("span", { className: "bt-tag bt-fb-code" }, entry.status ? `${entry.code} ${entry.status}` : entry.code) : null
+ entry.code ? (0, import_react41.createElement)("span", { className: "bt-tag bt-fb-code" }, entry.status ? `${entry.code} ${entry.status}` : entry.code) : null
)),
- (0, import_react40.createElement)(
+ (0, import_react41.createElement)(
Row4,
{ label: t("Error log"), hint: t("Kept on this computer across restarts, up to about 1 MB.") },
- (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: downloadLog }, t("Download")),
- (0, import_react40.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: clearLog, disabled: !report || total === 0 }, t("Clear"))
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: downloadLog }, t("Download")),
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: clearLog, disabled: !report || total === 0 }, t("Clear"))
)
)
];
@@ -18420,8 +18909,8 @@ function FeedbackPage({ actions, run, Section, Row: Row4 }) {
var TOAST_MS = 6e3;
function ErrorToast({ useUi, actions }) {
const toast = useUi((state) => state.toast);
- const [leaving, setLeaving] = (0, import_react40.useState)(false);
- (0, import_react40.useEffect)(() => {
+ const [leaving, setLeaving] = (0, import_react41.useState)(false);
+ (0, import_react41.useEffect)(() => {
if (!toast) return void 0;
setLeaving(false);
const fade = setTimeout(() => setLeaving(true), TOAST_MS);
@@ -18433,15 +18922,15 @@ function ErrorToast({ useUi, actions }) {
}, [toast?.token]);
if (!toast) return null;
const info = toast.tone === "info";
- return (0, import_react40.createElement)(
+ return (0, import_react41.createElement)(
"div",
{ className: "bt-toast", role: info ? "status" : "alert", "data-tone": toast.tone, "data-leaving": leaving || void 0 },
- (0, import_react40.createElement)("span", { className: "bt-toast-text" }, toast.text),
- info ? null : (0, import_react40.createElement)("button", { type: "button", className: "bt-toast-link", onClick: () => {
+ (0, import_react41.createElement)("span", { className: "bt-toast-text" }, toast.text),
+ info ? null : (0, import_react41.createElement)("button", { type: "button", className: "bt-toast-link", onClick: () => {
actions.dismissToast(toast.token);
actions.openSettings("feedback");
} }, t("Details")),
- (0, import_react40.createElement)("button", { type: "button", className: "bt-icon-btn bt-toast-close", "aria-label": t("Dismiss"), onClick: () => actions.dismissToast(toast.token) }, (0, import_react40.createElement)(CloseIcon))
+ (0, import_react41.createElement)("button", { type: "button", className: "bt-icon-btn bt-toast-close", "aria-label": t("Dismiss"), onClick: () => actions.dismissToast(toast.token) }, (0, import_react41.createElement)(CloseIcon))
);
}
var FEEDBACK_CSS = `
@@ -18472,7 +18961,7 @@ var FEEDBACK_CSS = `
`;
// src/client/about.js
-var import_react41 = require("react");
+var import_react42 = require("react");
var starCount = (count) => new Intl.NumberFormat(dateLocale(), { notation: "compact", maximumFractionDigits: 1 }).format(count);
function botHint(update) {
if (update.phase === "installing") return t("Updating FlyBot core…");
@@ -18507,9 +18996,9 @@ function dshHint(dsh, shown) {
var linkProps = (href) => ({ className: "bt-soft bt-soft-sm bt-about-link", href, target: "_blank", rel: "noopener noreferrer" });
function AboutPage({ useUpdate, actions, run, Section, Row: Row4 }) {
const update = useUpdate((value) => value) ?? {};
- const [checking, setChecking] = (0, import_react41.useState)(false);
- const [stars, setStars] = (0, import_react41.useState)(null);
- (0, import_react41.useEffect)(() => {
+ const [checking, setChecking] = (0, import_react42.useState)(false);
+ const [stars, setStars] = (0, import_react42.useState)(null);
+ (0, import_react42.useEffect)(() => {
let live = true;
actions.repoStars().then((count) => {
if (live && Number.isInteger(count)) setStars(count);
@@ -18530,29 +19019,29 @@ function AboutPage({ useUpdate, actions, run, Section, Row: Row4 }) {
const dshPhase = dsh?.phase ?? "idle";
const dshNew = showsDshRow(dsh, update.app);
const dshShown = dshNew && dsh.available;
- const botControl = phase === "installed" ? null : update.available || phase === "installing" ? (0, import_react41.createElement)(
+ const botControl = phase === "installed" ? null : update.available || phase === "installing" ? (0, import_react42.createElement)(
"button",
{ type: "button", className: "bt-fb-primary", disabled: phase === "installing", onClick: () => run(actions.installUpdate()) },
phase === "installing" ? t("Updating…") : phase === "failed" ? t("Try again") : t("Update")
- ) : (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: checking || update.enabled === false, onClick: check }, checking ? t("Checking…") : t("Check for updates"));
- const dshControl = !dshNew || dshPhase === "installed" ? null : dsh.kind === "app" ? dsh.available ? (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.openAppUpdates(dsh.verified)) }, t("Open updates")) : null : dsh.available || dshPhase !== "idle" ? (0, import_react41.createElement)(
+ ) : (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", disabled: checking || update.enabled === false, onClick: check }, checking ? t("Checking…") : t("Check for updates"));
+ const dshControl = !dshNew || dshPhase === "installed" ? null : dsh.kind === "app" ? dsh.available ? (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.openAppUpdates(dsh.verified)) }, t("Open updates")) : null : dsh.available || dshPhase !== "idle" ? (0, import_react42.createElement)(
"button",
{ type: "button", className: "bt-fb-primary", disabled: dshPhase === "installing", onClick: () => run(actions.installDshUpdate()) },
dshPhase === "installing" ? t("Updating…") : dshPhase === "failed" ? t("Try again") : t("Update")
) : null;
const repo = update.repoUrl;
return [
- (0, import_react41.createElement)(
+ (0, import_react42.createElement)(
"div",
{ key: "hero", className: "bt-about-hero" },
- (0, import_react41.createElement)("span", { className: "bt-about-mark" }, (0, import_react41.createElement)(FlyBotMark, { size: 52 })),
- (0, import_react41.createElement)(
+ (0, import_react42.createElement)("span", { className: "bt-about-mark" }, (0, import_react42.createElement)(FlyBotMark, { size: 52 })),
+ (0, import_react42.createElement)(
"div",
{ className: "bt-about-copy" },
- (0, import_react41.createElement)("span", { className: "bt-about-name" }, t("FlyBot")),
- update.current ? (0, import_react41.createElement)("span", { className: "bt-about-version" }, versionLine(update)) : null
+ (0, import_react42.createElement)("span", { className: "bt-about-name" }, t("FlyBot")),
+ update.current ? (0, import_react42.createElement)("span", { className: "bt-about-version" }, versionLine(update)) : null
),
- repo ? (0, import_react41.createElement)(
+ repo ? (0, import_react42.createElement)(
"a",
{
className: "bt-star",
@@ -18562,23 +19051,23 @@ function AboutPage({ useUpdate, actions, run, Section, Row: Row4 }) {
title: t("Star FlyBot on GitHub"),
"aria-label": stars === null ? t("Star FlyBot on GitHub") : `${t("Star FlyBot on GitHub")} · ${t("{count} stars", { count: stars })}`
},
- (0, import_react41.createElement)("span", { className: "bt-star-main" }, (0, import_react41.createElement)("span", { className: "bt-star-icon" }, (0, import_react41.createElement)(StarLineIcon)), "Star"),
- stars === null ? null : (0, import_react41.createElement)("span", { className: "bt-star-count" }, starCount(stars))
+ (0, import_react42.createElement)("span", { className: "bt-star-main" }, (0, import_react42.createElement)("span", { className: "bt-star-icon" }, (0, import_react42.createElement)(StarLineIcon)), "Star"),
+ stars === null ? null : (0, import_react42.createElement)("span", { className: "bt-star-count" }, starCount(stars))
) : null
),
- repo ? (0, import_react41.createElement)("p", { key: "ask", className: "bt-about-ask" }, t("If FlyBot helps you, a star on GitHub helps more people find it.")) : null,
- (0, import_react41.createElement)(
+ repo ? (0, import_react42.createElement)("p", { key: "ask", className: "bt-about-ask" }, t("If FlyBot helps you, a star on GitHub helps more people find it.")) : null,
+ (0, import_react42.createElement)(
Section,
{ key: "updates", title: t("Updates") },
- (0, import_react41.createElement)(Row4, { label: t("FlyBot core"), hint: botHint(update) }, botControl, update.available && update.notesUrl ? (0, import_react41.createElement)("a", linkProps(update.notesUrl), t("What's new")) : null),
- dsh?.current ? (0, import_react41.createElement)(Row4, { label: t("DeepSeek Harness (underlying)"), hint: dshHint(dsh, dshShown) }, dshControl) : null
+ (0, import_react42.createElement)(Row4, { label: t("FlyBot core"), hint: botHint(update) }, botControl, update.available && update.notesUrl ? (0, import_react42.createElement)("a", linkProps(update.notesUrl), t("What's new")) : null),
+ dsh?.current ? (0, import_react42.createElement)(Row4, { label: t("DeepSeek Harness (underlying)"), hint: dshHint(dsh, dshShown) }, dshControl) : null
),
- (0, import_react41.createElement)(
+ (0, import_react42.createElement)(
Section,
{ key: "links", title: t("Links") },
- repo ? (0, import_react41.createElement)(Row4, { label: t("Source code"), hint: repo.replace(/^https:\/\//, "") }, (0, import_react41.createElement)("a", linkProps(repo), (0, import_react41.createElement)(GitHubMark), t("Open"))) : null,
- update.notesUrl ? (0, import_react41.createElement)(Row4, { label: t("Release notes") }, (0, import_react41.createElement)("a", linkProps(update.notesUrl), t("Open"))) : null,
- (0, import_react41.createElement)(Row4, { label: t("Report a problem") }, (0, import_react41.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => actions.openSettings("feedback") }, t("Open")))
+ repo ? (0, import_react42.createElement)(Row4, { label: t("Source code"), hint: repo.replace(/^https:\/\//, "") }, (0, import_react42.createElement)("a", linkProps(repo), (0, import_react42.createElement)(GitHubMark), t("Open"))) : null,
+ update.notesUrl ? (0, import_react42.createElement)(Row4, { label: t("Release notes") }, (0, import_react42.createElement)("a", linkProps(update.notesUrl), t("Open"))) : null,
+ (0, import_react42.createElement)(Row4, { label: t("Report a problem") }, (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => actions.openSettings("feedback") }, t("Open")))
)
];
}
@@ -18607,19 +19096,19 @@ var ABOUT_CSS = `
`;
// src/client/settings.js
-var import_react42 = require("react");
+var import_react43 = require("react");
var capitalize2 = (word) => word[0].toUpperCase() + word.slice(1);
var SETTINGS_PAGES = [["general", "General"], ["bots", "Bots"], ["groups", "Group chats"], ["projects", "Projects"], ["connectors", "Connectors"], ["capabilities", "Capabilities"], ["schedules", "Scheduled tasks"], ["workflows", "Workflows"], ["usage", "Usage"], ["secrets", "Secrets"], ["feedback", "Feedback"], ["about", "About FlyBot"]];
var PAGE_ICONS = { ...SETTINGS_ICONS, projects: FolderIcon, connectors: ConnectorIcon, workflows: WorkflowIcon, capabilities: PlugIcon, schedules: ClockIcon, secrets: KeyIcon, feedback: FeedbackIcon, about: InfoIcon };
function SetSection({ title, children }) {
- return (0, import_react42.createElement)("section", { className: "bt-set-section" }, (0, import_react42.createElement)("h3", null, title), (0, import_react42.createElement)("div", { className: "bt-set-card" }, children));
+ return (0, import_react43.createElement)("section", { className: "bt-set-section" }, (0, import_react43.createElement)("h3", null, title), (0, import_react43.createElement)("div", { className: "bt-set-card" }, children));
}
-function SetRow({ label, hint, children }) {
- return (0, import_react42.createElement)(
+function SetRow({ label, hint: hint2, children }) {
+ return (0, import_react43.createElement)(
"div",
{ className: "bt-set-row" },
- (0, import_react42.createElement)("div", { className: "bt-set-copy" }, (0, import_react42.createElement)("span", null, label), hint ? (0, import_react42.createElement)("span", { className: "bt-set-hint" }, hint) : null),
- children ? (0, import_react42.createElement)("div", { className: "bt-set-control" }, children) : null
+ (0, import_react43.createElement)("div", { className: "bt-set-copy" }, (0, import_react43.createElement)("span", null, label), hint2 ? (0, import_react43.createElement)("span", { className: "bt-set-hint" }, hint2) : null),
+ children ? (0, import_react43.createElement)("div", { className: "bt-set-control" }, children) : null
);
}
var NOTIFY_KINDS = [
@@ -18631,35 +19120,35 @@ function GeneralPage({ roster, actions, run }) {
const prefs = roster.prefs ?? {};
const themes = allThemes();
const current = themes[prefs.theme] ? prefs.theme : "deepseek";
- const [custom, setCustom] = (0, import_react42.useState)(prefs.accent ?? "#4d6bfe");
- const timer = (0, import_react42.useRef)(0);
- (0, import_react42.useEffect)(() => () => clearTimeout(timer.current), []);
+ const [custom, setCustom] = (0, import_react43.useState)(prefs.accent ?? "#4d6bfe");
+ const timer = (0, import_react43.useRef)(0);
+ (0, import_react43.useEffect)(() => () => clearTimeout(timer.current), []);
const pickCustom = (value) => {
setCustom(value);
clearTimeout(timer.current);
timer.current = setTimeout(() => run(actions.setPrefs({ accent: value })), 350);
};
return [
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetSection,
{ key: "look", title: t("Appearance") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{ label: t("Theme"), hint: t("Colors for the whole team, on every device.") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"select",
{ className: "bt-select", "aria-label": t("Theme"), value: current, onChange: (event) => run(actions.setPrefs({ theme: event.target.value })) },
- Object.entries(themes).map(([id, theme]) => (0, import_react42.createElement)("option", { key: id, value: id }, t(theme.label)))
+ Object.entries(themes).map(([id, theme]) => (0, import_react43.createElement)("option", { key: id, value: id }, t(theme.label)))
)
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{ label: t("Accent"), hint: t("Unread marks, badges, and the brand mark.") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"div",
{ className: "bt-swatches" },
- (0, import_react42.createElement)("button", { type: "button", className: "bt-swatch bt-swatch-default", title: t("Theme accent"), "aria-label": t("Theme accent"), "aria-pressed": !prefs.accent, onClick: () => run(actions.setPrefs({ accent: null })) }),
- ACCENT_INKS.map((ink) => (0, import_react42.createElement)("button", {
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-swatch bt-swatch-default", title: t("Theme accent"), "aria-label": t("Theme accent"), "aria-pressed": !prefs.accent, onClick: () => run(actions.setPrefs({ accent: null })) }),
+ ACCENT_INKS.map((ink) => (0, import_react43.createElement)("button", {
key: ink,
type: "button",
className: "bt-swatch",
@@ -18669,28 +19158,28 @@ function GeneralPage({ roster, actions, run }) {
style: { background: INKS[ink][0] },
onClick: () => run(actions.setPrefs({ accent: INKS[ink][0] }))
})),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"label",
{ className: "bt-swatch bt-swatch-custom", title: t("Custom accent"), "data-on": Boolean(prefs.accent) && !ACCENT_INKS.some((ink) => INKS[ink][0] === prefs.accent) },
- (0, import_react42.createElement)("input", { type: "color", value: custom, "aria-label": t("Custom accent"), onChange: (event) => pickCustom(event.target.value) })
+ (0, import_react43.createElement)("input", { type: "color", value: custom, "aria-label": t("Custom accent"), onChange: (event) => pickCustom(event.target.value) })
)
)
)
),
// One switch for every system notification (#353), then one per kind (#469).
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetSection,
{ key: "notify", title: t("Notifications") },
- (0, import_react42.createElement)(SwitchRow, {
+ (0, import_react43.createElement)(SwitchRow, {
label: t("In other chats"),
hint: t("When your Bots finish, fail, or wait for your approval while you are in another chat or app."),
on: prefs.notifications !== false,
onChange: (on) => run(actions.setPrefs({ notifications: on }))
}),
- NOTIFY_KINDS.map(([kind, label, hint]) => (0, import_react42.createElement)(SwitchRow, {
+ NOTIFY_KINDS.map(([kind, label, hint2]) => (0, import_react43.createElement)(SwitchRow, {
key: kind,
label: t(label),
- hint: hint ? t(hint) : void 0,
+ hint: hint2 ? t(hint2) : void 0,
disabled: prefs.notifications === false,
on: prefs.notify?.[kind] !== false,
onChange: (on) => run(actions.setPrefs({ notify: { [kind]: on } }))
@@ -18703,52 +19192,52 @@ function MainBotsSection({ roster, actions, run }) {
const [first, ...others] = mains;
const own = roster.bots.filter((bot) => !bot.remote);
const candidates = own.filter((bot) => !isMainOf(roster, bot.id));
- return (0, import_react42.createElement)(
+ return (0, import_react43.createElement)(
SetSection,
{ title: t("Main Bot") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{
label: t("Main Bot"),
hint: first ? t("First in the sidebar. Pick another Bot to hand it the role; {name} then stops being a Main Bot.", { name: first.name }) : void 0
},
- (0, import_react42.createElement)("select", {
+ (0, import_react43.createElement)("select", {
className: "bt-select",
"aria-label": t("Main Bot"),
value: first?.id ?? "",
onChange: (event) => run(actions.setMain(event.target.value, true, first ? { replace: first.id } : {}))
- }, first ? null : (0, import_react42.createElement)("option", { value: "" }, t("Choose a Bot…")), own.map((bot) => (0, import_react42.createElement)("option", { key: bot.id, value: bot.id }, bot.name)))
+ }, first ? null : (0, import_react43.createElement)("option", { value: "" }, t("Choose a Bot…")), own.map((bot) => (0, import_react43.createElement)("option", { key: bot.id, value: bot.id }, bot.name)))
),
- others.map((bot) => (0, import_react42.createElement)(
+ others.map((bot) => (0, import_react43.createElement)(
SetRow,
{ key: bot.id, label: bot.name, hint: t("Also a Main Bot.") },
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.setMain(bot.id, true, { primary: true })) }, t("Move to first")),
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.setMain(bot.id, false)) }, t("Remove Main Bot role"))
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.setMain(bot.id, true, { primary: true })) }, t("Move to first")),
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => run(actions.setMain(bot.id, false)) }, t("Remove Main Bot role"))
)),
- candidates.length > 0 ? (0, import_react42.createElement)(
+ candidates.length > 0 ? (0, import_react43.createElement)(
SetRow,
{ label: t("Add a Main Bot"), hint: t("Main Bots can create and change Bots, and run every group chat.") },
- (0, import_react42.createElement)("select", {
+ (0, import_react43.createElement)("select", {
className: "bt-select",
"aria-label": t("Add a Main Bot"),
value: "",
onChange: (event) => {
if (event.target.value) void run(actions.setMain(event.target.value, true));
}
- }, (0, import_react42.createElement)("option", { value: "" }, t("Choose a Bot…")), candidates.map((bot) => (0, import_react42.createElement)("option", { key: bot.id, value: bot.id }, bot.name)))
+ }, (0, import_react43.createElement)("option", { value: "" }, t("Choose a Bot…")), candidates.map((bot) => (0, import_react43.createElement)("option", { key: bot.id, value: bot.id }, bot.name)))
) : null
);
}
var MOTIONS = [["quiet", "Quiet"], ["normal", "Normal"], ["lively", "Lively"]];
function MotionSection({ roster, actions, run }) {
const motion = roster.prefs?.motion === "quiet" || roster.prefs?.motion === "lively" ? roster.prefs.motion : "normal";
- return (0, import_react42.createElement)(
+ return (0, import_react43.createElement)(
SetSection,
{ title: t("Animation") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{ label: t("Bot animation") },
- (0, import_react42.createElement)(Segmented, { label: t("Bot animation"), value: motion, className: "bt-motion-seg" }, MOTIONS.map(([id, label]) => (0, import_react42.createElement)("button", {
+ (0, import_react43.createElement)(Segmented, { label: t("Bot animation"), value: motion, className: "bt-motion-seg" }, MOTIONS.map(([id, label]) => (0, import_react43.createElement)("button", {
key: id,
type: "button",
"aria-pressed": motion === id,
@@ -18760,69 +19249,69 @@ function MotionSection({ roster, actions, run }) {
);
}
function BotsPage({ roster, actions, run }) {
- const [creating, setCreating] = (0, import_react42.useState)(false);
+ const [creating, setCreating] = (0, import_react43.useState)(false);
return [
- (0, import_react42.createElement)(MainBotsSection, { key: "main", roster, actions, run }),
- (0, import_react42.createElement)(MotionSection, { key: "motion", roster, actions, run }),
- creating ? (0, import_react42.createElement)(CreateBot, { key: "create", roster, actions, inline: true, onBack: () => setCreating(false), onCreated: (bot) => actions.openSettings("bots", bot.id) }) : (0, import_react42.createElement)(
+ (0, import_react43.createElement)(MainBotsSection, { key: "main", roster, actions, run }),
+ (0, import_react43.createElement)(MotionSection, { key: "motion", roster, actions, run }),
+ creating ? (0, import_react43.createElement)(CreateBot, { key: "create", roster, actions, inline: true, onBack: () => setCreating(false), onCreated: (bot) => actions.openSettings("bots", bot.id) }) : (0, import_react43.createElement)(
"div",
{ key: "new", className: "bt-actions" },
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm bt-with-icon", onClick: () => setCreating(true) }, (0, import_react42.createElement)(PlusIcon), t("New Bot"))
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm bt-with-icon", onClick: () => setCreating(true) }, (0, import_react43.createElement)(PlusIcon), t("New Bot"))
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetSection,
{ key: "bots", title: t("Bots · {count}", { count: roster.bots.filter((bot) => !bot.remote).length }) },
- roster.bots.filter((bot) => !bot.remote).map((bot) => (0, import_react42.createElement)(
+ roster.bots.filter((bot) => !bot.remote).map((bot) => (0, import_react43.createElement)(
"button",
{ key: bot.id, type: "button", className: "bt-set-row", onClick: () => actions.openSettings("bots", bot.id) },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"span",
{ className: "bt-set-bot" },
- (0, import_react42.createElement)(BotAvatar, { bot, size: 28, badge: false, live: false }),
- (0, import_react42.createElement)("span", { className: "bt-row-title" }, bot.name),
- bot.role ? (0, import_react42.createElement)("span", { className: "bt-tag" }, bot.role) : null,
- isMainOf(roster, bot.id) ? (0, import_react42.createElement)("span", { className: "bt-tag" }, t("Main Bot")) : null,
- bot.hidden && !isMainOf(roster, bot.id) ? (0, import_react42.createElement)("span", { className: "bt-tag" }, t("Hidden")) : null
+ (0, import_react43.createElement)(BotAvatar, { bot, size: 28, badge: false, live: false }),
+ (0, import_react43.createElement)("span", { className: "bt-row-title" }, bot.name),
+ bot.role ? (0, import_react43.createElement)("span", { className: "bt-tag" }, bot.role) : null,
+ isMainOf(roster, bot.id) ? (0, import_react43.createElement)("span", { className: "bt-tag" }, t("Main Bot")) : null,
+ bot.hidden && !isMainOf(roster, bot.id) ? (0, import_react43.createElement)("span", { className: "bt-tag" }, t("Hidden")) : null
),
- (0, import_react42.createElement)("span", { className: "bt-chevron" }, (0, import_react42.createElement)(ChevronRightIcon))
+ (0, import_react43.createElement)("span", { className: "bt-chevron" }, (0, import_react43.createElement)(ChevronRightIcon))
))
)
];
}
function GroupsPage({ roster, actions, run }) {
- const [creating, setCreating] = (0, import_react42.useState)(false);
+ const [creating, setCreating] = (0, import_react43.useState)(false);
return [
- creating ? (0, import_react42.createElement)(NewGroupForm, { key: "create", roster, actions, run, onCancel: () => setCreating(false), onCreated: (room2) => actions.openSettings("groups", room2.id) }) : (0, import_react42.createElement)(
+ creating ? (0, import_react43.createElement)(NewGroupForm, { key: "create", roster, actions, run, onCancel: () => setCreating(false), onCreated: (room2) => actions.openSettings("groups", room2.id) }) : (0, import_react43.createElement)(
"div",
{ key: "new", className: "bt-actions" },
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm bt-with-icon", disabled: roster.bots.length < 2, title: roster.bots.length < 2 ? t("A group chat needs at least two Bots") : void 0, onClick: () => setCreating(true) }, (0, import_react42.createElement)(PlusIcon), t("Create group chat"))
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm bt-with-icon", disabled: roster.bots.length < 2, title: roster.bots.length < 2 ? t("A group chat needs at least two Bots") : void 0, onClick: () => setCreating(true) }, (0, import_react43.createElement)(PlusIcon), t("Create group chat"))
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetSection,
{ key: "groups", title: t("Group chats · {count}", { count: roster.rooms.length }) },
- roster.rooms.length === 0 ? (0, import_react42.createElement)(SetRow, { label: t("No group chats yet."), hint: t("A group chat lets several Bots work on one thing with you.") }) : roster.rooms.map((room2) => {
+ roster.rooms.length === 0 ? (0, import_react43.createElement)(SetRow, { label: t("No group chats yet."), hint: t("A group chat lets several Bots work on one thing with you.") }) : roster.rooms.map((room2) => {
const admin = roster.byId[room2.admin];
- return (0, import_react42.createElement)(
+ return (0, import_react43.createElement)(
"button",
{ key: room2.id, type: "button", className: "bt-set-row", onClick: () => actions.openSettings("groups", room2.id) },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"span",
{ className: "bt-set-bot" },
- (0, import_react42.createElement)(RoomAvatar, { room: room2, roster, size: 28 }),
- (0, import_react42.createElement)("span", { className: "bt-row-title" }, room2.name),
- (0, import_react42.createElement)("span", { className: "bt-tag" }, t(seatedCount(room2) === 1 ? "{count} member" : "{count} members", { count: seatedCount(room2) })),
- admin ? (0, import_react42.createElement)("span", { className: "bt-tag bt-tag-admin" }, (0, import_react42.createElement)(AdminStar), admin.name) : null,
- room2.hidden ? (0, import_react42.createElement)("span", { className: "bt-tag" }, t("Hidden")) : null
+ (0, import_react43.createElement)(RoomAvatar, { room: room2, roster, size: 28 }),
+ (0, import_react43.createElement)("span", { className: "bt-row-title" }, room2.name),
+ (0, import_react43.createElement)("span", { className: "bt-tag" }, t(seatedCount(room2) === 1 ? "{count} member" : "{count} members", { count: seatedCount(room2) })),
+ admin ? (0, import_react43.createElement)("span", { className: "bt-tag bt-tag-admin" }, (0, import_react43.createElement)(AdminStar), admin.name) : null,
+ room2.hidden ? (0, import_react43.createElement)("span", { className: "bt-tag" }, t("Hidden")) : null
),
- (0, import_react42.createElement)("span", { className: "bt-chevron" }, (0, import_react42.createElement)(ChevronRightIcon))
+ (0, import_react43.createElement)("span", { className: "bt-chevron" }, (0, import_react43.createElement)(ChevronRightIcon))
);
})
)
];
}
function SettingsDialog({ page, id, roster, actions, useUpdate, leaving = false }) {
- const [error, setError] = (0, import_react42.useState)("");
- const close = (0, import_react42.useCallback)(() => actions.closeSettings(), []);
+ const [error, setError] = (0, import_react43.useState)("");
+ const close = (0, import_react43.useCallback)(() => actions.closeSettings(), []);
useEscape(close);
const run = (promise) => Promise.resolve(promise).then(() => {
setError("");
@@ -18843,34 +19332,34 @@ function SettingsDialog({ page, id, roster, actions, useUpdate, leaving = false
const nav = useGlide(shown, { axis: "y" });
const pageKey = `${shown}:${bot?.id ?? room2?.id ?? ""}`;
const depth = bot || room2 ? 1 : 0;
- const last = (0, import_react42.useRef)({ key: pageKey, depth, move: "up" });
+ const last = (0, import_react43.useRef)({ key: pageKey, depth, move: "up" });
if (last.current.key !== pageKey) {
last.current = { key: pageKey, depth, move: depth > last.current.depth ? "in" : depth < last.current.depth ? "out" : "up" };
}
- const [usageOpened, setUsageOpened] = (0, import_react42.useState)(shown === "usage");
+ const [usageOpened, setUsageOpened] = (0, import_react43.useState)(shown === "usage");
if (shown === "usage" && !usageOpened) setUsageOpened(true);
- const errorLine = error ? (0, import_react42.createElement)("div", { className: "bt-error", role: "alert", style: { padding: 0 } }, error) : null;
- return (0, import_react42.createElement)(
+ const errorLine = error ? (0, import_react43.createElement)("div", { className: "bt-error", role: "alert", style: { padding: 0 } }, error) : null;
+ return (0, import_react43.createElement)(
"div",
{ className: "bt-settings-layer", "data-leaving": leaving || void 0 },
- (0, import_react42.createElement)("div", { className: "bt-scrim", onMouseDown: close }),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)("div", { className: "bt-scrim", onMouseDown: close }),
+ (0, import_react43.createElement)(
"div",
{ className: "bt-settings", role: "dialog", "aria-modal": true, "aria-label": t("FlyBot settings"), "data-wide": shown === "usage" ? "" : void 0 },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"nav",
{ ref: nav.box, className: "bt-settings-nav", "aria-label": t("Settings pages") },
- (0, import_react42.createElement)("span", { ref: nav.thumb, className: "bt-thumb", "aria-hidden": true }),
- pages.map(([key, text2]) => (0, import_react42.createElement)("button", {
+ (0, import_react43.createElement)("span", { ref: nav.thumb, className: "bt-thumb", "aria-hidden": true }),
+ pages.map(([key, text2]) => (0, import_react43.createElement)("button", {
key,
type: "button",
className: "bt-settings-item",
"aria-current": shown === key ? "page" : void 0,
onClick: () => actions.openSettings(key)
- }, (0, import_react42.createElement)(extra.find((item) => item.key === key)?.entry.icon ?? PAGE_ICONS[key] ?? ConnectorIcon), t(text2))),
+ }, (0, import_react43.createElement)(extra.find((item) => item.key === key)?.entry.icon ?? PAGE_ICONS[key] ?? ConnectorIcon), t(text2))),
// DeepSeek Harness's own settings are a separate window with its own title and look; FlyBot
// does not embed or retitle it (never patch DSH), so the entry says it leaves (#421).
- (0, import_react42.createElement)("button", {
+ (0, import_react43.createElement)("button", {
type: "button",
className: "bt-settings-item bt-settings-shell",
title: t("Opens DeepSeek Harness's own settings (models, providers, permissions) in a separate window"),
@@ -18879,44 +19368,44 @@ function SettingsDialog({ page, id, roster, actions, useUpdate, leaving = false
close();
openHarnessSettings();
}
- }, (0, import_react42.createElement)(SlidersIcon), t("Harness settings"), (0, import_react42.createElement)("span", { className: "bt-settings-out", "aria-hidden": true }, "↗"))
+ }, (0, import_react43.createElement)(SlidersIcon), t("Harness settings"), (0, import_react43.createElement)("span", { className: "bt-settings-out", "aria-hidden": true }, "↗"))
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"div",
{ className: "bt-settings-main" },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"div",
{ className: "bt-settings-head" },
- back ? (0, import_react42.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": back, title: back, onClick: () => actions.openSettings(shown) }, (0, import_react42.createElement)(ChevronLeftIcon)) : null,
- (0, import_react42.createElement)("h2", { key: bot?.id ?? room2?.id ?? shown }, bot?.name ?? room2?.name ?? label)
+ back ? (0, import_react43.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": back, title: back, onClick: () => actions.openSettings(shown) }, (0, import_react43.createElement)(ChevronLeftIcon)) : null,
+ (0, import_react43.createElement)("h2", { key: bot?.id ?? room2?.id ?? shown }, bot?.name ?? room2?.name ?? label)
),
- shown === "usage" ? null : (0, import_react42.createElement)(
+ shown === "usage" ? null : (0, import_react43.createElement)(
"div",
{ key: pageKey, className: "bt-settings-scroll bt-settings-page", "data-move": last.current.move },
errorLine,
- shown === "general" ? (0, import_react42.createElement)(GeneralPage, { roster, actions, run }) : null,
- bot ? (0, import_react42.createElement)("div", { className: "bt-settings-form" }, (0, import_react42.createElement)(BotSettingsForm, { key: bot.id, bot, roster, actions, run })) : null,
- shown === "bots" && !bot ? (0, import_react42.createElement)(BotsPage, { roster, actions, run }) : null,
- room2 ? (0, import_react42.createElement)("div", { className: "bt-settings-form" }, (0, import_react42.createElement)(GroupSettingsForm, { key: room2.id, room: room2, roster, actions, run })) : null,
- shown === "groups" && !room2 ? (0, import_react42.createElement)(GroupsPage, { roster, actions, run }) : null,
- shown === "projects" ? (0, import_react42.createElement)(ProjectsPage, { roster, actions, run, call: call2 }) : null,
- shown === "connectors" ? (0, import_react42.createElement)(ConnectorsPage, { roster, actions }) : null,
- shown === "workflows" ? (0, import_react42.createElement)(WorkflowsPage, { call: call2, roster }) : null,
- pluginPage ? (0, import_react42.createElement)(SettingsPageSlot, { entry: pluginPage, props: { roster, actions, call: call2, run, t, Section: SetSection, Row: SetRow } }) : null,
- shown === "capabilities" ? (0, import_react42.createElement)(CapabilitiesPage, { roster, actions, run }) : null,
- shown === "schedules" ? (0, import_react42.createElement)(SchedulesPage, { roster, actions, start: id ?? void 0 }) : null,
- shown === "secrets" ? (0, import_react42.createElement)(SecretsPage, { roster, actions, run, Section: SetSection }) : null,
- shown === "feedback" ? (0, import_react42.createElement)(FeedbackPage, { actions, run, Section: SetSection, Row: SetRow }) : null,
- shown === "about" ? (0, import_react42.createElement)(AboutPage, { useUpdate, actions, run, Section: SetSection, Row: SetRow }) : null
+ shown === "general" ? (0, import_react43.createElement)(GeneralPage, { roster, actions, run }) : null,
+ bot ? (0, import_react43.createElement)("div", { className: "bt-settings-form" }, (0, import_react43.createElement)(BotSettingsForm, { key: bot.id, bot, roster, actions, run })) : null,
+ shown === "bots" && !bot ? (0, import_react43.createElement)(BotsPage, { roster, actions, run }) : null,
+ room2 ? (0, import_react43.createElement)("div", { className: "bt-settings-form" }, (0, import_react43.createElement)(GroupSettingsForm, { key: room2.id, room: room2, roster, actions, run })) : null,
+ shown === "groups" && !room2 ? (0, import_react43.createElement)(GroupsPage, { roster, actions, run }) : null,
+ shown === "projects" ? (0, import_react43.createElement)(ProjectsPage, { roster, actions, run, call: call2 }) : null,
+ shown === "connectors" ? (0, import_react43.createElement)(ConnectorsPage, { roster, actions }) : null,
+ shown === "workflows" ? (0, import_react43.createElement)(WorkflowsPage, { call: call2, roster }) : null,
+ pluginPage ? (0, import_react43.createElement)(SettingsPageSlot, { entry: pluginPage, props: { roster, actions, call: call2, run, t, Section: SetSection, Row: SetRow } }) : null,
+ shown === "capabilities" ? (0, import_react43.createElement)(CapabilitiesPage, { roster, actions, run }) : null,
+ shown === "schedules" ? (0, import_react43.createElement)(SchedulesPage, { roster, actions, start: id ?? void 0 }) : null,
+ shown === "secrets" ? (0, import_react43.createElement)(SecretsPage, { roster, actions, run, Section: SetSection }) : null,
+ shown === "feedback" ? (0, import_react43.createElement)(FeedbackPage, { actions, run, Section: SetSection, Row: SetRow }) : null,
+ shown === "about" ? (0, import_react43.createElement)(AboutPage, { useUpdate, actions, run, Section: SetSection, Row: SetRow }) : null
),
- usageOpened ? (0, import_react42.createElement)(
+ usageOpened ? (0, import_react43.createElement)(
"div",
{ key: "usage", className: "bt-settings-scroll bt-settings-usage", "data-off": shown === "usage" ? void 0 : "", "aria-hidden": shown === "usage" ? void 0 : true },
shown === "usage" ? errorLine : null,
- (0, import_react42.createElement)(UsagePage, { roster, actions, focusId: usageFocus })
+ (0, import_react43.createElement)(UsagePage, { roster, actions, focusId: usageFocus })
) : null
),
- (0, import_react42.createElement)("button", { type: "button", className: "bt-settings-close", "aria-label": t("Close settings"), onClick: close }, (0, import_react42.createElement)(CloseIcon))
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-settings-close", "aria-label": t("Close settings"), onClick: close }, (0, import_react43.createElement)(CloseIcon))
)
);
}
@@ -18941,21 +19430,21 @@ function ProjectsList({ projects, roster, call: call4, reload }) {
};
const bound2 = members.filter((member) => member.projectId !== null && member.projectId !== void 0);
return [
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetSection,
{ key: "projects", title: t("Projects · {count}", { count: projects.length }) },
- projects.length === 0 ? (0, import_react42.createElement)("div", { className: "bt-set-row" }, (0, import_react42.createElement)("div", { className: "bt-set-copy" }, (0, import_react42.createElement)("span", null, t("No Project yet — create one.")))) : projects.map((project) => (0, import_react42.createElement)(
+ projects.length === 0 ? (0, import_react43.createElement)("div", { className: "bt-set-row" }, (0, import_react43.createElement)("div", { className: "bt-set-copy" }, (0, import_react43.createElement)("span", null, t("No Project yet — create one.")))) : projects.map((project) => (0, import_react43.createElement)(
SetRow,
{
key: project.id,
label: project.name,
hint: project.workDir === null || project.workDir === void 0 ? void 0 : project.workDir
},
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"div",
{ className: "bt-project-row-controls" },
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => openProjectBoard(project.id) }, t("Open board")),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => openProjectBoard(project.id) }, t("Open board")),
+ (0, import_react43.createElement)(
"select",
{
className: "bt-select",
@@ -18965,8 +19454,8 @@ function ProjectsList({ projects, roster, call: call4, reload }) {
void bind(event.target.value, project);
}
},
- (0, import_react42.createElement)("option", { value: "" }, t("Bind a Bot or group")),
- members.map((member) => (0, import_react42.createElement)(
+ (0, import_react43.createElement)("option", { value: "" }, t("Bind a Bot or group")),
+ members.map((member) => (0, import_react43.createElement)(
"option",
{ key: `${member.kind}:${member.id}`, value: `${member.kind}:${member.id}` },
`${member.kind === "group" ? t("Group") : t("Bot")} · ${member.name}`
@@ -18975,17 +19464,17 @@ function ProjectsList({ projects, roster, call: call4, reload }) {
)
))
),
- bound2.length === 0 ? null : (0, import_react42.createElement)(
+ bound2.length === 0 ? null : (0, import_react43.createElement)(
SetSection,
{ key: "bindings", title: t("Bindings") },
- bound2.map((member) => (0, import_react42.createElement)(
+ bound2.map((member) => (0, import_react43.createElement)(
SetRow,
{
key: `${member.kind}:${member.id}`,
label: member.name,
hint: member.kind === "group" ? t("Group") : t("Bot")
},
- (0, import_react42.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => {
+ (0, import_react43.createElement)("button", { type: "button", className: "bt-soft bt-soft-sm", onClick: () => {
void unbind(member);
} }, t("Unbind"))
))
@@ -18993,14 +19482,14 @@ function ProjectsList({ projects, roster, call: call4, reload }) {
];
}
function ProjectsPage({ roster, actions, run, call: call4 }) {
- const [state, setState] = (0, import_react42.useState)({ projects: [], error: null });
- const [name, setName] = (0, import_react42.useState)("");
- const [workDir, setWorkDir] = (0, import_react42.useState)(null);
- const reload = (0, import_react42.useCallback)(async () => {
+ const [state, setState] = (0, import_react43.useState)({ projects: [], error: null });
+ const [name, setName] = (0, import_react43.useState)("");
+ const [workDir, setWorkDir] = (0, import_react43.useState)(null);
+ const reload = (0, import_react43.useCallback)(async () => {
const listing = await call4("projects");
setState({ projects: listing?.projects ?? [], error: null });
}, [call4]);
- (0, import_react42.useEffect)(() => {
+ (0, import_react43.useEffect)(() => {
void reload().catch((error) => setState({ projects: [], error: error?.message ?? String(error) }));
}, [reload]);
const create = async () => {
@@ -19018,14 +19507,14 @@ function ProjectsPage({ roster, actions, run, call: call4 }) {
}
};
return [
- state.error === null ? null : (0, import_react42.createElement)("div", { key: "error", className: "bt-error", role: "alert" }, state.error),
- (0, import_react42.createElement)(
+ state.error === null ? null : (0, import_react43.createElement)("div", { key: "error", className: "bt-error", role: "alert" }, state.error),
+ (0, import_react43.createElement)(
SetSection,
{ key: "new", title: t("New Project") },
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{ label: t("Name") },
- (0, import_react42.createElement)("input", {
+ (0, import_react43.createElement)("input", {
className: "bt-input",
"aria-label": t("Project name"),
value: name,
@@ -19033,22 +19522,22 @@ function ProjectsPage({ roster, actions, run, call: call4 }) {
onChange: (event) => setName(event.target.value)
})
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
SetRow,
{ label: t("Working folder"), hint: t("Optional. Where this Project's work happens.") },
- (0, import_react42.createElement)(FolderMenu, { value: workDir, actions, run, onPick: setWorkDir })
+ (0, import_react43.createElement)(FolderMenu, { value: workDir, actions, run, onPick: setWorkDir })
),
- (0, import_react42.createElement)(
+ (0, import_react43.createElement)(
"div",
{ className: "bt-actions" },
- (0, import_react42.createElement)("button", {
+ (0, import_react43.createElement)("button", {
type: "button",
className: "bt-primary bt-with-icon",
disabled: name.trim() === "",
onClick: () => {
void create();
}
- }, (0, import_react42.createElement)(PlusIcon), t("New Project"))
+ }, (0, import_react43.createElement)(PlusIcon), t("New Project"))
)
),
// The list is rendered here rather than as a child element: it holds no state of its own,
@@ -19058,10 +19547,10 @@ function ProjectsPage({ roster, actions, run, call: call4 }) {
}
// src/client/context-menu.js
-var import_react43 = require("react");
+var import_react44 = require("react");
function ContextMenu({ menu, roster, actions, leaving = false }) {
useEscape(() => actions.closeMenu());
- (0, import_react43.useEffect)(() => {
+ (0, import_react44.useEffect)(() => {
const onDown = (event) => {
if (!(event.target instanceof Element) || !event.target.closest(".bt-menu")) actions.closeMenu();
};
@@ -19069,14 +19558,14 @@ function ContextMenu({ menu, roster, actions, leaving = false }) {
return () => window.removeEventListener("mousedown", onDown);
}, []);
const structure = useSidebarStructure();
- const ref = (0, import_react43.useRef)(null);
- const [place, setPlace] = (0, import_react43.useState)({ left: menu.x, top: menu.y });
- (0, import_react43.useLayoutEffect)(() => {
+ const ref = (0, import_react44.useRef)(null);
+ const [place, setPlace] = (0, import_react44.useState)({ left: menu.x, top: menu.y });
+ (0, import_react44.useLayoutEffect)(() => {
const box = ref.current?.getBoundingClientRect();
if (!box) return;
setPlace({ left: Math.max(8, Math.min(menu.x, window.innerWidth - box.width - 8)), top: Math.max(8, Math.min(menu.y, window.innerHeight - box.height - 8)) });
}, [menu.x, menu.y]);
- if (menu.kind === "agent" || menu.kind === "agent-session") return (0, import_react43.createElement)(AgentMenu, { menu, roster, actions, leaving });
+ if (menu.kind === "agent" || menu.kind === "agent-session") return (0, import_react44.createElement)(AgentMenu, { menu, roster, actions, leaving });
const bot = roster.byId[menu.id];
const room2 = roster.roomsById[menu.id];
const entry = bot ?? room2;
@@ -19118,14 +19607,14 @@ function ContextMenu({ menu, roster, actions, leaving = false }) {
]
];
const shown = groups.map((group) => group.filter(Boolean)).filter((group) => group.length > 0);
- return (0, import_react43.createElement)(
+ return (0, import_react44.createElement)(
"div",
{ ref, className: "bt-menu", role: "menu", "aria-label": t("{name} actions", { name: bot?.name ?? room2.name }), style: place, "data-leaving": leaving || void 0 },
- shown.map((group, index) => (0, import_react43.createElement)(
- import_react43.Fragment,
+ shown.map((group, index) => (0, import_react44.createElement)(
+ import_react44.Fragment,
{ key: index },
- index > 0 ? (0, import_react43.createElement)("div", { className: "bt-menu-sep", role: "separator" }) : null,
- group.map(([label, Icon, run, danger]) => (0, import_react43.createElement)("button", {
+ index > 0 ? (0, import_react44.createElement)("div", { className: "bt-menu-sep", role: "separator" }) : null,
+ group.map(([label, Icon, run, danger]) => (0, import_react44.createElement)("button", {
key: label,
type: "button",
role: "menuitem",
@@ -19134,14 +19623,14 @@ function ContextMenu({ menu, roster, actions, leaving = false }) {
actions.closeMenu();
void Promise.resolve(run()).catch((error) => actions.reportError(error, "menu"));
}
- }, (0, import_react43.createElement)(Icon), label))
+ }, (0, import_react44.createElement)(Icon), label))
))
);
}
function AgentMenu({ menu, roster, actions, leaving }) {
- const ref = (0, import_react43.useRef)(null);
- const [place, setPlace] = (0, import_react43.useState)({ left: menu.x, top: menu.y });
- (0, import_react43.useLayoutEffect)(() => {
+ const ref = (0, import_react44.useRef)(null);
+ const [place, setPlace] = (0, import_react44.useState)({ left: menu.x, top: menu.y });
+ (0, import_react44.useLayoutEffect)(() => {
const box = ref.current?.getBoundingClientRect();
if (!box) return;
setPlace({ left: Math.max(8, Math.min(menu.x, window.innerWidth - box.width - 8)), top: Math.max(8, Math.min(menu.y, window.innerHeight - box.height - 8)) });
@@ -19163,14 +19652,14 @@ function AgentMenu({ menu, roster, actions, leaving }) {
[t("Archive"), TrashIcon, () => actions.archiveAgentSession(agent.id, menu.id), true]
]
];
- return (0, import_react43.createElement)(
+ return (0, import_react44.createElement)(
"div",
{ ref, className: "bt-menu", role: "menu", "aria-label": menu.kind === "agent" ? "DSH Agent" : t("Session actions"), style: place, "data-leaving": leaving || void 0 },
- groups.map((group, index) => (0, import_react43.createElement)(
- import_react43.Fragment,
+ groups.map((group, index) => (0, import_react44.createElement)(
+ import_react44.Fragment,
{ key: index },
- index > 0 ? (0, import_react43.createElement)("div", { className: "bt-menu-sep", role: "separator" }) : null,
- group.map(([label, Icon, run, danger]) => (0, import_react43.createElement)("button", {
+ index > 0 ? (0, import_react44.createElement)("div", { className: "bt-menu-sep", role: "separator" }) : null,
+ group.map(([label, Icon, run, danger]) => (0, import_react44.createElement)("button", {
key: label,
type: "button",
role: "menuitem",
@@ -19179,7 +19668,7 @@ function AgentMenu({ menu, roster, actions, leaving }) {
actions.closeMenu();
void Promise.resolve(run()).catch((error) => console.warn("[ds-bot]", error));
}
- }, (0, import_react43.createElement)(Icon), label))
+ }, (0, import_react44.createElement)(Icon), label))
))
);
}
@@ -19265,7 +19754,7 @@ function migrateStorage(storage = globalThis.localStorage) {
}
// src/client/details-drawer.js
-var import_react44 = require("react");
+var import_react45 = require("react");
var TAB_LABELS = { details: "Details", browser: "Browser" };
var hostOf = (url) => {
try {
@@ -19279,10 +19768,10 @@ var EMPTY_TABS = { ids: [], active: null };
var PERMISSION_LABELS = { "read-only": "Read only", "workspace-write": "Workspace", "danger-full-access": "Full access" };
var DANGER = /* @__PURE__ */ new Set(["danger-full-access"]);
function PermissionRow({ bot, roster, actions, run }) {
- const [pending, setPending] = (0, import_react44.useState)(null);
+ const [pending, setPending] = (0, import_react45.useState)(null);
const catalog = roster.permissions;
const saved = bot.permission ?? catalog?.defaultPreset;
- (0, import_react44.useEffect)(() => {
+ (0, import_react45.useEffect)(() => {
if (pending === saved) setPending(null);
}, [pending, saved]);
if (!catalog?.options?.length) return null;
@@ -19292,14 +19781,14 @@ function PermissionRow({ bot, roster, actions, run }) {
setPending(value);
void run(actions.updateBot(bot.id, { permission: value })).catch(() => setPending(null));
};
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ className: "bt-drawer-permission" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Permissions")),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Permissions")),
+ (0, import_react45.createElement)(
Segmented,
{ label: t("Permissions"), value: current },
- catalog.options.map((option) => (0, import_react44.createElement)("button", {
+ catalog.options.map((option) => (0, import_react45.createElement)("button", {
key: option.value,
type: "button",
"aria-pressed": option.value === current,
@@ -19313,42 +19802,42 @@ function PermissionRow({ bot, roster, actions, run }) {
function BrowserCards({ bot, sessionId, roster, actions, useBrowserTabs, useBrowserPages }) {
const state = useBrowserTabs((map) => map[bot.id] ?? EMPTY_TABS);
const pages = useBrowserPages((map) => map);
- (0, import_react44.useEffect)(() => {
+ (0, import_react45.useEffect)(() => {
actions.browserEnsure?.(bot.id);
}, [bot.id]);
if (roster.browser !== true || !actions.browserShow) {
- return (0, import_react44.createElement)("div", { className: "bt-muted" }, t("The browser is in the DSH Desktop app."));
+ return (0, import_react45.createElement)("div", { className: "bt-muted" }, t("The browser is in the DSH Desktop app."));
}
if (state.ids.length === 0) {
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ className: "bt-browser-empty-mark" },
- (0, import_react44.createElement)(BotMark, { bot, size: 40, state: "idle", live: true }),
- (0, import_react44.createElement)("div", { className: "bt-browser-empty-title" }, t("{name}'s browser", { name: bot.name })),
- (0, import_react44.createElement)("div", { className: "bt-muted" }, t("Open a page here and {name} can read it with you. Logins and cookies stay with {name}; other Bots never see them.", { name: bot.name })),
- (0, import_react44.createElement)("button", { type: "button", className: "bt-browser-retry", onClick: () => actions.openBrowser(sessionId) }, t("Open browser"))
+ (0, import_react45.createElement)(BotMark, { bot, size: 40, state: "idle", live: true }),
+ (0, import_react45.createElement)("div", { className: "bt-browser-empty-title" }, t("{name}'s browser", { name: bot.name })),
+ (0, import_react45.createElement)("div", { className: "bt-muted" }, t("Open a page here and {name} can read it with you. Logins and cookies stay with {name}; other Bots never see them.", { name: bot.name })),
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-browser-retry", onClick: () => actions.openBrowser(sessionId) }, t("Open browser"))
);
}
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ className: "bt-bcards" },
state.ids.map((tabId, index) => {
const page = pages[tabId] ?? {};
const label = page.title || shortUrl(page.url) || t("New tab");
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ key: tabId, className: "bt-bcard", "data-active": state.active === tabId || void 0, style: { animationDelay: `${index * 30}ms` } },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"button",
{ type: "button", className: "bt-bcard-shot", "aria-label": t("Open {title}", { title: label }), title: page.url, onClick: () => actions.browserPick(sessionId, tabId) },
- page.excerpt ? (0, import_react44.createElement)(
+ page.excerpt ? (0, import_react45.createElement)(
"span",
{ className: "bt-bcard-preview" },
- (0, import_react44.createElement)("span", { className: "bt-bcard-ptitle" }, label),
- (0, import_react44.createElement)("span", { className: "bt-bcard-excerpt" }, page.excerpt)
- ) : (0, import_react44.createElement)("span", { className: "bt-bcard-blank" }, (0, import_react44.createElement)(GlobeIcon), (0, import_react44.createElement)("span", null, label))
+ (0, import_react45.createElement)("span", { className: "bt-bcard-ptitle" }, label),
+ (0, import_react45.createElement)("span", { className: "bt-bcard-excerpt" }, page.excerpt)
+ ) : (0, import_react45.createElement)("span", { className: "bt-bcard-blank" }, (0, import_react45.createElement)(GlobeIcon), (0, import_react45.createElement)("span", null, label))
),
- (0, import_react44.createElement)("button", {
+ (0, import_react45.createElement)("button", {
type: "button",
className: "bt-bcard-x",
"aria-label": t("Close tab"),
@@ -19357,36 +19846,36 @@ function BrowserCards({ bot, sessionId, roster, actions, useBrowserTabs, useBrow
void actions.browserCloseTab(bot.id, tabId);
}
}, "×"),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ className: "bt-bcard-row" },
- (0, import_react44.createElement)(Favicon, { src: page.favicon, className: "bt-bcard-fav" }),
- (0, import_react44.createElement)("span", { className: "bt-bcard-title" }, label),
- page.url ? (0, import_react44.createElement)("span", { className: "bt-bcard-host" }, hostOf(page.url)) : null
+ (0, import_react45.createElement)(Favicon, { src: page.favicon, className: "bt-bcard-fav" }),
+ (0, import_react45.createElement)("span", { className: "bt-bcard-title" }, label),
+ page.url ? (0, import_react45.createElement)("span", { className: "bt-bcard-host" }, hostOf(page.url)) : null
)
);
}),
- (0, import_react44.createElement)("button", { type: "button", className: "bt-bcard-new", style: { animationDelay: `${state.ids.length * 30}ms` }, onClick: () => actions.browserNewTab(sessionId) }, (0, import_react44.createElement)(PlusIcon), t("New tab"))
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-bcard-new", style: { animationDelay: `${state.ids.length * 30}ms` }, onClick: () => actions.browserNewTab(sessionId) }, (0, import_react45.createElement)(PlusIcon), t("New tab"))
);
}
function About({ text: text2, title = "About" }) {
- const [open, setOpen] = (0, import_react44.useState)(false);
+ const [open, setOpen] = (0, import_react45.useState)(false);
const long = text2.split("\n").length > 5 || text2.length > 240;
- const body = (0, import_react44.useRef)(null);
+ const body = (0, import_react45.useRef)(null);
useMorph(body, open);
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
null,
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t(title)),
- (0, import_react44.createElement)("div", { ref: body, className: "bt-about", "data-open": open || void 0 }, text2),
- long ? (0, import_react44.createElement)("button", { type: "button", className: "bt-more", onClick: () => setOpen((value) => !value) }, open ? t("Show less") : t("Show more")) : null
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t(title)),
+ (0, import_react45.createElement)("div", { ref: body, className: "bt-about", "data-open": open || void 0 }, text2),
+ long ? (0, import_react45.createElement)("button", { type: "button", className: "bt-more", onClick: () => setOpen((value) => !value) }, open ? t("Show less") : t("Show more")) : null
);
}
function SharedRoomApprovals({ room: room2 }) {
- const [items, setItems] = (0, import_react44.useState)(room2.pendingApprovals ?? []);
- const [busy, setBusy] = (0, import_react44.useState)("");
+ const [items, setItems] = (0, import_react45.useState)(room2.pendingApprovals ?? []);
+ const [busy, setBusy] = (0, import_react45.useState)("");
const face = room2.origin === "face-to-face";
- (0, import_react44.useEffect)(() => {
+ (0, import_react45.useEffect)(() => {
const haveItems = Array.isArray(room2.pendingApprovals) && room2.pendingApprovals.length;
if (haveItems) setItems(room2.pendingApprovals);
if (room2.viewerRole !== "invited-owner" && !face) return void 0;
@@ -19412,28 +19901,28 @@ function SharedRoomApprovals({ room: room2 }) {
setBusy("");
}
};
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ key: "approvals", className: "bt-shared-wait", "data-flybot": "room-pending-approvals" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Waiting for your approval"), (0, import_react44.createElement)("span", { className: "bt-chip" }, t("{count} to approve", { count: items.length }))),
- items.map((item) => (0, import_react44.createElement)(
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Waiting for your approval"), (0, import_react45.createElement)("span", { className: "bt-chip" }, t("{count} to approve", { count: items.length }))),
+ items.map((item) => (0, import_react45.createElement)(
"div",
{ key: item.id, className: "bt-set-row" },
- (0, import_react44.createElement)("span", { className: "bt-set-copy" }, item.text || item.summary || item.to || t("Outbound reply")),
- (0, import_react44.createElement)("button", { type: "button", className: "bt-mini", disabled: busy === item.id, onClick: () => decide(item, "approve") }, t("Approve")),
- (0, import_react44.createElement)("button", { type: "button", className: "bt-mini", disabled: busy === item.id, onClick: () => decide(item, "reject") }, t("Reject"))
+ (0, import_react45.createElement)("span", { className: "bt-set-copy" }, item.text || item.summary || item.to || t("Outbound reply")),
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-mini", disabled: busy === item.id, onClick: () => decide(item, "approve") }, t("Approve")),
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-mini", disabled: busy === item.id, onClick: () => decide(item, "reject") }, t("Reject"))
))
);
}
function FaceMembers({ room: room2, roster, actions }) {
const people2 = facePeople(room2, roster);
const pick2 = (bot) => call("social/face-lead", { roomId: room2.id, bot });
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
null,
- (0, import_react44.createElement)(FaceLead, { room: room2, roster, pick: pick2 }),
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Members · {count}", { count: people2.length })),
- (0, import_react44.createElement)("div", { className: "bt-members", role: "list" }, people2.map((person) => (0, import_react44.createElement)(FacePersonRow, {
+ (0, import_react45.createElement)(FaceLead, { room: room2, roster, pick: pick2 }),
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Members · {count}", { count: people2.length })),
+ (0, import_react45.createElement)("div", { className: "bt-members", role: "list" }, people2.map((person) => (0, import_react45.createElement)(FacePersonRow, {
key: person.key,
person,
roster,
@@ -19457,79 +19946,79 @@ function GroupOverview({ room: room2, roster, actions, usage, useWork, openSetti
};
const face = room2.origin === "face-to-face";
return [
- (0, import_react44.createElement)(FlyBotRoomOverview, { key: "plugin-overview", room: room2, roster, actions }),
- invited && room2.sharedFrom && !face ? (0, import_react44.createElement)(
+ (0, import_react45.createElement)(FlyBotRoomOverview, { key: "plugin-overview", room: room2, roster, actions }),
+ invited && room2.sharedFrom && !face ? (0, import_react45.createElement)(
"div",
{ key: "from", className: "bt-shared-from" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, title),
- (0, import_react44.createElement)("div", { className: "bt-set-hint" }, t("Your Bot was invited to this room by {name}", { name: room2.sharedFrom.inviterName })),
- room2.sharedFrom.invitedAt ? (0, import_react44.createElement)("div", { className: "bt-set-hint" }, t("Invited {when}", { when: new Date(room2.sharedFrom.invitedAt).toLocaleString() })) : null,
- (0, import_react44.createElement)("button", { type: "button", className: "bt-more", onClick: leaveMine }, t("Remove my Bot"))
- ) : face ? null : room2.notice ? (0, import_react44.createElement)(About, { key: "notice", title: "Notice", text: room2.notice }) : (0, import_react44.createElement)("button", { key: "notice", type: "button", className: "bt-more", onClick: openSettings }, t("Add a notice in group settings")),
- face ? null : (0, import_react44.createElement)(SharedRoomApprovals, { key: "approvals", room: room2 }),
- face && (room2.face?.status === "candidate" || room2.face?.status === "joining") ? null : face ? (0, import_react44.createElement)(FaceMembers, { key: "members", room: room2, roster, actions }) : (0, import_react44.createElement)(
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, title),
+ (0, import_react45.createElement)("div", { className: "bt-set-hint" }, t("Your Bot was invited to this room by {name}", { name: room2.sharedFrom.inviterName })),
+ room2.sharedFrom.invitedAt ? (0, import_react45.createElement)("div", { className: "bt-set-hint" }, t("Invited {when}", { when: new Date(room2.sharedFrom.invitedAt).toLocaleString() })) : null,
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-more", onClick: leaveMine }, t("Remove my Bot"))
+ ) : face ? null : room2.notice ? (0, import_react45.createElement)(About, { key: "notice", title: "Notice", text: room2.notice }) : (0, import_react45.createElement)("button", { key: "notice", type: "button", className: "bt-more", onClick: openSettings }, t("Add a notice in group settings")),
+ face ? null : (0, import_react45.createElement)(SharedRoomApprovals, { key: "approvals", room: room2 }),
+ face && (room2.face?.status === "candidate" || room2.face?.status === "joining") ? null : face ? (0, import_react45.createElement)(FaceMembers, { key: "members", room: room2, roster, actions }) : (0, import_react45.createElement)(
"div",
{ key: "members" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Members · {count}", { count: members.length + humans.length + remotes.length })),
- (0, import_react44.createElement)("div", { className: "bt-members", role: "list" }, [
- ...humans.map((person) => (0, import_react44.createElement)(
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Members · {count}", { count: members.length + humans.length + remotes.length })),
+ (0, import_react45.createElement)("div", { className: "bt-members", role: "list" }, [
+ ...humans.map((person) => (0, import_react45.createElement)(
"div",
{ key: person.id, role: "listitem" },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ className: "bt-member" },
- (0, import_react44.createElement)("span", { className: "bt-member-name" }, (0, import_react44.createElement)("span", null, person.displayName || person.id)),
- (0, import_react44.createElement)("span", { className: "bt-chip" }, t("Human")),
- person.role === "admin" ? (0, import_react44.createElement)("span", { className: "bt-chip bt-chip-admin" }, t("Admin")) : null
+ (0, import_react45.createElement)("span", { className: "bt-member-name" }, (0, import_react45.createElement)("span", null, person.displayName || person.id)),
+ (0, import_react45.createElement)("span", { className: "bt-chip" }, t("Human")),
+ person.role === "admin" ? (0, import_react45.createElement)("span", { className: "bt-chip bt-chip-admin" }, t("Admin")) : null
)
)),
- ...remotes.map((person) => (0, import_react44.createElement)(
+ ...remotes.map((person) => (0, import_react45.createElement)(
"div",
{ key: person.handle || person.id, role: "listitem" },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ className: "bt-member" },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"span",
{ className: "bt-member-name" },
- (0, import_react44.createElement)(BotAvatar, { bot: lookBotForRemote(person, roster), size: 26, badge: false, live: false }),
- (0, import_react44.createElement)("span", { title: person.handle || void 0 }, person.label || remoteBotTitle(person))
+ (0, import_react45.createElement)(BotAvatar, { bot: lookBotForRemote(person, roster), size: 26, badge: false, live: false }),
+ (0, import_react45.createElement)("span", { title: person.handle || void 0 }, person.label || remoteBotTitle(person))
),
- face ? null : (0, import_react44.createElement)("span", { className: "bt-chip" }, t("Friend's Bot"))
+ face ? null : (0, import_react45.createElement)("span", { className: "bt-chip" }, t("Friend's Bot"))
)
)),
...members.map((member) => {
const entry = entries2.find((item) => item.id === member.id);
- return (0, import_react44.createElement)(
+ return (0, import_react45.createElement)(
"div",
{ key: member.id, role: "listitem" },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ className: "bt-member" },
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"button",
{ type: "button", className: "bt-member-name", title: t("Open {name}'s chat", { name: member.name }), onClick: () => actions.openSession(member.id) },
- (0, import_react44.createElement)(BotAvatar, { bot: member, size: 26, main: isMainOf(roster, member.id), admin: room2.admin === member.id, live: false }),
- (0, import_react44.createElement)("span", null, member.name)
+ (0, import_react45.createElement)(BotAvatar, { bot: member, size: 26, main: isMainOf(roster, member.id), admin: room2.admin === member.id, live: false }),
+ (0, import_react45.createElement)("span", null, member.name)
),
- room2.admin === member.id ? (0, import_react44.createElement)("span", { className: "bt-chip bt-chip-admin" }, t("Admin")) : null
+ room2.admin === member.id ? (0, import_react45.createElement)("span", { className: "bt-chip bt-chip-admin" }, t("Admin")) : null
),
- entry ? (0, import_react44.createElement)(MemberWork, { entry, bot: member, room: room2, roster, actions, now }) : null
+ entry ? (0, import_react45.createElement)(MemberWork, { entry, bot: member, room: room2, roster, actions, now }) : null
);
})
])
),
- face ? null : (0, import_react44.createElement)(
+ face ? null : (0, import_react45.createElement)(
"div",
{ key: "mode" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Who answers")),
- (0, import_react44.createElement)("div", { className: "bt-kv" }, (0, import_react44.createElement)("span", null, t(ROOM_MODES.find(([id]) => id === shownMode(room2, roster))?.[1] ?? "Everyone")))
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Who answers")),
+ (0, import_react45.createElement)("div", { className: "bt-kv" }, (0, import_react45.createElement)("span", null, t(ROOM_MODES.find(([id]) => id === shownMode(room2, roster))?.[1] ?? "Everyone")))
),
- face || !usage ? null : (0, import_react44.createElement)(
+ face || !usage ? null : (0, import_react45.createElement)(
"div",
{ key: "usage" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Usage")),
- (0, import_react44.createElement)("div", { className: "bt-kv" }, (0, import_react44.createElement)("span", null, room2.name), (0, import_react44.createElement)("span", null, usage))
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Usage")),
+ (0, import_react45.createElement)("div", { className: "bt-kv" }, (0, import_react45.createElement)("span", null, room2.name), (0, import_react45.createElement)("span", null, usage))
)
];
}
@@ -19537,15 +20026,15 @@ function DetailsDrawer({ sessionId, startRenaming, startTab, hasStrip, roster, a
const owner = roster.byId[sessionId];
const part = owner ? currentPart(owner) : sessionId;
const isMainBot = isMainOf(roster, owner?.id);
- const [tab, setTab] = (0, import_react44.useState)("details");
+ const [tab, setTab] = (0, import_react45.useState)("details");
const room2 = roster.roomsById[sessionId];
- const [view, setView] = (0, import_react44.useState)(startTab === "settings" && (owner || room2) ? "settings" : "overview");
- const [editing, setEditing] = (0, import_react44.useState)(Boolean(startRenaming && (roster.byId[sessionId] || roster.roomsById[sessionId])));
- const [draftName, setDraftName] = (0, import_react44.useState)(roster.byId[sessionId]?.name ?? (roster.roomsById[sessionId]?.named ? roster.roomsById[sessionId].name : ""));
- const [copied, setCopied] = (0, import_react44.useState)(false);
- const [error, setError] = (0, import_react44.useState)("");
+ const [view, setView] = (0, import_react45.useState)(startTab === "settings" && (owner || room2) ? "settings" : "overview");
+ const [editing, setEditing] = (0, import_react45.useState)(Boolean(startRenaming && (roster.byId[sessionId] || roster.roomsById[sessionId])));
+ const [draftName, setDraftName] = (0, import_react45.useState)(roster.byId[sessionId]?.name ?? (roster.roomsById[sessionId]?.named ? roster.roomsById[sessionId].name : ""));
+ const [copied, setCopied] = (0, import_react45.useState)(false);
+ const [error, setError] = (0, import_react45.useState)("");
const glide = useGlide(tab);
- const last = (0, import_react44.useRef)({ view, tab, move: void 0 });
+ const last = (0, import_react45.useRef)({ view, tab, move: void 0 });
if (last.current.view !== view) last.current = { view, tab, move: view === "settings" ? "in" : "out" };
else if (last.current.tab !== tab) last.current = { view, tab, move: "tab" };
const move = last.current.move;
@@ -19580,37 +20069,37 @@ function DetailsDrawer({ sessionId, startRenaming, startTab, hasStrip, roster, a
actions.notify?.(t("Conversation copied as Markdown"));
});
};
- const errorLine = error ? (0, import_react44.createElement)("div", { className: "bt-error", role: "alert", style: { padding: 0 } }, error) : null;
+ const errorLine = error ? (0, import_react45.createElement)("div", { className: "bt-error", role: "alert", style: { padding: 0 } }, error) : null;
if ((bot || room2) && view === "settings" && !bot?.remote) {
return [
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ key: "head", className: "bt-subhead", "data-move": move },
- (0, import_react44.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Back to details"), onClick: () => setView("overview") }, (0, import_react44.createElement)(ChevronLeftIcon)),
- (0, import_react44.createElement)("span", { className: "bt-subhead-title" }, bot ? t("Settings") : t("Group settings")),
- hasStrip ? null : (0, import_react44.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Close details"), onClick: close }, (0, import_react44.createElement)(CloseIcon))
+ (0, import_react45.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Back to details"), onClick: () => setView("overview") }, (0, import_react45.createElement)(ChevronLeftIcon)),
+ (0, import_react45.createElement)("span", { className: "bt-subhead-title" }, bot ? t("Settings") : t("Group settings")),
+ hasStrip ? null : (0, import_react45.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Close details"), onClick: close }, (0, import_react45.createElement)(CloseIcon))
),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ key: "set-body", className: "bt-drawer-body bt-set-body", "data-move": move },
errorLine,
- bot ? (0, import_react44.createElement)(BotSettingsForm, { bot, roster, actions, run }) : (0, import_react44.createElement)(GroupSettingsForm, { room: room2, roster, actions, run, onDeleted: close })
+ bot ? (0, import_react45.createElement)(BotSettingsForm, { bot, roster, actions, run }) : (0, import_react45.createElement)(GroupSettingsForm, { room: room2, roster, actions, run, onDeleted: close })
)
];
}
- const top = (0, import_react44.createElement)(
+ const top = (0, import_react45.createElement)(
"div",
{ className: "bt-drawer-top", "data-move": side },
- bot || room2 ? (0, import_react44.createElement)("button", {
+ bot || room2 ? (0, import_react45.createElement)("button", {
type: "button",
className: "bt-round",
"aria-label": bot ? bot.remote ? t("Bot settings") : t("Edit Bot") : t("Group settings"),
title: bot ? bot.remote ? t("Bot settings") : t("Edit Bot") : t("Group settings"),
"data-info-row": "settings",
onClick: () => bot?.remote ? actions.openSettings("bots", bot.id) : setView("settings")
- }, (0, import_react44.createElement)(GearIcon)) : null,
- bot && !bot.remote && roster.browser === true && actions.openBrowser ? (0, import_react44.createElement)("button", { type: "button", className: "bt-round", "aria-label": t("Open browser"), title: t("Open this Bot's browser"), onClick: () => actions.openBrowser(sessionId) }, (0, import_react44.createElement)(GlobeIcon)) : null,
- bot || room2 ? (0, import_react44.createElement)("button", {
+ }, (0, import_react45.createElement)(GearIcon)) : null,
+ bot && !bot.remote && roster.browser === true && actions.openBrowser ? (0, import_react45.createElement)("button", { type: "button", className: "bt-round", "aria-label": t("Open browser"), title: t("Open this Bot's browser"), onClick: () => actions.openBrowser(sessionId) }, (0, import_react45.createElement)(GlobeIcon)) : null,
+ bot || room2 ? (0, import_react45.createElement)("button", {
type: "button",
className: "bt-round",
// #1347: the accessible name says what the click does, which is copy — "Share conversation"
@@ -19619,13 +20108,13 @@ function DetailsDrawer({ sessionId, startRenaming, startTab, hasStrip, roster, a
"aria-label": copied ? t("Copied conversation") : t("Copy conversation"),
title: copied ? t("Copied") : t("Copy conversation as Markdown"),
onClick: share
- }, copied ? (0, import_react44.createElement)("span", { key: "copied", className: "bt-pop-in" }, "✓") : (0, import_react44.createElement)(ShareIcon)) : null,
- hasStrip ? null : (0, import_react44.createElement)("button", { type: "button", className: "bt-round", "aria-label": t("Close details"), onClick: close }, (0, import_react44.createElement)(CloseIcon))
+ }, copied ? (0, import_react45.createElement)("span", { key: "copied", className: "bt-pop-in" }, "✓") : (0, import_react45.createElement)(ShareIcon)) : null,
+ hasStrip ? null : (0, import_react45.createElement)("button", { type: "button", className: "bt-round", "aria-label": t("Close details"), onClick: close }, (0, import_react45.createElement)(CloseIcon))
);
if (!bot && !room2) {
return [
- (0, import_react44.createElement)(import_react44.Fragment, { key: "top" }, top),
- (0, import_react44.createElement)("div", { key: "body", className: "bt-drawer-body" }, (0, import_react44.createElement)("div", { className: "bt-muted" }, t("This conversation is not part of your Bot team.")))
+ (0, import_react45.createElement)(import_react45.Fragment, { key: "top" }, top),
+ (0, import_react45.createElement)("div", { key: "body", className: "bt-drawer-body" }, (0, import_react45.createElement)("div", { className: "bt-muted" }, t("This conversation is not part of your Bot team.")))
];
}
const current = bot?.name ?? room2.name;
@@ -19639,12 +20128,12 @@ function DetailsDrawer({ sessionId, startRenaming, startTab, hasStrip, roster, a
const subtitle = bot ? bot.role : roomSubtitle(room2, roster);
const tabs = bot ? ["details", "browser"] : ["details"];
return [
- (0, import_react44.createElement)(import_react44.Fragment, { key: "top" }, top),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(import_react45.Fragment, { key: "top" }, top),
+ (0, import_react45.createElement)(
"div",
{ key: "id", className: "bt-drawer-id", "data-move": side },
- bot ? (0, import_react44.createElement)(BotAvatar, { bot, size: 64, state: botState(running, doing, roster.questions?.[part] !== void 0), main: isMainBot, badge: false, gaze: true, pokeable: true }) : (0, import_react44.createElement)(RoomAvatar, { room: room2, roster, size: 64 }),
- bot?.remote ? (0, import_react44.createElement)("div", { className: "bt-drawer-name" }, current) : room2?.origin === "face-to-face" ? (0, import_react44.createElement)("div", { className: "bt-drawer-name bt-drawer-name-face", title: current }, current) : editing ? (0, import_react44.createElement)("input", {
+ bot ? (0, import_react45.createElement)(BotAvatar, { bot, size: 64, state: botState(running, doing, roster.questions?.[part] !== void 0), main: isMainBot, badge: false, gaze: true, pokeable: true }) : (0, import_react45.createElement)(RoomAvatar, { room: room2, roster, size: 64 }),
+ bot?.remote ? (0, import_react45.createElement)("div", { className: "bt-drawer-name" }, current) : room2?.origin === "face-to-face" ? (0, import_react45.createElement)("div", { className: "bt-drawer-name bt-drawer-name-face", title: current }, current) : editing ? (0, import_react45.createElement)("input", {
className: "bt-drawer-name-input",
autoFocus: true,
value: draftName,
@@ -19659,59 +20148,59 @@ function DetailsDrawer({ sessionId, startRenaming, startTab, hasStrip, roster, a
setEditing(false);
}
}
- }) : (0, import_react44.createElement)("button", { type: "button", className: "bt-drawer-name", "aria-label": t("Rename {name}", { name: current }), title: t("Rename"), onClick: () => {
+ }) : (0, import_react45.createElement)("button", { type: "button", className: "bt-drawer-name", "aria-label": t("Rename {name}", { name: current }), title: t("Rename"), onClick: () => {
setDraftName(room2 && !room2.named ? "" : current);
setEditing(true);
} }, current),
- subtitle ? (0, import_react44.createElement)("span", { className: "bt-drawer-role" }, subtitle) : bot?.remote ? (0, import_react44.createElement)("span", { className: "bt-drawer-role" }, t("Friend's Bot")) : null
+ subtitle ? (0, import_react45.createElement)("span", { className: "bt-drawer-role" }, subtitle) : bot?.remote ? (0, import_react45.createElement)("span", { className: "bt-drawer-role" }, t("Friend's Bot")) : null
),
- bot?.remote ? null : (0, import_react44.createElement)(
+ bot?.remote ? null : (0, import_react45.createElement)(
"div",
{ key: "tabs", ref: glide.box, className: "bt-tabs", role: "tablist", "data-move": side },
- (0, import_react44.createElement)("span", { ref: glide.thumb, className: "bt-thumb", "aria-hidden": true }),
- tabs.map((key) => (0, import_react44.createElement)("button", { key, type: "button", role: "tab", className: "bt-tab", "aria-selected": tab === key, onClick: () => setTab(key) }, t(TAB_LABELS[key])))
+ (0, import_react45.createElement)("span", { ref: glide.thumb, className: "bt-thumb", "aria-hidden": true }),
+ tabs.map((key) => (0, import_react45.createElement)("button", { key, type: "button", role: "tab", className: "bt-tab", "aria-selected": tab === key, onClick: () => setTab(key) }, t(TAB_LABELS[key])))
),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ key: `body:${tab}`, className: "bt-drawer-body", "data-move": move },
errorLine,
- room2 && tab === "details" ? (0, import_react44.createElement)(GroupOverview, { room: room2, roster, actions, usage, useWork, openSettings: () => setView("settings") }) : null,
+ room2 && tab === "details" ? (0, import_react45.createElement)(GroupOverview, { room: room2, roster, actions, usage, useWork, openSettings: () => setView("settings") }) : null,
bot && bot.remote && tab === "details" ? [
- bot.remote.handle ? (0, import_react44.createElement)("div", { key: "handle", className: "bt-muted" }, bot.remote.handle) : null,
- (0, import_react44.createElement)(FlyBotDetails, { key: "social", bot, roster, actions })
+ bot.remote.handle ? (0, import_react45.createElement)("div", { key: "handle", className: "bt-muted" }, bot.remote.handle) : null,
+ (0, import_react45.createElement)(FlyBotDetails, { key: "social", bot, roster, actions })
] : null,
bot && !bot.remote && tab === "details" ? [
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(
"div",
{ key: "model", className: "bt-drawer-model" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Model")),
- (0, import_react44.createElement)(ModelMenu, { bot, roster, actions, run, wide: true }),
- modelOf(bot, roster) ? null : (0, import_react44.createElement)("div", { className: "bt-note" }, t("Pick a model and {name} can start.", { name: bot.name }))
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Model")),
+ (0, import_react45.createElement)(ModelMenu, { bot, roster, actions, run, wide: true }),
+ modelOf(bot, roster) ? null : (0, import_react45.createElement)("div", { className: "bt-note" }, t("Pick a model and {name} can start.", { name: bot.name }))
),
- (0, import_react44.createElement)(PermissionRow, { key: "permission", bot, roster, actions, run }),
- (0, import_react44.createElement)(
+ (0, import_react45.createElement)(PermissionRow, { key: "permission", bot, roster, actions, run }),
+ (0, import_react45.createElement)(
"div",
{ key: "folder", className: "bt-drawer-model" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Working folder")),
- (0, import_react44.createElement)(FolderMenu, { value: bot.workDir, actions, run, wide: true, onPick: (workDir) => run(actions.updateBot(bot.id, { workDir })) })
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Working folder")),
+ (0, import_react45.createElement)(FolderMenu, { value: bot.workDir, actions, run, wide: true, onPick: (workDir) => run(actions.updateBot(bot.id, { workDir })) })
),
- bot.instructions ? (0, import_react44.createElement)(About, { key: "about", text: bot.instructions }) : (0, import_react44.createElement)("button", { key: "about", type: "button", className: "bt-more", onClick: () => setView("settings") }, t("Add instructions in Bot settings")),
- roster.memory === false ? null : (0, import_react44.createElement)(MemoryRow, { key: "memory", bot, actions }),
- usage ? (0, import_react44.createElement)(
+ bot.instructions ? (0, import_react45.createElement)(About, { key: "about", text: bot.instructions }) : (0, import_react45.createElement)("button", { key: "about", type: "button", className: "bt-more", onClick: () => setView("settings") }, t("Add instructions in Bot settings")),
+ roster.memory === false ? null : (0, import_react45.createElement)(MemoryRow, { key: "memory", bot, actions }),
+ usage ? (0, import_react45.createElement)(
"div",
{ key: "usage" },
- (0, import_react44.createElement)("div", { className: "bt-section-title" }, t("Usage")),
- (0, import_react44.createElement)("div", { className: "bt-kv" }, (0, import_react44.createElement)("span", null, bot.name), (0, import_react44.createElement)("span", null, usage))
+ (0, import_react45.createElement)("div", { className: "bt-section-title" }, t("Usage")),
+ (0, import_react45.createElement)("div", { className: "bt-kv" }, (0, import_react45.createElement)("span", null, bot.name), (0, import_react45.createElement)("span", null, usage))
) : null,
- (0, import_react44.createElement)(ScheduleSummary, { key: "routines", bot, actions })
+ (0, import_react45.createElement)(ScheduleSummary, { key: "routines", bot, actions })
] : null,
- bot && !bot.remote && tab === "browser" ? (0, import_react44.createElement)(BrowserCards, { bot, sessionId, roster, actions, useBrowserTabs, useBrowserPages }) : null
+ bot && !bot.remote && tab === "browser" ? (0, import_react45.createElement)(BrowserCards, { bot, sessionId, roster, actions, useBrowserTabs, useBrowserPages }) : null
)
];
}
// src/client/browser-pane.js
-var import_react45 = require("react");
+var import_react46 = require("react");
var import_react_dom10 = require("react-dom");
var PANEL_LINGER_MS = 300;
var WIDTH_KEY = STORAGE.browserWidth;
@@ -19721,10 +20210,10 @@ var EMPTY_TABS2 = { ids: [], active: null };
var SPRING_LEAD2 = springEasing(576, 39.4);
var SPRING_TRAIL2 = springEasing(144, 19.7);
var icon2 = (paths) => function BrowserIcon() {
- return (0, import_react45.createElement)(
+ return (0, import_react46.createElement)(
"svg",
{ width: 16, height: 16, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true },
- paths.map((d, index) => (0, import_react45.createElement)("path", { key: index, d }))
+ paths.map((d, index) => (0, import_react46.createElement)("path", { key: index, d }))
);
};
var GlobeIcon = icon2(["M10 3a7 7 0 1 0 0 14 7 7 0 0 0 0-14z", "M3 10h14", "M10 3c2 2.2 2.9 4.5 2.9 7S12 14.8 10 17c-2-2.2-2.9-4.5-2.9-7S8 5.2 10 3z"]);
@@ -19736,9 +20225,9 @@ var CloseIcon2 = icon2(["M5.5 5.5l9 9M14.5 5.5l-9 9"]);
var PlusTabIcon = icon2(["M10 5v10M5 10h10"]);
var LockIcon2 = icon2(["M6.5 9V7a3.5 3.5 0 0 1 7 0v2", "M5.5 9h9v7h-9z"]);
function Favicon({ src, className }) {
- const [failed, setFailed] = (0, import_react45.useState)(null);
- if (!src || failed === src) return (0, import_react45.createElement)("span", { className: `${className} bt-ptab-globe` }, (0, import_react45.createElement)(GlobeIcon));
- return (0, import_react45.createElement)("img", { className, src, alt: "", "aria-hidden": true, onError: () => setFailed(src) });
+ const [failed, setFailed] = (0, import_react46.useState)(null);
+ if (!src || failed === src) return (0, import_react46.createElement)("span", { className: `${className} bt-ptab-globe` }, (0, import_react46.createElement)(GlobeIcon));
+ return (0, import_react46.createElement)("img", { className, src, alt: "", "aria-hidden": true, onError: () => setFailed(src) });
}
var savedWidth = () => {
try {
@@ -19797,11 +20286,11 @@ var reducedMotion2 = () => typeof matchMedia === "function" && matchMedia("(pref
var tabLabel = (page) => page.title || shortAddress(page.url) || t("New tab");
function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions, useBrowserPages }) {
const pages = useBrowserPages((map) => map);
- const wrap = (0, import_react45.useRef)(null);
- const ind = (0, import_react45.useRef)(null);
- const spot = (0, import_react45.useRef)(null);
- const under = (0, import_react45.useRef)(null);
- (0, import_react45.useLayoutEffect)(() => {
+ const wrap = (0, import_react46.useRef)(null);
+ const ind = (0, import_react46.useRef)(null);
+ const spot = (0, import_react46.useRef)(null);
+ const under = (0, import_react46.useRef)(null);
+ (0, import_react46.useLayoutEffect)(() => {
const box = wrap.current;
const capsule = ind.current;
if (!box || !capsule) return void 0;
@@ -19830,7 +20319,7 @@ function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions,
trail.cancel();
};
});
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
const box = wrap.current;
if (!box) return void 0;
const observer = new ResizeObserver(() => {
@@ -19844,13 +20333,13 @@ function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions,
observer.observe(box);
return () => observer.disconnect();
}, []);
- return (0, import_react45.createElement)(
+ return (0, import_react46.createElement)(
"div",
{ className: "bt-ptabs", role: "tablist", "aria-label": t("Panel tabs") },
- (0, import_react45.createElement)(
+ (0, import_react46.createElement)(
"div",
{ className: "bt-ptabs-in", ref: wrap },
- (0, import_react45.createElement)(
+ (0, import_react46.createElement)(
"button",
{
type: "button",
@@ -19860,13 +20349,13 @@ function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions,
title: bot.name,
onClick: () => onView("details")
},
- (0, import_react45.createElement)(BotMark, { bot, size: 20, state: reading ? "searching" : "idle" }),
- view === "details" ? (0, import_react45.createElement)("span", { className: "bt-ptab-name" }, bot.name) : null
+ (0, import_react46.createElement)(BotMark, { bot, size: 20, state: reading ? "searching" : "idle" }),
+ view === "details" ? (0, import_react46.createElement)("span", { className: "bt-ptab-name" }, bot.name) : null
),
ids.map((tabId) => {
const page = pages[tabId] ?? EMPTY_PAGE;
const on = view === "browser" && tabId === active;
- return (0, import_react45.createElement)(
+ return (0, import_react46.createElement)(
"button",
{
key: tabId,
@@ -19887,9 +20376,9 @@ function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions,
}
}
},
- (0, import_react45.createElement)(Favicon, { src: page.favicon, className: "bt-ptab-fav" }),
- (0, import_react45.createElement)("span", { className: "bt-ptab-title" }, tabLabel(page)),
- (0, import_react45.createElement)("span", {
+ (0, import_react46.createElement)(Favicon, { src: page.favicon, className: "bt-ptab-fav" }),
+ (0, import_react46.createElement)("span", { className: "bt-ptab-title" }, tabLabel(page)),
+ (0, import_react46.createElement)("span", {
className: "bt-ptab-x",
role: "button",
"aria-label": t("Close tab"),
@@ -19901,20 +20390,20 @@ function PanelStrip({ bot, subject, view, ids, active, reading, onView, actions,
}, "×")
);
}),
- (0, import_react45.createElement)("span", { ref: ind, className: "bt-ptab-ind", "aria-hidden": true })
+ (0, import_react46.createElement)("span", { ref: ind, className: "bt-ptab-ind", "aria-hidden": true })
),
// New tab and Close stay outside the scrolling tabs, so a narrow panel keeps both.
- (0, import_react45.createElement)("button", { type: "button", className: "bt-ptab-new", "aria-label": t("New tab"), title: t("New tab"), onClick: () => actions.browserNewTab(subject) }, (0, import_react45.createElement)(PlusTabIcon)),
- (0, import_react45.createElement)("button", { type: "button", className: "bt-icon-btn bt-ptab-close", "aria-label": t("Close panel"), title: t("Close panel"), onClick: () => actions.closePanel() }, (0, import_react45.createElement)(CloseIcon2))
+ (0, import_react46.createElement)("button", { type: "button", className: "bt-ptab-new", "aria-label": t("New tab"), title: t("New tab"), onClick: () => actions.browserNewTab(subject) }, (0, import_react46.createElement)(PlusTabIcon)),
+ (0, import_react46.createElement)("button", { type: "button", className: "bt-icon-btn bt-ptab-close", "aria-label": t("Close panel"), title: t("Close panel"), onClick: () => actions.closePanel() }, (0, import_react46.createElement)(CloseIcon2))
);
}
function BrowserView({ bot, tabId, leaving, landed, actions, useBrowserPages }) {
const page = useBrowserPages((pages) => pages[tabId ?? ""]) ?? EMPTY_PAGE;
- const frame = (0, import_react45.useRef)(null);
- const input = (0, import_react45.useRef)(null);
- const [draft, setDraft] = (0, import_react45.useState)(null);
+ const frame = (0, import_react46.useRef)(null);
+ const input = (0, import_react46.useRef)(null);
+ const [draft, setDraft] = (0, import_react46.useState)(null);
const showGuest = landed && !leaving && Boolean(page.url) && !page.error;
- (0, import_react45.useLayoutEffect)(() => {
+ (0, import_react46.useLayoutEffect)(() => {
const element = frame.current;
if (!element || leaving || !tabId) {
void actions.browserShow(null);
@@ -19940,7 +20429,7 @@ function BrowserView({ bot, tabId, leaving, landed, actions, useBrowserPages })
window.removeEventListener("resize", schedule);
};
}, [tabId, showGuest, leaving]);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
setDraft(null);
if (landed && !page.url) input.current?.focus();
}, [tabId, landed]);
@@ -19956,27 +20445,27 @@ function BrowserView({ bot, tabId, leaving, landed, actions, useBrowserPages })
};
const editing = draft !== null;
const secure = /^https:/i.test(page.url);
- return (0, import_react45.createElement)(
+ return (0, import_react46.createElement)(
"div",
{ className: "bt-panel-view bt-panel-browser", "aria-label": t("{name}'s browser", { name: bot.name }) },
- (0, import_react45.createElement)(
+ (0, import_react46.createElement)(
"div",
{ className: "bt-browser-bar" },
- (0, import_react45.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Back"), title: t("Back"), disabled: !page.canGoBack, onClick: () => actions.browserCommand(tabId, "back") }, (0, import_react45.createElement)(BackIcon)),
- (0, import_react45.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Forward"), title: t("Forward"), disabled: !page.canGoForward, onClick: () => actions.browserCommand(tabId, "forward") }, (0, import_react45.createElement)(ForwardIcon)),
- (0, import_react45.createElement)("button", {
+ (0, import_react46.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Back"), title: t("Back"), disabled: !page.canGoBack, onClick: () => actions.browserCommand(tabId, "back") }, (0, import_react46.createElement)(BackIcon)),
+ (0, import_react46.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Forward"), title: t("Forward"), disabled: !page.canGoForward, onClick: () => actions.browserCommand(tabId, "forward") }, (0, import_react46.createElement)(ForwardIcon)),
+ (0, import_react46.createElement)("button", {
type: "button",
className: "bt-icon-btn",
disabled: !page.url,
"aria-label": page.loading ? t("Stop") : t("Reload"),
title: page.loading ? t("Stop") : t("Reload"),
onClick: () => actions.browserCommand(tabId, page.loading ? "stop" : "reload")
- }, (0, import_react45.createElement)(page.loading ? StopIcon : ReloadIcon)),
- (0, import_react45.createElement)(
+ }, (0, import_react46.createElement)(page.loading ? StopIcon : ReloadIcon)),
+ (0, import_react46.createElement)(
"form",
{ className: "bt-browser-address", onSubmit: go, "data-editing": editing || void 0 },
- (0, import_react45.createElement)("span", { className: "bt-browser-scheme", "aria-hidden": true }, (0, import_react45.createElement)(secure && !editing ? LockIcon2 : GlobeIcon)),
- (0, import_react45.createElement)("input", {
+ (0, import_react46.createElement)("span", { className: "bt-browser-scheme", "aria-hidden": true }, (0, import_react46.createElement)(secure && !editing ? LockIcon2 : GlobeIcon)),
+ (0, import_react46.createElement)("input", {
ref: input,
type: "text",
spellCheck: false,
@@ -20000,25 +20489,25 @@ function BrowserView({ bot, tabId, leaving, landed, actions, useBrowserPages })
}
})
),
- page.loading ? (0, import_react45.createElement)("span", { className: "bt-browser-progress", "aria-hidden": true }) : null
+ page.loading ? (0, import_react46.createElement)("span", { className: "bt-browser-progress", "aria-hidden": true }) : null
),
- (0, import_react45.createElement)(
+ (0, import_react46.createElement)(
"div",
{ ref: frame, className: "bt-browser-frame", "data-guest": showGuest || void 0 },
- page.error ? (0, import_react45.createElement)(
+ page.error ? (0, import_react46.createElement)(
"div",
{ className: "bt-browser-empty" },
- (0, import_react45.createElement)("div", { className: "bt-browser-empty-title" }, t("This page didn’t load")),
- (0, import_react45.createElement)("div", { className: "bt-browser-empty-text" }, t(page.error)),
- page.url ? (0, import_react45.createElement)("button", { type: "button", className: "bt-browser-retry", onClick: () => {
+ (0, import_react46.createElement)("div", { className: "bt-browser-empty-title" }, t("This page didn’t load")),
+ (0, import_react46.createElement)("div", { className: "bt-browser-empty-text" }, t(page.error)),
+ page.url ? (0, import_react46.createElement)("button", { type: "button", className: "bt-browser-retry", onClick: () => {
void actions.browserNavigate(tabId, page.url);
} }, t("Try again")) : null
- ) : !page.url ? (0, import_react45.createElement)(
+ ) : !page.url ? (0, import_react46.createElement)(
"div",
{ className: "bt-browser-empty" },
- (0, import_react45.createElement)(BotMark, { bot, size: 48, state: "idle", live: true }),
- (0, import_react45.createElement)("div", { className: "bt-browser-empty-title" }, t("{name}'s browser", { name: bot.name })),
- (0, import_react45.createElement)("div", { className: "bt-browser-empty-text" }, t("Open a page here and {name} can read it with you. Logins and cookies stay with {name}; other Bots never see them.", { name: bot.name }))
+ (0, import_react46.createElement)(BotMark, { bot, size: 48, state: "idle", live: true }),
+ (0, import_react46.createElement)("div", { className: "bt-browser-empty-title" }, t("{name}'s browser", { name: bot.name })),
+ (0, import_react46.createElement)("div", { className: "bt-browser-empty-text" }, t("Open a page here and {name} can read it with you. Logins and cookies stay with {name}; other Bots never see them.", { name: bot.name }))
) : null
)
);
@@ -20030,41 +20519,41 @@ function BotPanel({ pane, leaving, roster, actions, useSessions, useSessionStatu
const tabState = useBrowserTabs((map) => bot ? map[bot.id] ?? EMPTY_TABS2 : EMPTY_TABS2);
const active = tabState.active;
const page = useBrowserPages((pages) => (active ? pages[active] : null) ?? EMPTY_PAGE);
- const root = (0, import_react45.useRef)(null);
- const fly = (0, import_react45.useRef)(null);
- const [landed, setLanded] = (0, import_react45.useState)(false);
- const [settling, setSettling] = (0, import_react45.useState)(false);
- const [width, setWidth] = (0, import_react45.useState)(savedWidth);
- const [viewport, setViewport] = (0, import_react45.useState)(() => window.innerWidth);
- const [dragging, setDragging] = (0, import_react45.useState)(false);
- const [resizing, setResizing] = (0, import_react45.useState)(false);
+ const root = (0, import_react46.useRef)(null);
+ const fly = (0, import_react46.useRef)(null);
+ const [landed, setLanded] = (0, import_react46.useState)(false);
+ const [settling, setSettling] = (0, import_react46.useState)(false);
+ const [width, setWidth] = (0, import_react46.useState)(savedWidth);
+ const [viewport, setViewport] = (0, import_react46.useState)(() => window.innerWidth);
+ const [dragging, setDragging] = (0, import_react46.useState)(false);
+ const [resizing, setResizing] = (0, import_react46.useState)(false);
const instant = dragging || resizing;
- const [reading, setReading] = (0, import_react45.useState)(false);
+ const [reading, setReading] = (0, import_react46.useState)(false);
const panelWidth = fitWidth(width ?? (view === "browser" ? DEFAULT_WIDTH : DETAILS_WIDTH), widthRange(view, viewport));
- (0, import_react45.useLayoutEffect)(() => {
+ (0, import_react46.useLayoutEffect)(() => {
if (view === "browser" && width === null) setWidth(DEFAULT_WIDTH);
}, [view, width]);
- (0, import_react45.useLayoutEffect)(() => {
+ (0, import_react46.useLayoutEffect)(() => {
chatRoom.hold(instant);
}, [instant]);
- const [last, setLast] = (0, import_react45.useState)({ view, width: panelWidth });
+ const [last, setLast] = (0, import_react46.useState)({ view, width: panelWidth });
if (last.view !== view || last.width !== panelWidth) {
setLast({ view, width: panelWidth });
if (last.view !== view) setSettling(last.width !== panelWidth && !instant);
}
- const shownView = (0, import_react45.useRef)(view);
- (0, import_react45.useLayoutEffect)(() => {
+ const shownView = (0, import_react46.useRef)(view);
+ (0, import_react46.useLayoutEffect)(() => {
const switched = settling && shownView.current !== view;
shownView.current = view;
if (switched) chatRoom.hold(true);
chatRoom.set(leaving ? null : panelWidth);
if (switched) chatRoom.hold(false);
}, [view, panelWidth, leaving]);
- (0, import_react45.useEffect)(() => () => {
+ (0, import_react46.useEffect)(() => () => {
chatRoom.set(null);
chatRoom.hold(false);
}, []);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
let timer;
const onResize = () => {
setResizing(true);
@@ -20078,28 +20567,28 @@ function BotPanel({ pane, leaving, roster, actions, useSessions, useSessionStatu
window.removeEventListener("resize", onResize);
};
}, []);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
if (!settling) return void 0;
const timer = setTimeout(() => setSettling(false), SPRING_SHAPE.duration + 40);
return () => clearTimeout(timer);
}, [settling, view]);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
const timer = setTimeout(() => setLanded(true), 360);
return () => clearTimeout(timer);
}, []);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
if (canBrowse) actions.browserEnsure(bot.id);
}, [bot?.id, canBrowse]);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
if (view === "browser" && (active === null || !tabState.ids.includes(active))) actions.setPanelView("details");
}, [view, active, tabState.ids.length]);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
if (view !== "browser" || leaving) void actions.browserShow?.(null);
}, [view, leaving]);
- (0, import_react45.useEffect)(() => () => {
+ (0, import_react46.useEffect)(() => () => {
void actions.browserShow?.(null);
}, []);
- (0, import_react45.useEffect)(() => {
+ (0, import_react46.useEffect)(() => {
if (!page.readAt || Date.now() - page.readAt > READ_FLASH_MS) return void 0;
setReading(true);
const timer = setTimeout(() => setReading(false), READ_FLASH_MS);
@@ -20136,7 +20625,7 @@ function BotPanel({ pane, leaving, roster, actions, useSessions, useSessionStatu
return actions[name](...args);
};
}
- (0, import_react45.useLayoutEffect)(() => {
+ (0, import_react46.useLayoutEffect)(() => {
const move = fly.current;
if (!move) return;
fly.current = null;
@@ -20219,7 +20708,7 @@ function BotPanel({ pane, leaving, roster, actions, useSessions, useSessionStatu
for (const name of ends) grip.addEventListener(name, onEnd);
};
const hasStrip = canBrowse && tabState.ids.length > 0;
- return (0, import_react45.createElement)(
+ return (0, import_react46.createElement)(
"aside",
{
ref: root,
@@ -20236,15 +20725,15 @@ function BotPanel({ pane, leaving, roster, actions, useSessions, useSessionStatu
if (event.target === event.currentTarget) setLanded(true);
}
},
- leaving ? null : (0, import_react45.createElement)("div", { className: "bt-panel-grip", role: "separator", "aria-orientation": "vertical", "aria-label": t("Resize panel"), onPointerDown: startResize }),
+ leaving ? null : (0, import_react46.createElement)("div", { className: "bt-panel-grip", role: "separator", "aria-orientation": "vertical", "aria-label": t("Resize panel"), onPointerDown: startResize }),
// Over the whole window while dragging: the cursor stays a resize cursor and the
// pages underneath (the chat, the guest) see no pointer.
- dragging ? (0, import_react_dom10.createPortal)((0, import_react45.createElement)("div", { className: "bt-drag-shield", "aria-hidden": true }), document.body) : null,
- hasStrip ? (0, import_react45.createElement)(PanelStrip, { bot, subject: pane.id, view, ids: tabState.ids, active, reading, onView: switchView, actions: panelActions, useBrowserPages }) : null,
- view === "browser" && bot ? (0, import_react45.createElement)(BrowserView, { key: `browser:${active}`, bot, tabId: active, leaving, landed: landed && !settling, actions, useBrowserPages }) : (0, import_react45.createElement)(
+ dragging ? (0, import_react_dom10.createPortal)((0, import_react46.createElement)("div", { className: "bt-drag-shield", "aria-hidden": true }), document.body) : null,
+ hasStrip ? (0, import_react46.createElement)(PanelStrip, { bot, subject: pane.id, view, ids: tabState.ids, active, reading, onView: switchView, actions: panelActions, useBrowserPages }) : null,
+ view === "browser" && bot ? (0, import_react46.createElement)(BrowserView, { key: `browser:${active}`, bot, tabId: active, leaving, landed: landed && !settling, actions, useBrowserPages }) : (0, import_react46.createElement)(
"div",
{ key: `details:${pane.id}:${pane.renaming ? "rename" : ""}:${pane.tab ?? ""}`, className: "bt-panel-view" },
- (0, import_react45.createElement)(DetailsDrawer, {
+ (0, import_react46.createElement)(DetailsDrawer, {
sessionId: pane.id,
startRenaming: pane.renaming,
startTab: pane.tab,
@@ -20341,7 +20830,7 @@ var BROWSER_CSS = `
`;
// src/client/remote-bot-settings.js
-var import_react46 = require("react");
+var import_react47 = require("react");
var REMOTE_BOT_SETTINGS_CSS = `
.bt-remote-sheet-layer{position:fixed;inset:0;z-index:120;isolation:isolate;display:flex;align-items:flex-end;justify-content:center;padding:16px;pointer-events:none}
.bt-remote-sheet-layer[data-leaving]{pointer-events:none}
@@ -20365,8 +20854,8 @@ var REMOTE_BOT_SETTINGS_CSS = `
function RemoteBotSettingsSheet({ bot, roster, actions, leaving = false }) {
const close = () => actions.closeSettings();
useEscape(close);
- const dialog = (0, import_react46.useRef)(null);
- (0, import_react46.useEffect)(() => {
+ const dialog = (0, import_react47.useRef)(null);
+ (0, import_react47.useEffect)(() => {
const before = document.activeElement;
dialog.current?.focus?.({ preventScroll: true });
return () => {
@@ -20381,37 +20870,37 @@ function RemoteBotSettingsSheet({ bot, roster, actions, leaving = false }) {
};
if (!bot?.remote) return null;
const who = bot.remote.homeName || bot.remote.owner || bot.remote.home || t("Friend's Bot");
- return (0, import_react46.createElement)(
+ return (0, import_react47.createElement)(
"div",
{ className: "bt-remote-sheet-layer", "data-leaving": leaving || void 0, "data-flybot": "remote-bot-sheet" },
- (0, import_react46.createElement)("div", { className: "bt-scrim", onMouseDown: close }),
- (0, import_react46.createElement)(
+ (0, import_react47.createElement)("div", { className: "bt-scrim", onMouseDown: close }),
+ (0, import_react47.createElement)(
"div",
{ className: "bt-remote-sheet", role: "dialog", "aria-modal": true, "aria-label": t("Bot settings"), tabIndex: -1, ref: dialog, onKeyDown },
- (0, import_react46.createElement)(
+ (0, import_react47.createElement)(
"div",
{ className: "bt-remote-sheet-head" },
- (0, import_react46.createElement)(BotMark, { bot, size: 40, live: true }),
- (0, import_react46.createElement)(
+ (0, import_react47.createElement)(BotMark, { bot, size: 40, live: true }),
+ (0, import_react47.createElement)(
"div",
{ className: "bt-remote-sheet-who" },
- (0, import_react46.createElement)("span", { className: "bt-remote-sheet-name" }, bot.name),
- (0, import_react46.createElement)("span", { className: "bt-remote-sheet-sub" }, who)
+ (0, import_react47.createElement)("span", { className: "bt-remote-sheet-name" }, bot.name),
+ (0, import_react47.createElement)("span", { className: "bt-remote-sheet-sub" }, who)
),
- (0, import_react46.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Close settings"), onClick: close }, (0, import_react46.createElement)(CloseIcon))
+ (0, import_react47.createElement)("button", { type: "button", className: "bt-icon-btn", "aria-label": t("Close settings"), onClick: close }, (0, import_react47.createElement)(CloseIcon))
),
- (0, import_react46.createElement)(
+ (0, import_react47.createElement)(
"div",
{ className: "bt-remote-sheet-body" },
- bot.remote.handle ? (0, import_react46.createElement)("div", { className: "bt-muted", style: { marginBottom: 8, fontSize: 12 } }, bot.remote.handle) : null,
- (0, import_react46.createElement)(FlyBotDetails, { bot, roster, actions })
+ bot.remote.handle ? (0, import_react47.createElement)("div", { className: "bt-muted", style: { marginBottom: 8, fontSize: 12 } }, bot.remote.handle) : null,
+ (0, import_react47.createElement)(FlyBotDetails, { bot, roster, actions })
)
)
);
}
// src/client/overlays.js
-var import_react47 = require("react");
+var import_react48 = require("react");
var import_react_dom11 = require("react-dom");
var DIALOG_EXIT_MS = 160;
var MENU_EXIT_MS3 = 120;
@@ -20420,15 +20909,15 @@ function Overlays({ useRoster, useUi, useSessions, useSessionStatus, useActivity
const ui2 = useUi((value) => value);
useRegistry((value) => value);
const current = useSessions((list) => Object.values(list.byId).find((session) => (session?.retainedBy?.mainView ?? 0) > 0)?.id ?? null);
- const previous = (0, import_react47.useRef)(current);
- (0, import_react47.useEffect)(() => {
+ const previous = (0, import_react48.useRef)(current);
+ (0, import_react48.useEffect)(() => {
if (previous.current === current) return;
previous.current = current;
if (current) actions.followPanel?.(current);
}, [current]);
const open = ui2.details ? { id: ui2.details, view: ui2.view ?? "details", renaming: ui2.renaming, tab: ui2.tab } : null;
- const [kept, setKept] = (0, import_react47.useState)(open);
- (0, import_react47.useEffect)(() => {
+ const [kept, setKept] = (0, import_react48.useState)(open);
+ (0, import_react48.useEffect)(() => {
if (open) {
setKept(open);
return void 0;
@@ -20444,20 +20933,20 @@ function Overlays({ useRoster, useUi, useSessions, useSessionStatus, useActivity
const [menu, menuLeaving] = useLinger(ui2.menu, MENU_EXIT_MS3);
const [inbox, inboxLeaving] = useLinger(ui2.inbox ?? null, DIALOG_EXIT_MS);
const [board, boardLeaving] = useLinger(ui2.board ?? null, DIALOG_EXIT_MS);
- return (0, import_react47.createElement)(
- import_react47.Fragment,
+ return (0, import_react48.createElement)(
+ import_react48.Fragment,
null,
- pane ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(BotPanel, { pane, leaving: open === null, roster, actions, useSessions, useSessionStatus, useActivity, useWork, useBrowserTabs, useBrowserPages }), document.body) : null,
- ui2.newChat ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(NewChat, { key: ui2.newChat, mode: ui2.newChat, roster, actions }), document.body) : null,
- ui2.palette ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(CommandPalette, { key: ui2.palette.token, start: ui2.palette.query, token: ui2.palette.token, roster, actions, useSessions }), document.body) : null,
- ui2.exchange ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(ExchangeDialog, { pair: ui2.exchange, roster, actions }), document.body) : null,
- ui2.voice ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(VoiceMode, { key: ui2.voice, sessionId: ui2.voice, roster, actions, useSessions, useSessionStatus }), document.body) : null,
- menu ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(ContextMenu, { key: `${menu.kind ?? ""}:${menu.id}:${menu.x}:${menu.y}`, menu, roster, actions, leaving: menuLeaving }), document.body) : null,
- settings ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(SettingsDialog, { page: settings.page, id: settings.id, roster, actions, useUpdate, leaving: settingsLeaving }), document.body) : null,
- remoteBotSettings ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(RemoteBotSettingsSheet, { key: remoteBotSettings, bot: roster.byId[remoteBotSettings], roster, actions, leaving: remoteLeaving }), document.body) : null,
- memory && roster.byId[memory] ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(MemoryDialog, { key: memory, bot: roster.byId[memory], actions, leaving: memoryLeaving }), document.body) : null,
- inbox ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(InboxDialog, { roster, useWork, useSessions, actions, leaving: inboxLeaving }), document.body) : null,
- board ? (0, import_react_dom11.createPortal)((0, import_react47.createElement)(KanbanDialog, { roster, actions, leaving: boardLeaving }), document.body) : null
+ pane ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(BotPanel, { pane, leaving: open === null, roster, actions, useSessions, useSessionStatus, useActivity, useWork, useBrowserTabs, useBrowserPages }), document.body) : null,
+ ui2.newChat ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(NewChat, { key: ui2.newChat, mode: ui2.newChat, roster, actions }), document.body) : null,
+ ui2.palette ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(CommandPalette, { key: ui2.palette.token, start: ui2.palette.query, token: ui2.palette.token, roster, actions, useSessions }), document.body) : null,
+ ui2.exchange ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(ExchangeDialog, { pair: ui2.exchange, roster, actions }), document.body) : null,
+ ui2.voice ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(VoiceMode, { key: ui2.voice, sessionId: ui2.voice, roster, actions, useSessions, useSessionStatus }), document.body) : null,
+ menu ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(ContextMenu, { key: `${menu.kind ?? ""}:${menu.id}:${menu.x}:${menu.y}`, menu, roster, actions, leaving: menuLeaving }), document.body) : null,
+ settings ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(SettingsDialog, { page: settings.page, id: settings.id, roster, actions, useUpdate, leaving: settingsLeaving }), document.body) : null,
+ remoteBotSettings ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(RemoteBotSettingsSheet, { key: remoteBotSettings, bot: roster.byId[remoteBotSettings], roster, actions, leaving: remoteLeaving }), document.body) : null,
+ memory && roster.byId[memory] ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(MemoryDialog, { key: memory, bot: roster.byId[memory], actions, leaving: memoryLeaving }), document.body) : null,
+ inbox ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(InboxDialog, { roster, useWork, useSessions, actions, leaving: inboxLeaving }), document.body) : null,
+ board ? (0, import_react_dom11.createPortal)((0, import_react48.createElement)(KanbanDialog, { roster, actions, leaving: boardLeaving }), document.body) : null
);
}
@@ -21412,7 +21901,7 @@ function writeMode(mode, storage = globalThis.localStorage) {
}
// src/client/user-message.js
-var import_react48 = require("react");
+var import_react49 = require("react");
var ui = __toESM(require("@deepseek-ai/dsh-client-ui-primitives"), 1);
var canDrawUserMessages = () => typeof ui.projectUserText === "function";
function contentParts(content) {
@@ -21498,38 +21987,38 @@ function userTextParts(text2, bots, referenceLabels = []) {
return parts;
}
function UserText({ text: text2, bots, referenceLabels, skillNames, references, actions }) {
- const chip = (part) => [(0, import_react48.createElement)(BotMark, { bot: part.bot.draw ?? part.bot, size: 16 }), `@${part.bot.mentionLabel ?? part.label}`];
+ const chip = (part) => [(0, import_react49.createElement)(BotMark, { bot: part.bot.draw ?? part.bot, size: 16 }), `@${part.bot.mentionLabel ?? part.label}`];
return userTextParts(text2, bots, referenceLabels).map((part, index) => {
- if (!part.bot) return (0, import_react48.createElement)(import_react48.Fragment, { key: index }, ui.projectUserText(part.text, referenceLabels, skillNames, "skill", references));
+ if (!part.bot) return (0, import_react49.createElement)(import_react49.Fragment, { key: index }, ui.projectUserText(part.text, referenceLabels, skillNames, "skill", references));
const title = `@${part.bot.name}`;
- return typeof part.bot.id === "string" ? (0, import_react48.createElement)("button", { key: index, type: "button", className: "bt-umention", title, onClick: () => actions.openSession(part.bot.id) }, chip(part)) : (0, import_react48.createElement)("span", { key: index, className: "bt-umention", title }, chip(part));
+ return typeof part.bot.id === "string" ? (0, import_react49.createElement)("button", { key: index, type: "button", className: "bt-umention", title, onClick: () => actions.openSession(part.bot.id) }, chip(part)) : (0, import_react49.createElement)("span", { key: index, className: "bt-umention", title }, chip(part));
});
}
function Attachments({ attachments, renderMessageImages }) {
const compact2 = attachments.length > 1;
- return (0, import_react48.createElement)("div", { className: "bt-uattach" }, attachments.map((block, index) => {
+ return (0, import_react49.createElement)("div", { className: "bt-uattach" }, attachments.map((block, index) => {
if (block.type === "image") {
- return renderMessageImages ? (0, import_react48.createElement)(import_react48.Fragment, { key: index }, renderMessageImages({ images: [{ attachment: block.attachment }], align: "end", compact: compact2 })) : null;
+ return renderMessageImages ? (0, import_react49.createElement)(import_react49.Fragment, { key: index }, renderMessageImages({ images: [{ attachment: block.attachment }], align: "end", compact: compact2 })) : null;
}
const file = block.attachment;
const meta = [ui.fileExtension?.(file.name)?.toUpperCase().slice(0, 8), ui.fileSizeText?.(file.bytes)].filter(Boolean).join(" · ");
- return (0, import_react48.createElement)(
+ return (0, import_react49.createElement)(
"span",
{ key: index, className: "bt-ufile", title: file.name },
- ui.FileTypeIcon ? (0, import_react48.createElement)(ui.FileTypeIcon, { path: file.name, className: "bt-ufile-icon" }) : null,
- (0, import_react48.createElement)("span", { className: "bt-ufile-text" }, (0, import_react48.createElement)("span", { className: "bt-ufile-name" }, file.name), meta ? (0, import_react48.createElement)("span", { className: "bt-ufile-meta" }, meta) : null)
+ ui.FileTypeIcon ? (0, import_react49.createElement)(ui.FileTypeIcon, { path: file.name, className: "bt-ufile-icon" }) : null,
+ (0, import_react49.createElement)("span", { className: "bt-ufile-text" }, (0, import_react49.createElement)("span", { className: "bt-ufile-name" }, file.name), meta ? (0, import_react49.createElement)("span", { className: "bt-ufile-meta" }, meta) : null)
);
}));
}
function CopyButton({ text: text2 }) {
- const [copied, setCopied] = (0, import_react48.useState)(false);
+ const [copied, setCopied] = (0, import_react49.useState)(false);
const copy2 = () => {
void navigator.clipboard?.writeText(text2).then(() => {
setCopied(true);
setTimeout(() => setCopied(false), 1e3);
});
};
- return (0, import_react48.createElement)("button", { type: "button", className: "bt-tool", "aria-label": copied ? t("Copied") : t("Copy"), title: copied ? t("Copied") : t("Copy"), onClick: copy2 }, copied ? (0, import_react48.createElement)(CheckIcon) : (0, import_react48.createElement)(CopyIcon));
+ return (0, import_react49.createElement)("button", { type: "button", className: "bt-tool", "aria-label": copied ? t("Copied") : t("Copy"), title: copied ? t("Copied") : t("Copy"), onClick: copy2 }, copied ? (0, import_react49.createElement)(CheckIcon) : (0, import_react49.createElement)(CopyIcon));
}
var clock3 = (time) => typeof time === "number" ? new Date(time).toLocaleTimeString(dateLocale(), { hour: "numeric", minute: "2-digit" }) : void 0;
function UserMessageCell({ node, sessionId, useRoster, actions, renderMessageImages, openFile, openSkill }) {
@@ -21546,7 +22035,7 @@ function UserMessageCell({ node, sessionId, useRoster, actions, renderMessageIma
const person = incoming && author.authorKind === "human" && !author.ownerName;
const faceMine = Boolean(room2?.origin === "face-to-face" && !incoming);
const myName = faceMine ? facePeople(room2, roster).find((entry) => entry.mine)?.name || cleanPeerName(roster.self?.displayName, "") || author?.name || "" : "";
- return (0, import_react48.createElement)(
+ return (0, import_react49.createElement)(
"div",
{
className: incoming ? "bt-umsg bt-umsg-other" : "bt-umsg",
@@ -21556,22 +22045,22 @@ function UserMessageCell({ node, sessionId, useRoster, actions, renderMessageIma
"data-author-kind": author?.authorKind,
"data-author-name": author?.name
},
- person ? (0, import_react48.createElement)("span", { className: "bt-lead", title: author.name }, (0, import_react48.createElement)(PersonMark, { name: author.name })) : null,
- faceMine ? (0, import_react48.createElement)("span", { className: "bt-lead", title: myName || void 0 }, (0, import_react48.createElement)(PersonMark, { name: myName || void 0 })) : null,
- (0, import_react48.createElement)(
+ person ? (0, import_react49.createElement)("span", { className: "bt-lead", title: author.name }, (0, import_react49.createElement)(PersonMark, { name: author.name })) : null,
+ faceMine ? (0, import_react49.createElement)("span", { className: "bt-lead", title: myName || void 0 }, (0, import_react49.createElement)(PersonMark, { name: myName || void 0 })) : null,
+ (0, import_react49.createElement)(
"div",
{ className: "bt-ustack" },
- faceMine && myName ? (0, import_react48.createElement)("span", { className: "bt-uauthor" }, myName) : author && (incoming || multiHuman) ? (0, import_react48.createElement)("span", { className: "bt-uauthor" }, author.name, author.ownerName ? (0, import_react48.createElement)("span", { className: "bt-chip" }, t("Friend's Bot")) : null) : null,
- attachments.length > 0 ? (0, import_react48.createElement)(Attachments, { attachments, renderMessageImages }) : null,
- text2 !== "" || rest.length > 0 ? (0, import_react48.createElement)(
+ faceMine && myName ? (0, import_react49.createElement)("span", { className: "bt-uauthor" }, myName) : author && (incoming || multiHuman) ? (0, import_react49.createElement)("span", { className: "bt-uauthor" }, author.name, author.ownerName ? (0, import_react49.createElement)("span", { className: "bt-chip" }, t("Friend's Bot")) : null) : null,
+ attachments.length > 0 ? (0, import_react49.createElement)(Attachments, { attachments, renderMessageImages }) : null,
+ text2 !== "" || rest.length > 0 ? (0, import_react49.createElement)(
"div",
{ className: "bt-ubody", title: clock3(data.time) },
- (0, import_react48.createElement)(UserText, { text: text2, bots: mentionableBots(roster, sessionId, { fromFriend: Boolean(incoming && author.ownerName) }), referenceLabels, skillNames: data.skillNames ?? [], references, actions }),
- rest.map((block, index) => ui.JsonBlock ? (0, import_react48.createElement)(ui.JsonBlock, { key: index, label: t("Content"), payload: block }) : null)
+ (0, import_react49.createElement)(UserText, { text: text2, bots: mentionableBots(roster, sessionId, { fromFriend: Boolean(incoming && author.ownerName) }), referenceLabels, skillNames: data.skillNames ?? [], references, actions }),
+ rest.map((block, index) => ui.JsonBlock ? (0, import_react49.createElement)(ui.JsonBlock, { key: index, label: t("Content"), payload: block }) : null)
) : null,
- referenceLabels.length > 0 ? (0, import_react48.createElement)("div", { className: "bt-urefs" }, t("Referenced {labels}", { labels: referenceLabels.join(t(", ")) })) : null
+ referenceLabels.length > 0 ? (0, import_react49.createElement)("div", { className: "bt-urefs" }, t("Referenced {labels}", { labels: referenceLabels.join(t(", ")) })) : null
),
- text2 === "" ? null : (0, import_react48.createElement)("div", { className: "bt-utools" }, (0, import_react48.createElement)(CopyButton, { text: text2 }))
+ text2 === "" ? null : (0, import_react49.createElement)("div", { className: "bt-utools" }, (0, import_react49.createElement)(CopyButton, { text: text2 }))
);
}
var USER_MESSAGE_CSS = `
@@ -21669,7 +22158,7 @@ function noticeApprovals({ work, roster, shownSession, openSession, since: since
}
// src/client/stats-dock.js
-var import_react49 = require("react");
+var import_react50 = require("react");
var STATS_DOCK = "conversation.composer.dock";
var STATS_ID = "stats";
var STATS_IDS = [STATS_ID, "activity"];
@@ -21685,17 +22174,17 @@ function pluralStats(t2) {
function statsDock(entriesOf, id = STATS_ID) {
const shell = () => (entriesOf(STATS_DOCK) ?? []).find((entry) => entry?.component !== StatsDock && entry?.options?.id === id);
function StatsDock(props) {
- const t2 = (0, import_react49.useMemo)(() => typeof props.t === "function" ? pluralStats(props.t) : props.t, [props.t]);
+ const t2 = (0, import_react50.useMemo)(() => typeof props.t === "function" ? pluralStats(props.t) : props.t, [props.t]);
const entry = shell();
if (!entry || typeof props.usePerformanceUsage !== "function") return null;
- return (0, import_react49.createElement)(entry.component, { ...props, t: t2 });
+ return (0, import_react50.createElement)(entry.component, { ...props, t: t2 });
}
return { component: StatsDock, inject: (...args) => shell()?.inject?.(...args) ?? {} };
}
var statsDocks = (entriesOf) => STATS_IDS.map((id) => ({ id, ...statsDock(entriesOf, id) }));
// src/client/index.js
-var import_react50 = require("react");
+var import_react51 = require("react");
var inject = ["sessions", "uiWorkspace", "uiConversation", "slots", "theme", "layout"];
function apply(ctx) {
const flybot = createClientApi2();
@@ -21738,7 +22227,7 @@ function apply(ctx) {
} catch {
friendLines = null;
}
- const ui2 = createSource({ details: null, view: "details", renaming: false, tab: null, newChat: null, exchange: null, menu: null, voice: null, palette: null, quote: null, settings: null, remoteBotSettings: null, memory: null, toast: null, signIn: null, renameAgent: null, unread: savedUnread, reactions: savedReactions, visits: {} });
+ const ui2 = createSource({ details: null, view: "details", renaming: false, tab: null, newChat: null, exchange: null, menu: null, voice: null, palette: null, quote: null, settings: new URLSearchParams(window.location?.search ?? "").has("feishu-app") ? { page: "connectors", id: null } : null, remoteBotSettings: null, memory: null, toast: null, signIn: null, renameAgent: null, unread: savedUnread, reactions: savedReactions, visits: {} });
const surface = createSource({ mode: readMode(), plain: false });
let agentSessionCache = /* @__PURE__ */ new Set();
try {
@@ -22341,6 +22830,7 @@ function apply(ctx) {
connectorDisconnect: (id) => after(call("connector-disconnect", { id })),
connectorRetry: (id) => after(call("connector-retry", { id })),
connectorSend: (id, text2) => after(call("connector-send", { id, text: text2 })),
+ feishu: (payload) => call("feishu", payload),
saveCapability: (capability) => after(call("capability-save", capability)),
deleteCapability: (name) => after(call("capability-delete", { name })),
approveCapability: (name) => after(call("capability-approve", { name })),
@@ -22667,7 +23157,7 @@ function apply(ctx) {
];
ctx.effect(() => {
const style = installStyles(TURN_FAILURES_CSS, "turn-failures");
- const off = registry().register("flybot.session.dock", { id: "flybot-turn-failures", order: 20, component: (props) => (0, import_react50.createElement)(TurnFailures, { ...props, work }) });
+ const off = registry().register("flybot.session.dock", { id: "flybot-turn-failures", order: 20, component: (props) => (0, import_react51.createElement)(TurnFailures, { ...props, work }) });
return () => {
off();
style.remove();
diff --git a/core/index.js b/core/index.js
index 124988855..e5cf2bb3a 100644
--- a/core/index.js
+++ b/core/index.js
@@ -61,6 +61,7 @@ import * as images from './src/host/images.js'
import * as browser from './src/host/browser.js'
import * as secrets from './src/host/secrets.js'
import * as connectors from './src/host/connectors.js'
+import * as feishuService from './src/host/feishu-service.js'
import * as connectorAccess from './src/host/connector-access.js'
import * as capabilities from './src/host/capabilities.js'
import * as schedules from './src/host/schedules.js'
@@ -85,7 +86,7 @@ export const inject = ['llm', 'tools', 'systemPrompt', 'sessionController', 'ses
// the functions other modules call; they call them through `rt` at run time, never during
// install. Listeners run and tools are listed in registration order, so this order holds:
// usage meters model requests after every listener that rewrites them.
-const MODULES = [diagnostics, store, projectEffects, projectWarnings, projectCompatibility, projectTaskLifecycle, projectInputs, harness, memberAuth, platformIdentity, projectAccess, projectDevelopment, projectExecutionBoundary, projectResources, projectHarness, projectRuntimeSetup, projectDelivery, projectDelegations, projectAgents, projectCredentials, projectGithubRead, projectPools, projectScheduledTasks, projectSources, projectChiefControl, projectScheduler, workbenchState, authz, personalAgentAuth, models, permissions, turns, busyAck, steeringInterrupt, delivery, roster, folders, agents, prompt, timeContext, tools, decisions, projectState, meetings, chatIndex, groups, roomMembership, reach, tasks, projectBoard, taskDrive, approvals, resume, memory, parts, images, secrets, connectors, connectorAccess, capabilities, schedules, projectAssistant, projectChief, projectTeam, automationDefault, browser, usage, update, dshUpdate, hooks, remoteChat, workflowStore, channel]
+const MODULES = [diagnostics, store, projectEffects, projectWarnings, projectCompatibility, projectTaskLifecycle, projectInputs, harness, memberAuth, platformIdentity, projectAccess, projectDevelopment, projectExecutionBoundary, projectResources, projectHarness, projectRuntimeSetup, projectDelivery, projectDelegations, projectAgents, projectCredentials, projectGithubRead, projectPools, projectScheduledTasks, projectSources, projectChiefControl, projectScheduler, workbenchState, authz, personalAgentAuth, models, permissions, turns, busyAck, steeringInterrupt, delivery, roster, folders, agents, prompt, timeContext, tools, decisions, projectState, meetings, chatIndex, groups, roomMembership, reach, tasks, projectBoard, taskDrive, approvals, resume, memory, parts, images, secrets, connectors, connectorAccess, capabilities, schedules, projectAssistant, projectChief, projectTeam, automationDefault, feishuService, browser, usage, update, dshUpdate, hooks, remoteChat, workflowStore, channel]
export function apply(ctx, config = {}) {
const rt = createRuntime(ctx, config)
diff --git a/core/src/client/cells.js b/core/src/client/cells.js
index fb4e5dae3..7edbdddd8 100644
--- a/core/src/client/cells.js
+++ b/core/src/client/cells.js
@@ -209,6 +209,7 @@ export function AssistantCell({ node, groupPart, sessionId, openFile, fileMentio
const closing = useClosingText(node, useTurnData)
const hidden = Boolean(roster.roomsById[sessionId]) || isHiddenTurn(roster, sessionId, data.turn)
const person = typedBy(roster, sessionId, data.turn)
+ const feishu = roster.feishuTurns?.[sessionId]?.[data.turn]
const texts = groupPart === 'reasoning' ? [] : data.blocks.filter(block => block.kind === 'text' && block.text.trim() !== '').map((block, index) => index === 0 ? stripTrace(block.text) : block.text).filter(text => text.trim() !== '')
const running = data.status === 'running'
// A streaming reply stands in for the activity row.
@@ -224,7 +225,9 @@ export function AssistantCell({ node, groupPart, sessionId, openFile, fileMentio
const bubbles = texts.length ? (person
? h(PersonMessage, { name: person, texts, roster, selfId, actions, sessionId, msgKey: `${sessionId}:${data.turn}:${node.key ?? data.seq ?? ''}`, useUi })
: h(Bubbles, { texts, roster, selfId, actions, streaming: running, sessionId, msgKey: `${sessionId}:${data.turn}:${node.key ?? data.seq ?? ''}`, useUi, mentions, lead: friendLead(roster.byId[sessionId], texts) })) : null
- return h(Fragment, null,
+ return h(feishu ? 'div' : Fragment, feishu ? { id: `feishu-message-${feishu.messageId ?? data.turn}`, 'data-feishu-root': feishu.rootId ?? '' } : null,
+ feishu?.rootId ? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', title: feishu.rootId, onClick: () => document.getElementById(`feishu-message-${feishu.rootId}`)?.scrollIntoView?.({ block: 'center' }) }, t('Reply in thread')) : null,
+ feishu?.attachments?.length ? h(RemoteFiles, { files: feishu.attachments, appId: feishu.appId, plugin: 'feishu', botId: selfId }) : null,
relays.map(relay => {
const source = relay.source
const sender = roster.byId[source.senderSessionId] ?? { id: source.senderSessionId, name: source.senderName ?? t('a Bot'), color: 'gray' }
@@ -399,7 +402,7 @@ export function RemoteMessage({ source, text, roster, actions, sessionId, msgKey
h('span', { className: 'bt-group-name', title: handle }, person,
carrier ? h('span', { className: 'bt-remote-handle' }, t('via {name}', { name: carrier })) : null),
h(Bubbles, { texts: [stripTrace(text)], roster, selfId: bot.id, actions, sessionId, msgKey, useUi, lead: h('span', { className: 'bt-lead', title: person }, h(PersonMark, { name: person })) }),
- files.length ? h(RemoteFiles, { files, plugin: member?.plugin ?? 'social', botId: roster.byId[sessionId]?.id ?? sessionId }) : null)
+ files.length ? h(RemoteFiles, { files, appId: source.feishu?.appId, plugin: source.feishu ? 'feishu' : member?.plugin ?? 'social', botId: roster.byId[sessionId]?.id ?? sessionId }) : null)
}
const mark = h(BotMark, { bot, size: 22 })
const lead = chatId
@@ -412,7 +415,7 @@ export function RemoteMessage({ source, text, roster, actions, sessionId, msgKey
: h('span', { className: 'bt-group-name', style: { color: inkText(colorOf(bot)) } }, name,
h('span', { className: 'bt-remote-handle', title: source.remote.home ?? handle, 'aria-label': t('Friend\'s Bot') }, h(GlobeMark), handle)),
h(Bubbles, { texts: [stripTrace(text)], roster, selfId: bot.id, actions, sessionId, msgKey, useUi, lead }),
- files.length ? h(RemoteFiles, { files, plugin: member?.plugin ?? 'social', botId: roster.byId[sessionId]?.id ?? sessionId }) : null)
+ files.length ? h(RemoteFiles, { files, appId: source.feishu?.appId, plugin: source.feishu ? 'feishu' : member?.plugin ?? 'social', botId: roster.byId[sessionId]?.id ?? sessionId }) : null)
}
// A sender's first line in a Bot's own chat (#420): one quiet line says who is talking to the Bot
@@ -431,14 +434,14 @@ function GlobeMark() {
// A remote member's files as chips; a click fetches the file (the plugin checks its
// hash) and saves it. Nothing is opened or run.
-function RemoteFiles({ files, plugin, botId }) {
+function RemoteFiles({ files, plugin, botId, appId }) {
const [busy, setBusy] = useState('')
const [error, setError] = useState('')
const download = async (file) => {
setBusy(file.id)
setError('')
try {
- const got = await call(`flybot/${plugin}/attachment`, { id: file.id, botId })
+ const got = plugin === 'feishu' ? await call('feishu', { operation: 'attachment', appId, attachmentId: file.id }) : await call(`flybot/${plugin}/attachment`, { id: file.id, botId })
const value = got?.value ?? got
const bytes = Uint8Array.from(atob(value.content_base64), c => c.charCodeAt(0))
const url = URL.createObjectURL(new Blob([bytes], { type: 'application/octet-stream' }))
@@ -720,7 +723,7 @@ const SILENT_REGISTRATION_TOOLS = new Set([
'list_bots', 'message_bot', 'stop_bot', 'create_bot', 'update_bot', 'archive_bot', 'list_models',
'bot_schedules',
'create_group', 'update_group', 'delete_group', 'post_to_group', 'ask_user', 'track_tasks',
- 'request_secret', 'list_secrets', 'group_relay', 'read_own_chat',
+ 'request_secret', 'list_secrets', 'feishu_apps', 'feishu_tool', 'feishu_card', 'feishu_file', 'group_relay', 'read_own_chat',
'read_group_chat', 'remember', 'forget', 'recall', 'read_browser',
'list_capabilities', 'save_capability', 'delete_capability',
'attach_capability', 'detach_capability',
diff --git a/core/src/client/connectors.js b/core/src/client/connectors.js
index 0de3db10c..eeafcc99b 100644
--- a/core/src/client/connectors.js
+++ b/core/src/client/connectors.js
@@ -5,6 +5,7 @@ import { ConnectorIcon } from './icons.js'
import { SwitchRow } from './bot-settings.js'
import { ConnectorBots, usageText } from './connector-bots.js'
import { t } from './i18n.js'
+import { FeishuSetup } from './feishu-setup.js'
const TOKEN_URL = 'https://github.com/settings/personal-access-tokens/new'
const COMPOSIO_KEY_URL = 'https://platform.composio.dev/'
@@ -149,7 +150,7 @@ export function AppStatusList({ apps, statuses }) {
}
function ConnectorRow({ connector, roster, actions }) {
- const [form, setForm] = useState(false)
+ const [form, setForm] = useState(() => !!(connector.id === 'feishu' && actions.feishu && typeof window !== 'undefined' && window.location && new URLSearchParams(window.location.search).has('feishu-app')))
const [bots, setBots] = useState(false)
const [token, setToken] = useState('')
const [apps, setApps] = useState(() => connector.apps ?? [])
@@ -169,6 +170,7 @@ function ConnectorRow({ connector, roster, actions }) {
// behaviour) or a self-built app (the long connection in, answers out). The form is the mode's
// credential list, rendered field by field.
const channel = connector.kind === 'channel'
+ const guided = channel && actions.feishu
const modes = connector.modes ?? []
const [mode, setMode] = useState(() => connector.mode ?? modes[0]?.id)
const [values, setValues] = useState({})
@@ -222,19 +224,21 @@ function ConnectorRow({ connector, roster, actions }) {
connector.state === 'error' ? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', disabled: busy, onClick: () => void run(actions.connectorRetry(connector.id)) }, t('Try again')) : null,
on && gateway && !picking ? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', disabled: busy, onClick: () => { setApps(connector.apps ?? []); setPicking(true) } }, t('Choose apps')) : null,
on && perBot ? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', 'aria-expanded': bots, onClick: () => setBots(value => !value) }, bots ? t('Done') : t('Choose Bots')) : null,
+ guided ? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', 'aria-expanded': form, onClick: () => setForm(value => !value) }, t('Connect')) : null,
on
? h('button', { type: 'button', className: 'bt-soft bt-soft-sm', disabled: busy, onClick: () => void run(actions.connectorDisconnect(connector.id)) }, t('Disconnect'))
- : form ? null : h('button', { type: 'button', className: 'bt-soft bt-soft-sm', onClick: () => setForm(true) }, t('Connect')))),
+ : form || guided ? null : h('button', { type: 'button', className: 'bt-soft bt-soft-sm', onClick: () => setForm(true) }, t('Connect')))),
on && gateway && !picking ? h(AppStatusList, { apps: connector.apps ?? [], statuses }) : null,
on && perBot ? h('span', { className: 'bt-connector-uses' }, usageText(roster, connector.id)) : null,
on && bots ? h(ConnectorBots, { connector, roster, actions, run, SwitchRow }) : null,
- on && channel && connector.mode === 'app' ? h(AllowedSenders, { connector, actions, run, busy }) : null,
+ on && channel && !connector.managed && connector.mode === 'app' ? h(AllowedSenders, { connector, actions, run, busy }) : null,
on && canPost ? h('div', { className: 'bt-connector-form' },
h('label', { className: 'bt-q-field' }, h('input', { className: 'bt-input', type: 'text', value: message, 'aria-label': t('Message to send to Feishu'), placeholder: t('Type a message for the Feishu group'), onChange: event => setMessage(event.target.value) })),
h('div', { className: 'bt-connector-form-row' },
h('span', { className: 'bt-connector-link' }),
h('button', { type: 'button', className: 'bt-soft bt-soft-sm', disabled: busy || message.trim() === '' || actions.connectorSend === undefined, onClick: () => void run(actions.connectorSend(connector.id, message), () => setMessage('')) }, t('Send')))) : null,
- !on && form ? h('div', { className: 'bt-connector-form' },
+ channel && form && actions.feishu ? h(FeishuSetup, { actions, roster, onClose: () => setForm(false) }) : null,
+ !on && form && (!channel || !actions.feishu) ? h('div', { className: 'bt-connector-form' },
channel ? h('div', { className: 'bt-states', role: 'group', 'aria-label': t('How to connect') }, modes.map(entry =>
h('button', {
key: entry.id, type: 'button', className: 'bt-state', 'aria-pressed': entry.id === chosen?.id,
diff --git a/core/src/client/feishu-copy.js b/core/src/client/feishu-copy.js
new file mode 100644
index 000000000..0cde9f8ea
--- /dev/null
+++ b/core/src/client/feishu-copy.js
@@ -0,0 +1,63 @@
+export const FEISHU_ZH = {
+ 'Optional tools': '按需选择', 'Select the tools you need. The permission JSON updates automatically.': '勾选需要的工具,权限 JSON 会自动更新。',
+ 'Clipboard is unavailable. Copy the selected JSON below.': '无法访问剪贴板,请手动复制已选中的权限 JSON。',
+ 'Base permissions are always included.': '已包含全部基础权限', 'View permission JSON': '查看权限 JSON', 'Open Feishu Open Platform': '打开飞书开放平台',
+ 'Long connection': '长连接', 'Event address': '事件地址', 'Recommended · no public address': '推荐 · 无需公网地址', 'Requires a public HTTPS address': '需要公网 HTTPS 地址',
+ 'Connection steps': '接入步骤', 'Step {current} of {total}': '第 {current} 步,共 {total} 步', 'Previous step': '上一步',
+ 'Check App ID and App Secret. A nonexistent App ID may be reported as an internal error.': 'App ID 或 App Secret 不正确,请在应用的“凭证与基础信息”页面重新复制。App ID 不存在时,飞书可能只返回“内部错误”。',
+ 'FlyBot cannot reach open.feishu.cn. Check the server network or proxy.': 'FlyBot 服务器连不上 open.feishu.cn,请检查服务器的网络或代理设置。',
+ 'Credentials accepted, but Bot information is unavailable. Enable the Bot capability and publish a version. You can continue now and test again after publishing.': '凭据正确,但还读不到机器人:应用还没有开启机器人能力,或开启后还没有发布版本。可以先继续下一步,发布版本后再测试。',
+ 'Apply for the missing app permission, publish a new version, wait for approval, then check permissions again.': '请在飞书开放平台申请缺少的应用权限并发布新版本;需要管理员审批时等待通过,再重新检测。',
+ 'The application has reached its long-connection limit (up to 50 connections).': '应用的长连接数已达上限(最多 50 个连接)。',
+ 'Could not connect to open.feishu.cn; check the server network, proxy and application credentials.': '连不上 open.feishu.cn,请检查服务器网络、代理和应用凭据。',
+ 'The Feishu long-connection SDK is not installed on the FlyBot server. Reinstall FlyBot, or rebuild the image if it runs in Docker.': 'FlyBot 服务器上没有安装飞书长连接 SDK。请重新安装 FlyBot;用 Docker 运行时请重新构建镜像。',
+ 'Operation failed; check network, permissions and published app version': '操作失败,请检查网络、应用权限及已发布的应用版本。',
+
+ 'Conversation handlers': '会话处理的 Bot', 'Conversation handler': '处理的 Bot', 'Follow the default Bot': '跟随默认 Bot',
+ 'Reply in thread': '回复消息串',
+ 'Connection name': '接入名称', 'App has read-only permission': '只开通了只读',
+ 'Also process other robots that mention this robot (up to 8 consecutive requests)': '其他机器人 @ 这个机器人时,也交给 Bot 处理(连续最多 8 次)',
+ 'Files': '文件',
+ 'Setup guide': '设置引导', 'Connect Feishu': '接入飞书', 'New connection': '新建接入',
+ 'Prepare a public event address': '准备公网事件地址', 'Create an app on Feishu Open Platform': '在飞书开放平台创建应用',
+ 'Enter credentials and test connection': '填写凭据并测试连接', 'Subscribe to message events and card callbacks': '订阅消息事件与卡片回调',
+ 'Publish an app version': '发布应用版本', 'Choose the Bot represented by the robot': '选择机器人代表的 Bot', 'Try it in Feishu': '在飞书中试一试',
+ 'Long connection (recommended, no public address)': '长连接(推荐,不需要公网地址)', 'Event address (HTTP, needs a public address)': '事件地址(HTTP,需要公网地址)',
+ 'Create an internal app, add the Bot capability, and apply for the permissions below. Do not configure events yet.': '创建企业自建应用,在“添加应用能力”中添加机器人,按下方列表申请权限并设置通讯录权限范围。先不要配置事件订阅。',
+ 'Only Feishu (open.feishu.cn) is supported; Lark is not supported.': '只支持飞书(open.feishu.cn),不支持 Lark 国际版。',
+ 'Copy permission JSON': '复制权限 JSON', 'Copied': '已复制', 'Extended permissions (Feishu tools)': '扩展权限(飞书工具)',
+ 'Calendar': '日历', 'Documents and wiki': '文档与知识库', 'Bitable': '多维表格', 'Spreadsheets': '电子表格', 'Video meetings': '视频会议', 'Tasks': '任务',
+ 'Import this JSON in Permission management → Batch import/export. Set the contact data scope to people who will use the robot.': '在“权限管理 → 批量导入/导出”中粘贴 JSON 并申请开通;在“数据权限”中把通讯录权限范围设为会使用机器人的成员。',
+ 'Public HTTPS event origin': '公网 HTTPS 事件地址前缀',
+ 'Forward only the event port to a public HTTPS address. Do not expose the FlyBot console. Leave Encrypt Key empty.': '准备公网可以访问的 HTTPS 地址,只转发事件端口,不开放控制台。Encrypt Key 保持为空:FlyBot 不接收加密推送的事件。',
+ 'Credentials are encrypted on the platform and cannot be viewed after saving. Bots never receive them.': 'FlyBot 加密保存凭据,保存后不能再查看。凭据只留在平台,不交给 Bot。',
+ 'Leave saved credentials blank to keep them. Switching receiving methods reuses the same Feishu application and conversations.': '已有凭据留空即沿用;切换接收方式沿用原来的飞书应用和会话,不需要重新创建。',
+ 'Switching to a long connection deletes the saved Verification Token.': '改用长连接后,原来保存的 Verification Token 会被删除。',
+ 'Save and test connection': '保存并测试连接', 'Connection to Feishu': '与飞书的连接', 'Refreshes every 3 seconds': '每 3 秒刷新',
+ 'Connected': '已连接', 'Connecting…': '正在连接…', 'Connection failed': '连接失败',
+ 'Wait until connected: Feishu only allows saving the long connection subscription after FlyBot connects. Check credentials and network if it keeps waiting.': '还没有连上:飞书只有在 FlyBot 连上之后,才允许把订阅方式保存为长连接。如果一直停在这里,检查 App ID、App Secret,以及服务器能否访问 open.feishu.cn。',
+ 'Now set Events and callbacks → Event configuration → Use long connection to receive events, then save.': '现在到“事件与回调 → 事件配置”,把订阅方式设为“使用长连接接收事件”并保存。',
+ 'Add Receive message v2.0 (im.message.receive_v1).': '添加事件“接收消息 v2.0”(im.message.receive_v1)。',
+ 'In Callback configuration, use the long connection and add Card action trigger (card.action.trigger).': '在“回调配置”中选择“使用长连接接收回调”并保存,添加“卡片回传交互”(card.action.trigger)。',
+ 'In both Event configuration and Callback configuration, select Send to developer server, use the same address below, and save.': '在“事件配置”和“回调配置”中分别选择“将事件/回调发送至开发者服务器”,填写下方同一个请求地址并保存。',
+ 'Address verified': '请求地址已通过验证', 'Waiting for address verification': '等待飞书验证请求地址;失败时检查 Verification Token,并返回上一步修改。',
+ 'Received an event': '已收到飞书事件', 'No event received yet': '尚未收到飞书事件',
+ 'Without card.action.trigger, cards can display but buttons and forms do not respond. Neither test connection nor connected status checks callback subscriptions.': '没有订阅 card.action.trigger 时,卡片能显示,但按钮和表单没有反应。测试连接、基础权限检测和“已连接”都不检测回调订阅。',
+ 'Connect each Feishu app to only one FlyBot instance; multiple instances split incoming messages.': '同一个飞书应用只接到一个 FlyBot:同时接到多个实例时,消息会被随机分走。',
+ 'Create and publish a version in Version management and release. Include the required members or departments. Wait for enterprise approval if required.': '在“版本管理与发布”中创建版本,在可用范围中选择能使用机器人的成员或部门,申请线上发布;需要审核时等待企业管理员通过。',
+ 'Permissions, Bot capability, events and callbacks take effect after publishing. Publish again after any change.': '权限、机器人能力、消息事件和卡片回调订阅在发布后才生效;之后修改也要重新发布版本。',
+ 'Test connection': '测试连接', 'One Feishu application represents one Bot. Group mentions and private messages go to the selected local Bot.': '一个飞书应用就是一个机器人。群里 @ 它的消息和发给它的私聊消息交给选中的本地 Bot 处理,回复以机器人的身份发出。',
+ 'Choose a Bot': '选择 Bot', 'Add the application under Group settings → Group robots. Mention it in the group, or send a private message.': '在“群设置 → 群机器人”中添加这个应用,在群里 @ 机器人,或直接私聊它。',
+ 'Ask the Bot to send a card with a submit button. Click it and confirm Submitted. Ordinary chat success does not verify card callbacks.': '请机器人发送一张带提交按钮的卡片,实际点击并确认出现“已提交”提示;普通聊天成功不能代替卡片交互验证。',
+ 'Each group or private chat keeps one FlyBot conversation; thread replies return to the original thread. Message edits and recalls are not synchronized.': '一个群聊或私聊对应一个 FlyBot 会话;消息串中的回复发回原消息串。不同步消息的编辑和撤回。',
+ 'Who may send messages': '谁可以发消息', 'Allow an open_id': '允许发消息的 open_id', 'Allowed senders can send messages; this does not grant platform identity or approval authority.': '白名单只表示允许发消息,不等于平台用户或审批权限。',
+ 'Identity linking': '身份关联', 'Feishu open_id': '飞书 open_id', 'Platform member': '平台成员', 'Link identity': '关联身份',
+ 'Link to an existing signed-in platform member. No external members or new login accounts are created. Unlinked card submissions and meeting bookings are refused.': '关联到已有平台成员,不创建外部成员或新登录账号。未关联的卡片提交和视频会议预约会被拒绝。',
+ 'Feishu tools': '飞书工具', 'Disabled': '禁用', 'Read only': '只读', 'Read/write, ask before writes': '读写,写入需询问', 'Read/write': '读写',
+ 'Permissions of the Feishu application': '飞书应用的权限', 'Check permissions again': '重新检测', 'App permission not granted': '飞书应用未开通',
+ 'Diagnostics': '诊断记录', 'Delivery records': '投递记录', 'Cards': '卡片', 'Delete connection': '删除接入',
+ 'Later': '稍后继续', 'Next': '下一步', 'Back': '上一步', 'Finish': '完成', 'Save': '保存',
+ 'App ID must be cli_ followed by 16 hexadecimal characters': 'App ID 必须是 cli_ 加 16 位十六进制字符。',
+ 'Enter the App Secret': '请填写 App Secret。', 'Enter the Verification Token': '请填写 Verification Token。',
+ 'Prepare a public HTTPS event address': '请先准备公网可以访问的 HTTPS 事件地址。',
+}
diff --git a/core/src/client/feishu-setup.js b/core/src/client/feishu-setup.js
new file mode 100644
index 000000000..6f48f0f5c
--- /dev/null
+++ b/core/src/client/feishu-setup.js
@@ -0,0 +1,109 @@
+import { createElement as h, useCallback, useEffect, useRef, useState } from 'react'
+import { t, hostText } from './i18n.js'
+import { ownBots } from './connector-bots.js'
+import { APP_ID, PRODUCTS, BASE_SCOPES, permissionJSON, setupSteps, publicAddress, scopeGranted, productAccess } from '../shared/feishu.js'
+
+const button = (text, onClick, disabled = false, variant = '') => h('button', { type: 'button', className: `bt-soft bt-soft-sm bt-feishu-button ${variant}`, onClick, disabled }, t(text))
+const hint = key => h('p', { className: 'bt-set-hint' }, t(key))
+const field = (label, value, change, type = 'text', disabled = false) => h('label', { className: 'bt-feishu-field' }, h('span', {}, t(label)), h('input', { className: 'bt-input', type, value, disabled, autoComplete: type === 'password' ? 'new-password' : 'off', 'aria-label': t(label), onChange: e => change(e.target.value) }))
+
+export function FeishuSetup({ actions, roster, onClose }) {
+ const [apps, setApps] = useState([]), [members, setMembers] = useState([]), [selected, setSelected] = useState(''), [step, setStep] = useState(0)
+ const [mode, setMode] = useState('socket'), [appId, setAppId] = useState(''), [secret, setSecret] = useState(''), [token, setToken] = useState(''), [url, setUrl] = useState(''), [name, setName] = useState('Feishu')
+ const [botId, setBotId] = useState(''), [openId, setOpenId] = useState(''), [memberId, setMemberId] = useState(''), [extensions, setExtensions] = useState([]), [copied, setCopied] = useState(false)
+ const [busy, setBusy] = useState(false), [error, setError] = useState(''), [result, setResult] = useState(null), [webhook, setWebhook] = useState('')
+ const initial = useRef(true)
+ const app = apps.find(a => a.id === selected), steps = setupSteps(mode), offset = mode === 'http' ? 1 : 0, n = step - offset
+ const load = useCallback(async () => { const out = await actions.feishu({ operation: 'list' }); setApps(out.apps ?? []); setMembers(out.members ?? []); if (initial.current) { initial.current = false; const queryId = new URLSearchParams(window.location.search).get('feishu-app'); const saved = out.apps?.find(a => a.id === queryId) ?? out.apps?.[0]; if (saved) { setSelected(saved.id); setAppId(saved.id); setMode(saved.mode); setStep(saved.step ?? 0); setBotId(saved.botId ?? ''); setUrl(saved.publicUrl ?? ''); setName(saved.name ?? 'Feishu') } } }, [actions])
+ useEffect(() => { void load().catch(e => setError(hostText(e.message))); const timer = setInterval(() => { void load().catch(() => {}) }, 3000); return () => clearInterval(timer) }, [load])
+ const run = async fn => { setBusy(true); setError(''); try { const value = await fn(); await load(); return value } catch (e) { setError(hostText(e.message)); return undefined } finally { setBusy(false) } }
+ const select = id => {
+ const saved = apps.find(a => a.id === id)
+ setSelected(id); setAppId(id); setMode(saved?.mode ?? 'socket'); setStep(saved?.step ?? 0); setBotId(saved?.botId ?? ''); setUrl(saved?.publicUrl ?? ''); setName(saved?.name ?? 'Feishu'); setSecret(''); setToken(''); setResult(null)
+ }
+ const advance = async target => {
+ if (selected) await run(() => actions.feishu({ operation: 'configure', appId: selected, step: target, ...(botId ? { botId } : {}) }))
+ setStep(target)
+ }
+ const save = () => void run(async () => {
+ const out = await actions.feishu({ operation: 'save', appId, appSecret: secret, verificationToken: token, mode, publicUrl: url, name, step: offset + 2 })
+ setApps(out.apps); setSelected(appId); setSecret(''); setToken(''); setResult(out.test); setStep(offset + (out.test?.credentialError ? 1 : 2))
+ })
+ const action = payload => void run(() => actions.feishu({ appId: selected, ...payload }))
+ const copyPermissions = async event => {
+ const section = event.currentTarget.closest('.bt-feishu-permissions')
+ setError('')
+ try {
+ if (!navigator.clipboard?.writeText) throw new Error('Clipboard unavailable')
+ await navigator.clipboard.writeText(permissionJSON(extensions)); setCopied(true)
+ } catch {
+ const preview = section.querySelector('.bt-feishu-json'), textarea = preview.querySelector('textarea')
+ preview.open = true; textarea.focus(); textarea.select()
+ setCopied(false)
+ setError(t('Clipboard is unavailable. Copy the selected JSON below.'))
+ }
+ }
+ const permissionPicker = h('section', { className: 'bt-feishu-permissions' },
+ h('div', { className: 'bt-feishu-section-head' }, h('strong', {}, t('Extended permissions (Feishu tools)')), h('span', { className: 'bt-feishu-optional' }, t('Optional tools'))),
+ hint('Select the tools you need. The permission JSON updates automatically.'),
+ h('div', { className: 'bt-feishu-permission-grid' }, PRODUCTS.map(p => h('label', { key: p.id, className: 'bt-feishu-permission', 'data-checked': extensions.includes(p.id) },
+ h('input', { type: 'checkbox', checked: extensions.includes(p.id), onChange: e => { setExtensions(e.target.checked ? [...extensions, p.id] : extensions.filter(x => x !== p.id)); setCopied(false) } }), h('span', {}, t(p.label))))),
+ h('div', { className: 'bt-feishu-permission-copy' }, button(copied ? 'Copied' : 'Copy permission JSON', copyPermissions),
+ h('span', { className: 'bt-set-hint' }, t('Base permissions are always included.'))),
+ h('details', { className: 'bt-feishu-json' }, h('summary', {}, t('View permission JSON')), h('textarea', { className: 'bt-input', readOnly: true, rows: 8, value: permissionJSON(extensions), 'aria-label': t('Copy permission JSON') })),
+ hint('Import this JSON in Permission management → Batch import/export. Set the contact data scope to people who will use the robot.'))
+ let content
+ if (step === 0 && mode === 'http') content = h('div', {}, hint('Forward only the event port to a public HTTPS address. Do not expose the FlyBot console. Leave Encrypt Key empty.'), field('Public HTTPS event origin', url, setUrl))
+ else if (n === 0) content = h('div', {}, hint('Create an internal app, add the Bot capability, and apply for the permissions below. Do not configure events yet.'),
+ h('a', { className: 'bt-feishu-external', href: 'https://open.feishu.cn/app', target: '_blank', rel: 'noopener noreferrer' }, t('Open Feishu Open Platform'), h('span', { 'aria-hidden': true }, '↗')), permissionPicker)
+ else if (n === 1) content = h('div', {}, hint('Credentials are encrypted on the platform and cannot be viewed after saving. Bots never receive them.'), hint('Leave saved credentials blank to keep them. Switching receiving methods reuses the same Feishu application and conversations.'),
+ app?.mode === 'http' && mode === 'socket' ? hint('Switching to a long connection deletes the saved Verification Token.') : null,
+ field('Connection name', name, setName),
+ field('App ID', appId, setAppId, 'text', !!selected), field('App Secret', secret, setSecret, 'password'), mode === 'http' ? field('Verification Token', token, setToken, 'password') : null,
+ appId && !APP_ID.test(appId) ? hint('App ID must be cli_ followed by 16 hexadecimal characters') : null,
+ button('Save and test connection', save, busy || !APP_ID.test(appId) || !selected && !secret.trim() || mode === 'http' && (!publicAddress(url) || (!token && app?.mode !== 'http')), 'bt-feishu-primary'))
+ else if (n === 2) content = h('div', {},
+ mode === 'socket' ? h('div', {}, h('strong', {}, t('Connection to Feishu')), h('p', { role: 'status' }, t(app?.connection === 'ready' ? 'Connected' : app?.connection === 'error' ? 'Connection failed' : 'Connecting…')), hint('Refreshes every 3 seconds'),
+ app?.connection === 'ready' ? hint('Now set Events and callbacks → Event configuration → Use long connection to receive events, then save.') : hint('Wait until connected: Feishu only allows saving the long connection subscription after FlyBot connects. Check credentials and network if it keeps waiting.'),
+ hint('In Callback configuration, use the long connection and add Card action trigger (card.action.trigger).')) : h('div', {}, hint('In both Event configuration and Callback configuration, select Send to developer server, use the same address below, and save.'), h('code', {}, `${url.replace(/\/$/, '')}/api/feishu/events/${selected}`), hint(app?.verifiedAt ? 'Address verified' : 'Waiting for address verification')),
+ hint('Add Receive message v2.0 (im.message.receive_v1).'), hint('Without card.action.trigger, cards can display but buttons and forms do not respond. Neither test connection nor connected status checks callback subscriptions.'), hint('Connect each Feishu app to only one FlyBot instance; multiple instances split incoming messages.'), hint(app?.lastEventAt ? 'Received an event' : 'No event received yet'))
+ else if (n === 3) content = h('div', {}, hint('Create and publish a version in Version management and release. Include the required members or departments. Wait for enterprise approval if required.'), hint('Permissions, Bot capability, events and callbacks take effect after publishing. Publish again after any change.'), button('Test connection', () => void run(async () => { const out = await actions.feishu({ operation: 'test', appId: selected }); setResult(out) }), busy))
+ else if (n === 4) content = h('div', {}, hint('One Feishu application represents one Bot. Group mentions and private messages go to the selected local Bot.'), h('select', { className: 'bt-input', 'aria-label': t('Choose a Bot'), value: botId, onChange: e => setBotId(e.target.value) }, h('option', { value: '' }, t('Choose a Bot')), ownBots(roster).filter(b => !b.projectAgent && !b.ephemeral).map(b => h('option', { key: b.id, value: b.id }, b.name))))
+ else content = h('div', {}, hint('Add the application under Group settings → Group robots. Mention it in the group, or send a private message.'), hint('Ask the Bot to send a card with a submit button. Click it and confirm Submitted. Ordinary chat success does not verify card callbacks.'), hint('Each group or private chat keeps one FlyBot conversation; thread replies return to the original thread.'), h('ul', {}, (app?.recent ?? []).map(e => h('li', { key: e.id }, `${e.text ?? ''} · ${e.status}`))))
+ const identity = h('details', {}, h('summary', {}, t('Identity linking')), hint('Link to an existing signed-in platform member. No external members or new login accounts are created. Unlinked card submissions and meeting bookings are refused.'), field('Feishu open_id', openId, setOpenId), h('select', { className: 'bt-input', value: memberId, 'aria-label': t('Platform member'), onChange: e => setMemberId(e.target.value) }, h('option', { value: '' }, t('Platform member')), members.map(m => h('option', { key: m.id, value: m.id }, m.name))), button('Link identity', () => action({ operation: 'identity', openId, ...(memberId ? { memberId } : {}) }), busy || !openId), h('ul', {}, (app?.identities ?? []).map(i => h('li', { key: i.openId }, `${i.openId} → ${i.memberId}`))))
+ return h('section', { className: 'bt-feishu-setup', 'aria-label': t('Connect Feishu') },
+ h('header', { className: 'bt-feishu-header' }, h('div', {}, h('h3', {}, t('Connect Feishu')), hint('Only Feishu (open.feishu.cn) is supported; Lark is not supported.')),
+ apps.length ? h('select', { className: 'bt-input', value: selected, onChange: e => select(e.target.value), 'aria-label': t('Connect Feishu') }, h('option', { value: '' }, t('New connection')), apps.map(a => h('option', { key: a.id, value: a.id }, `${a.name} (${a.id})`))) : null),
+ app?.linkOnly ? h('div', { className: 'bt-feishu-body' }, identity, button('Later', onClose, false, 'bt-feishu-quiet')) : h('div', { className: 'bt-feishu-body' },
+ h('div', { className: 'bt-feishu-modes', role: 'group', 'aria-label': t('How to connect') }, ['socket', 'http'].map(m => h('button', {
+ key: m, type: 'button', 'aria-pressed': mode === m, 'aria-label': t(m === 'socket' ? 'Long connection (recommended, no public address)' : 'Event address (HTTP, needs a public address)'),
+ onClick: () => { setMode(m); setStep(m === 'http' ? 0 : selected ? 1 : 0) },
+ }, h('strong', {}, t(m === 'socket' ? 'Long connection' : 'Event address')), h('small', {}, t(m === 'socket' ? 'Recommended · no public address' : 'Requires a public HTTPS address'))))),
+ h('div', { className: 'bt-feishu-layout' },
+ h('nav', { className: 'bt-feishu-progress', 'aria-label': t('Connection steps') }, h('ol', {}, steps.map((title, i) => h('li', { key: title }, h('button', {
+ type: 'button', 'aria-label': t(title), 'aria-current': step === i ? 'step' : undefined, 'data-done': i < step, disabled: i > offset + 1 && !selected, onClick: () => setStep(i),
+ }, h('span', { className: 'bt-feishu-step-number', 'aria-hidden': true }, i < step ? '✓' : i + 1), h('span', { className: 'bt-feishu-step-label' }, t(title))))))),
+ h('div', { className: 'bt-feishu-step' }, h('div', { className: 'bt-feishu-step-heading' }, h('span', { className: 'bt-feishu-eyebrow' }, t('Step {current} of {total}', { current: step + 1, total: steps.length })), h('h4', {}, t(steps[step]))),
+ h('div', { className: 'bt-feishu-step-content' }, content),
+ result ? h('p', { className: 'bt-feishu-result', role: 'status', 'data-success': result.ok }, result.ok ? `${t('Connected')} ${result.bot ?? ''}` : hostText(result.error)) : null,
+ h('footer', { className: 'bt-feishu-footer' }, button('Previous step', () => setStep(Math.max(0, step - 1)), step === 0 || busy),
+ h('div', {}, button('Later', onClose, false, 'bt-feishu-quiet'), step < steps.length - 1 ? button('Next', () => void advance(step + 1), busy || n === 3 && !result?.ok || n === 1 && (!selected || app?.mode !== mode) || n === 4 && !botId || mode === 'http' && step === 0 && !publicAddress(url) || n > 1 && !selected, 'bt-feishu-primary') : button('Finish', onClose, false, 'bt-feishu-primary'))))),
+ app ? h('div', { className: 'bt-feishu-management' }, h('details', {}, h('summary', {}, t('Who may send messages')), hint('Allowed senders can send messages; this does not grant platform identity or approval authority.'), h('label', { className: 'bt-feishu-check' }, h('input', { type: 'checkbox', checked: app.allowBots === true, onChange: e => action({ operation: 'configure', allowBots: e.target.checked }) }), t('Also process other robots that mention this robot (up to 8 consecutive requests)')), field('Allow an open_id', openId, setOpenId), button('Allow', () => action({ operation: 'allow', openId }), busy || !openId), (app.allowed ?? []).map(id => h('p', { key: id }, id, button('Block', () => action({ operation: 'allow', openId: id, enabled: false }), busy)))), identity,
+ h('details', {}, h('summary', {}, t('Conversation handlers')), [...new Set((app.recent ?? []).map(e => e.chatId).filter(Boolean))].map(chatId => h('label', { key: chatId, className: 'bt-q-field' }, chatId, h('select', { className: 'bt-input', value: app.chatBots?.[chatId] ?? '', 'aria-label': `${t('Conversation handler')} ${chatId}`, onChange: e => action({ operation: 'configure', chatId, botId: e.target.value || null }) }, h('option', { value: '' }, t('Follow the default Bot')), ownBots(roster).filter(b => !b.projectAgent && !b.ephemeral).map(b => h('option', { key: b.id, value: b.id }, b.name)))))),
+ h('details', {}, h('summary', {}, t('Permissions of the Feishu application')), permissionPicker, button('Check permissions again', () => action({ operation: 'scopes' }), busy), h('ul', {}, BASE_SCOPES.filter(s => !scopeGranted(s, app.scopes)).map(s => h('li', { key: s }, s)))),
+ h('details', {}, h('summary', {}, t('Feishu tools')), ownBots(roster).filter(b => !b.projectAgent && !b.ephemeral).map(b => h('fieldset', { key: b.id }, h('legend', {}, b.name), PRODUCTS.map(p => h('label', { key: p.id, className: 'bt-q-field' }, t(p.label), productAccess(p, app.scopes) !== 'write' ? h('small', {}, t(productAccess(p, app.scopes) === 'read' ? 'App has read-only permission' : 'App permission not granted')) : null,
+ h('select', { className: 'bt-input', 'aria-label': `${b.name} ${t(p.label)}`, value: app.grants?.[b.id]?.[p.id] ?? 'disabled', onChange: e => action({ operation: 'grant', botId: b.id, product: p.id, mode: e.target.value }) }, [['disabled', 'Disabled'], ['read', 'Read only'], ['ask', 'Read/write, ask before writes'], ['write', 'Read/write']].map(([v, label]) => h('option', { key: v, value: v }, t(label))))))))),
+ h('details', {}, h('summary', {}, t('Diagnostics')), h('ul', {}, (app.diagnostics ?? []).map((d, i) => h('li', { key: i }, `${d.kind}: ${hostText(d.message)} ${d.code ?? ''} ${d.detail ?? ''}`)))),
+ h('details', {}, h('summary', {}, t('Delivery records')), (app.outbox ?? []).map(o => h('p', { key: o.id }, `${o.id}: ${o.status}`, o.status === 'failed' ? button('Try again', () => action({ operation: 'retry', outboxId: o.id })) : null))),
+ h('details', {}, h('summary', {}, t('Files')), (app.files ?? []).map(file => button(file.name, () => void run(async () => { const value = await actions.feishu({ operation: 'attachment', appId: app.id, attachmentId: file.id }); const bytes = Uint8Array.from(atob(value.content_base64), c => c.charCodeAt(0)); const href = URL.createObjectURL(new Blob([bytes])); const a = Object.assign(document.createElement('a'), { href, download: value.name ?? file.name }); a.click(); setTimeout(() => URL.revokeObjectURL(href), 10000) })))),
+ h('details', {}, h('summary', {}, t('Cards')), (app.cards ?? []).map(c => h(CardPanel, { key: c.id, card: c, action }))),
+ button('Delete connection', () => void run(async () => { await actions.feishu({ operation: 'delete', appId: selected }); select('') }), busy)) : null),
+ !app ? h('details', { className: 'bt-feishu-webhook' }, h('summary', {}, t('Custom bot webhook')), field('Webhook URL', webhook, setWebhook, 'password'), button('Connect', () => void run(() => actions.connectorConnect('feishu', { mode: 'webhook', credentials: { webhook } })), busy || !webhook)) : null,
+ error ? h('p', { className: 'bt-feishu-error', role: 'alert' }, error) : null)
+}
+
+function CardPanel({ card, action }) {
+ const [fields, setFields] = useState({})
+ return h('article', {}, h('strong', {}, card.card.title ?? 'FlyBot'), (card.card.blocks ?? []).map((b, i) => b.type === 'input' ? field(b.label ?? b.name, fields[b.name] ?? '', value => setFields({ ...fields, [b.name]: value })) : h('pre', { key: i }, b.text ?? JSON.stringify(b))),
+ (card.card.actions ?? []).map(a => button(a.label ?? a.id, () => action({ operation: 'card-action', cardId: card.id, action: a.id, fields }), card.closed)))
+}
diff --git a/core/src/client/i18n.js b/core/src/client/i18n.js
index 73fb06706..0106dd5ff 100644
--- a/core/src/client/i18n.js
+++ b/core/src/client/i18n.js
@@ -2,9 +2,12 @@
// Copy is looked up at render time and every slot outlet re-renders on a language
// switch, so nothing caches a translated string.
+import { FEISHU_ZH } from './feishu-copy.js'
+
export const NAMESPACE = 'ds-bot'
const ZH = {
+ ...FEISHU_ZH,
// Workflows settings (#1364). The page lists factory pipelines and your own graphs.
Workflows: '工作流',
@@ -1533,6 +1536,15 @@ export function installLocale(locale) {
}
}
+// Standalone workbench islands use the same copy without a Harness locale service.
+export function installBrowserLocale(tag) {
+ const active = typeof tag === 'string' ? tag : 'en'
+ return installLocale({
+ getLocale: () => ({ active }), register: () => () => {},
+ bind: () => (key, params) => fill(active.startsWith('zh') ? ZH[key] ?? key : key, params),
+ })
+}
+
export function t(key, params) {
return bound ? bound(key, params) : fill(key, params)
}
diff --git a/core/src/client/index.js b/core/src/client/index.js
index 8f48d3b1c..e2d426280 100644
--- a/core/src/client/index.js
+++ b/core/src/client/index.js
@@ -82,7 +82,7 @@ export function apply(ctx) {
try { friendLines = JSON.parse(localStorage.getItem(STORAGE.friendLines) ?? 'null') } catch { friendLines = null }
// `details` is the panel's subject (a Session id); `view` picks details or the
// subject Bot's browser inside it.
- const ui = createSource({ details: null, view: 'details', renaming: false, tab: null, newChat: null, exchange: null, menu: null, voice: null, palette: null, quote: null, settings: null, remoteBotSettings: null, memory: null, toast: null, signIn: null, renameAgent: null, unread: savedUnread, reactions: savedReactions, visits: {} })
+ const ui = createSource({ details: null, view: 'details', renaming: false, tab: null, newChat: null, exchange: null, menu: null, voice: null, palette: null, quote: null, settings: new URLSearchParams((window.location?.search ?? '')).has('feishu-app') ? { page: 'connectors', id: null } : null, remoteBotSettings: null, memory: null, toast: null, signIn: null, renameAgent: null, unread: savedUnread, reactions: savedReactions, visits: {} })
// Bot mode paints the whole team surface; Agent mode withdraws every slot and
// style so the shell's own interface returns. `plain` stays false until a Bot-mode
// view hosts a plain session, which drops only the conversation replacements.
@@ -616,6 +616,7 @@ export function apply(ctx) {
connectorDisconnect: id => after(call('connector-disconnect', { id })),
connectorRetry: id => after(call('connector-retry', { id })),
connectorSend: (id, text) => after(call('connector-send', { id, text })),
+ feishu: payload => call('feishu', payload),
saveCapability: capability => after(call('capability-save', capability)),
deleteCapability: name => after(call('capability-delete', { name })),
approveCapability: name => after(call('capability-approve', { name })),
diff --git a/core/src/client/member-status.js b/core/src/client/member-status.js
index 3cf4757aa..02d73e166 100644
--- a/core/src/client/member-status.js
+++ b/core/src/client/member-status.js
@@ -175,7 +175,7 @@ const since = (now, at) => (typeof at === 'number' && now - at >= 60000 ? ` · $
// "Always allow" is the owner's standing grant (#540): only on their own Bot's card,
// and the group option only when the request comes from a group.
-export const alwaysChoices = (approval, bot) => (bot?.remote ? [] : [
+export const alwaysChoices = (approval, bot) => (bot?.remote || approval.tool === 'feishu_tool' ? [] : [
['always-bot', 'Always allow for this Bot'],
...(approval.roomId ? [['always-room', 'Always allow for this group']] : []),
])
diff --git a/core/src/client/styles.js b/core/src/client/styles.js
index 01465aa25..36bcbf85e 100644
--- a/core/src/client/styles.js
+++ b/core/src/client/styles.js
@@ -586,6 +586,62 @@ button.bt-set-row:hover{background:var(--bt-hover)}
.bt-connector[data-state=error] .bt-connector-status{color:#e02135;white-space:normal}
.bt-connector-actions{flex:none;display:flex;gap:6px}
.bt-connector-form{display:flex;flex-direction:column;gap:8px;padding-left:48px;animation:bt-q-in ${SPRING_SHAPE.duration}ms ${SPRING_SHAPE.easing},bt-veil-in .2s ease-out}
+.bt-feishu-setup{container-type:inline-size;min-width:0;width:100%;max-width:960px;box-sizing:border-box;padding:20px;border:1px solid var(--bt-line);border-radius:14px;background:var(--bt-card);color:var(--bt-ink);font:13px/1.6 ui-sans-serif,system-ui,sans-serif;overflow-wrap:anywhere;animation:bt-veil-in .16s ease-out}
+.bt-feishu-setup *{box-sizing:border-box}
+.bt-feishu-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--bt-line)}
+.bt-feishu-header h3{padding:0;margin:0 0 4px;font-size:17px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-header>.bt-input{width:220px;max-width:45%;flex:none}
+.bt-feishu-setup .bt-set-hint{margin:0;font-size:12px;line-height:1.7;color:var(--bt-ink-2)}
+.bt-feishu-body{display:flex;flex-direction:column;gap:22px;padding-top:18px}
+.bt-feishu-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
+.bt-feishu-modes button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:11px 14px;border:1px solid var(--bt-line-2);border-radius:10px;background:var(--bt-card);color:var(--bt-ink);font:inherit;text-align:left;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-modes button:hover{background:var(--bt-hover)}
+.bt-feishu-modes button[aria-pressed=true]{border-color:var(--bt-accent);background:color-mix(in srgb,var(--bt-accent) 6%,var(--bt-card));box-shadow:0 0 0 1px var(--bt-accent)}
+.bt-feishu-modes strong{font-size:13px;font-weight:600}.bt-feishu-modes small{color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-layout{display:grid;grid-template-columns:160px minmax(0,1fr);gap:24px;align-items:start}
+.bt-feishu-progress{min-width:0}.bt-feishu-progress ol{display:flex;flex-direction:column;gap:4px;list-style:none;margin:0;padding:0}
+.bt-feishu-progress li{min-width:0}.bt-feishu-progress button{display:flex;align-items:center;gap:9px;width:100%;padding:9px 8px;border:0;border-radius:8px;background:transparent;color:var(--bt-ink-2);font:inherit;font-size:12px;line-height:19px;text-align:left;cursor:pointer}
+.bt-feishu-progress button:hover:not(:disabled){background:var(--bt-hover)}
+.bt-feishu-progress button[aria-current=step]{background:color-mix(in srgb,var(--bt-accent) 7%,var(--bt-card));color:var(--bt-accent);font-weight:600}
+.bt-feishu-progress button:disabled{opacity:.48;cursor:default}
+.bt-feishu-step-number{display:flex;align-items:center;justify-content:center;flex:none;width:22px;height:22px;border:1px solid var(--bt-line-2);border-radius:50%;font-size:11px;font-variant-numeric:tabular-nums}
+.bt-feishu-progress [aria-current=step] .bt-feishu-step-number{background:var(--bt-accent);border-color:var(--bt-accent);color:white}
+.bt-feishu-progress [data-done=true] .bt-feishu-step-number{border-color:transparent;background:var(--bt-hover);color:var(--bt-ink-2)}
+.bt-feishu-step{min-width:0}.bt-feishu-step-heading{margin-bottom:16px}.bt-feishu-eyebrow{display:block;margin-bottom:4px;color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-step h4{margin:0;font-size:16px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-step-content>div{display:flex;flex-direction:column;align-items:stretch;gap:14px}
+.bt-feishu-external{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;align-self:flex-start;border:1px solid var(--bt-line-2);border-radius:8px;padding:7px 11px;color:var(--bt-ink);font-size:12px;font-weight:500;text-decoration:none}
+.bt-feishu-external:hover{background:var(--bt-hover)}.bt-feishu-external span{color:var(--bt-ink-2)}
+.bt-feishu-permissions{display:flex;flex-direction:column;gap:10px;padding-top:5px}.bt-feishu-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.bt-feishu-section-head strong{font-size:13px;font-weight:600}
+.bt-feishu-optional{color:var(--bt-ink-2);font-size:11px}.bt-feishu-permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
+.bt-feishu-permission{display:flex;align-items:center;gap:9px;min-width:0;min-height:42px;margin:0;padding:9px 11px;border:1px solid var(--bt-line);border-radius:9px;background:var(--bt-card);font-size:12px;line-height:20px;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-permission:hover{border-color:var(--bt-line-2);background:var(--bt-hover)}
+.bt-feishu-permission[data-checked=true]{border-color:color-mix(in srgb,var(--bt-accent) 55%,var(--bt-line));background:color-mix(in srgb,var(--bt-accent) 5%,var(--bt-card))}
+.bt-feishu-setup input[type=checkbox]{appearance:auto;flex:none;width:15px;height:15px;min-height:0;margin:0;padding:0;border-radius:4px;accent-color:var(--bt-accent);cursor:pointer}
+.bt-feishu-permission-copy{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
+.bt-feishu-setup .bt-feishu-button{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;gap:6px;flex:none;width:auto;min-height:34px;height:auto;margin:0;padding:6px 12px;border:1px solid var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink);font:inherit;font-size:12px;font-weight:500;cursor:pointer;box-shadow:none}
+.bt-feishu-setup .bt-feishu-button:hover:not(:disabled){background:var(--bt-hover)}.bt-feishu-setup .bt-feishu-button:disabled{opacity:.4;cursor:default}
+.bt-feishu-setup .bt-feishu-primary{background:var(--bt-accent);border-color:var(--bt-accent);color:#fff;padding-inline:18px}
+.bt-feishu-setup .bt-feishu-primary:hover:not(:disabled){background:color-mix(in srgb,var(--bt-accent) 88%,#000)}
+.bt-feishu-setup .bt-feishu-quiet{border-color:transparent;background:transparent;color:var(--bt-ink-2)}
+.bt-feishu-setup :is(button,a,input,select,textarea):focus-visible{outline:2px solid var(--bt-accent);outline-offset:3px}
+.bt-feishu-setup details{min-width:0}.bt-feishu-setup summary{cursor:pointer;font-size:12px;font-weight:500;line-height:20px;padding:8px 0;color:var(--bt-ink-2)}
+.bt-feishu-json{border:0}.bt-feishu-setup .bt-feishu-json summary{padding:2px 0;color:var(--bt-accent);font-weight:400}
+.bt-feishu-setup .bt-feishu-json textarea{width:100%;height:180px;min-height:120px;max-height:320px;margin-top:10px;padding:12px;border:1px solid var(--bt-line);border-radius:8px;background:var(--bt-sidebar);color:var(--bt-ink-2);font:11px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;resize:vertical;white-space:pre;overflow:auto;overflow-wrap:normal}
+.bt-feishu-field,.bt-feishu-setup .bt-q-field{display:flex;flex-direction:column;flex:initial;gap:6px;min-width:0;min-height:0;margin:0;padding:0;border:0;cursor:default;color:var(--bt-ink-2);font-size:12px}
+.bt-feishu-setup .bt-input{min-width:0;height:38px;padding:0 11px;font-size:13px;border-color:var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink)}
+.bt-feishu-field+.bt-feishu-field{margin-top:2px}.bt-feishu-setup .bt-input:disabled{opacity:.65;background:var(--bt-sidebar)}
+.bt-feishu-check{display:flex;align-items:flex-start;gap:9px;font-size:12px}.bt-feishu-check input{margin-top:3px!important}
+.bt-feishu-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:22px;padding-top:16px;border-top:1px solid var(--bt-line)}
+.bt-feishu-footer>div{display:flex;align-items:center;gap:6px}.bt-feishu-result,.bt-feishu-error{margin:14px 0 0;padding:10px 12px;border-radius:8px;font-size:12px;line-height:1.6;background:var(--bt-sidebar);color:var(--bt-ink-2)}
+.bt-feishu-result[data-success=true]{color:var(--bt-ink);border:1px solid var(--bt-line)}.bt-feishu-error{color:#d33e4e;background:color-mix(in srgb,#e5484d 7%,var(--bt-card))}
+.bt-feishu-management{border-top:1px solid var(--bt-line);padding-top:8px}.bt-feishu-management>details+details{border-top:1px solid var(--bt-line)}
+.bt-feishu-management>details>summary{padding:12px 0;color:var(--bt-ink)}.bt-feishu-management>details[open]{display:flex;flex-direction:column;gap:10px;padding-bottom:14px}
+.bt-feishu-management>details>fieldset{min-width:0;margin:4px 0;padding:12px;border:1px solid var(--bt-line);border-radius:10px}.bt-feishu-management legend{font-size:12px;font-weight:600;padding-inline:4px}
+.bt-feishu-management fieldset>.bt-q-field+.bt-q-field{margin-top:10px}.bt-feishu-setup code,.bt-feishu-setup pre{white-space:pre-wrap;overflow-wrap:anywhere}.bt-feishu-setup ul{padding-left:18px;margin:4px 0}
+.bt-feishu-webhook{margin-top:18px;padding-top:10px;border-top:1px solid var(--bt-line)}.bt-feishu-webhook[open]{display:flex;flex-direction:column;gap:12px}.bt-feishu-webhook>summary{color:var(--bt-ink-2)}
+@container (max-width:640px){.bt-feishu-layout{display:flex;flex-direction:column;gap:18px}.bt-feishu-progress{width:100%}.bt-feishu-progress ol{flex-direction:row;gap:5px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.bt-feishu-progress li{flex:1}.bt-feishu-progress button{justify-content:center;padding:5px;gap:7px}.bt-feishu-step-label{display:none}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{display:block;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bt-feishu-progress li:has([aria-current=step]){flex:4}.bt-feishu-step{width:100%}.bt-feishu-header{flex-direction:column;gap:10px}.bt-feishu-header>.bt-input{max-width:100%;width:100%}}
+@container (max-width:340px){.bt-feishu-modes{gap:8px}.bt-feishu-modes button{padding:9px 10px}.bt-feishu-modes small{font-size:10px}.bt-feishu-permission{padding:8px}.bt-feishu-footer>div{gap:2px}.bt-feishu-footer .bt-feishu-button{padding-inline:9px}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{max-width:90px}}
.bt-connector-form-row{display:flex;align-items:center;gap:6px}
.bt-connector-apps{display:flex;flex-direction:column;gap:8px}
.bt-connector-link{flex:1;font-size:12px;color:var(--bt-ink-2)}
diff --git a/core/src/client/workbench/app.js b/core/src/client/workbench/app.js
index d56b15810..3e3448986 100644
--- a/core/src/client/workbench/app.js
+++ b/core/src/client/workbench/app.js
@@ -15,6 +15,7 @@ export function mountWorkbench(root, api, { pollMs = 4000 } = {}) {
else await conversationSource.open(binding)
return conversationSource.getSnapshot()
}
+ const feishuActions = { feishu: payload => api.call('feishu', payload), connectorConnect: (_id, body) => api.call('feishu', { operation: 'webhook', ...body.credentials }) }
const drafts = new Map(), expanded = new Map()
let runtimeTerminal, terminalTimer, terminalPolling = false, rooms, roomView, pools
async function closeTerminal() {
@@ -83,6 +84,7 @@ export function mountWorkbench(root, api, { pollMs = 4000 } = {}) {
++epoch; controller?.abort(); loading = null; clearConversation()
const revoke = api.call('auth-revoke')
api.setToken(''); void closeTerminal()
+ if (win.location.hash === '#/connections' || new URLSearchParams(win.location.search).has('feishu-app') && !win.location.hash) { selected = ''; tab = 'connections'; taskId = '' }
personal = personalMemory = null; drafts.clear(); notice = ''; error = ''
bootstrap = null; selected = ''; busy = false
detail = resources = agents = members = history = taskDetail = workflowState = rooms = roomView = pools = null
@@ -118,6 +120,11 @@ export function mountWorkbench(root, api, { pollMs = 4000 } = {}) {
const state = await api.call('workbench-state', {}, controller.signal)
if (current !== epoch || disposed) return
bootstrap = state
+ if (section === 'connections') {
+ personal = await api.call('personal-space', { operation: 'list' }, controller.signal)
+ if (current !== epoch || disposed) return
+ render(); return
+ }
if (section === 'personal') {
const roster = await api.call('personal-space', { operation: 'list' }, controller.signal)
if (current !== epoch || disposed) return
@@ -473,11 +480,16 @@ export function mountWorkbench(root, api, { pollMs = 4000 } = {}) {
for (const room of rooms?.rooms ?? []) roomNav.append(button(room.name, () => route(selected, 'rooms', room.id)))
sidebar.append(roomNav)
}
+ sidebar.append(button('Connections', () => { win.location.hash = '/connections' }))
sidebar.append(button('All Projects', () => { win.location.hash = '' }), button('Sign out', () => { void signOut() }))
- if (tab === 'personal') {
+ if (tab === 'connections') {
+ main.append(el('h1', 'Connections'))
+ const node = el('div', null, 'native-feishu-setup'); main.append(node)
+ nativeIslands.register(node, nativeKey('feishu'), conversationSource, (target, options) => win.FlyBotNativeConversation.mountNativeFeishu(target, options), { actions: feishuActions, roster: { ...personal, self: bootstrap.self }, onClose: () => { win.location.hash = '/personal' } })
+ } else if (tab === 'personal') {
const chatList = el('div', null, 'native-personal-list'); sidebar.append(chatList); mountPersonalList(chatList)
main.append(el('h1', 'Personal space'), el('p', 'Your original Chief, Bots and internal group conversations. Project agents remain separate.'))
- for (const bot of personal?.bots ?? []) {
+ for (const bot of (personal?.bots ?? []).filter(bot => !bot.remote)) {
const card = box(`${personal.mainBotIds.includes(bot.id) ? 'Chief · ' : ''}${bot.name}`, button('Open conversation', () => { win.location.hash = `/personal/${encodeURIComponent(bot.id)}` }))
const persona = el('details'); persona.dataset.personaId = bot.id; persona.append(el('summary', 'Persona'), el('p', bot.instructions ?? 'No persona')); card.append(persona); card.append(button('Own long-term memory', () => act(async () => { const captured = epoch; const memory = await api.call('personal-space', { operation: 'memory', id: bot.id }); if (captured === epoch && !disposed) personalMemory = { botId: bot.id, ...memory } }))); main.append(card)
}
diff --git a/core/src/client/workbench/native-conversation.js b/core/src/client/workbench/native-conversation.js
index cefc50719..9a5aa66e5 100644
--- a/core/src/client/workbench/native-conversation.js
+++ b/core/src/client/workbench/native-conversation.js
@@ -1,3 +1,5 @@
+import { FeishuSetup } from '../feishu-setup.js'
+import { installBrowserLocale } from '../i18n.js'
import { fileSize } from '../flybot-slots.js'
import { PendingQuestion } from '../questions.js'
import { ApprovalCard, MemberWork, MEMBER_CSS } from '../member-status.js'
@@ -19,7 +21,8 @@ function Conversation({ source, roster, openBot, onQuote }) {
const ui = { reactions: {} }
const reply = (row, key, streaming = false) => {
const bot = roster.bots.find(bot => bot.id === row.botId || bot.role === row.speaker)
- return h('article', { key, 'data-native-message': row.kind ?? 'assistant' },
+ return h('article', { key, 'data-native-message': row.kind ?? 'assistant', ...(row.feishu?.messageId ? { id: `feishu-message-${row.feishu.messageId}` } : {}) },
+ row.feishu?.rootId ? h('button', { type: 'button', onClick: () => document.getElementById(`feishu-message-${row.feishu.rootId}`)?.scrollIntoView?.({ block: 'center' }) }, '↪ Reply in thread') : null,
h('header', null, bot ? h(BotMark, { bot, size: 28 }) : h(PersonMark, { name: row.speaker }), row.speaker ?? (row.kind === 'human' ? 'You' : 'Bot')),
row.kind === 'human'
? h(PersonMessage, { name: row.speaker ?? 'You', texts: [String(row.text ?? '')], roster, selfId: bot?.id, useUi: select => select(ui), actions: { quote: (_id, text) => onQuote?.(text), openSession: id => { if (roster.byId[id]) openBot?.(id) } } })
@@ -124,3 +127,11 @@ function ScopedAttachments({ files, read }) {
typeof value?.text === 'string' ? h('pre', null, value.text) : null)
}), failure ? h('p', { role: 'alert' }, failure) : null)
}
+
+export function mountNativeFeishu(node, options) {
+ const off = installBrowserLocale(options.language ?? navigator.language)
+ const unmount = mountRoot(node, options, props => h(FeishuSetup, props))
+ const dispose = () => { unmount(); off() }
+ dispose.update = unmount.update
+ return dispose
+}
diff --git a/core/src/client/workbench/native-source.js b/core/src/client/workbench/native-source.js
index 103ec649d..c82a393f8 100644
--- a/core/src/client/workbench/native-source.js
+++ b/core/src/client/workbench/native-source.js
@@ -55,7 +55,8 @@ export function createScopedConversation(api) {
async readAttachment(file) {
if (disposed || !selected || captured !== generation) throw new Error('Conversation handle is retired')
let value
- if (selected.personalId) value = await api.call('personal-space', { operation: 'attachment-read', id: selected.personalId, ...(selected.personalPart ? { partId: selected.personalPart } : {}), seq: file.seq, attachmentId: file.id })
+ if (selected.personalId && file.feishuAppId) { const result = await api.call('feishu', { operation: 'attachment', appId: file.feishuAppId, attachmentId: file.id }); value = { ...file, data: result.content_base64 } }
+ else if (selected.personalId) value = await api.call('personal-space', { operation: 'attachment-read', id: selected.personalId, ...(selected.personalPart ? { partId: selected.personalPart } : {}), seq: file.seq, attachmentId: file.id })
else if (selected.roomId) value = await api.call('project-room-attachment', { projectId: selected.projectId, roomId: selected.roomId, attachmentId: file.id })
else throw new Error('Attachment is unavailable in this conversation')
if (disposed || captured !== generation) throw new Error('Conversation handle is retired')
diff --git a/core/src/host/approvals.js b/core/src/host/approvals.js
index 3423426fd..fd60ec760 100644
--- a/core/src/host/approvals.js
+++ b/core/src/host/approvals.js
@@ -64,7 +64,7 @@ export function install(rt) {
}
const step = ephemeralToolVerdict(bot, String(request.toolName ?? ''), request.reason)
if (step !== undefined) return step
- if (standingCovers(sessionId, botId, owner?.roomId, approvalKind(String(request.toolName ?? ''), request.reason))) return 'allowed-once'
+ if (request.toolName !== 'feishu_tool' && standingCovers(sessionId, botId, owner?.roomId, approvalKind(String(request.toolName ?? ''), request.reason))) return 'allowed-once'
const id = randomUUID()
const entry = {
id,
@@ -130,6 +130,7 @@ export function install(rt) {
async function grantStanding(entry, scope) {
await rt.load()
+ if (entry.tool === 'feishu_tool') throw Object.assign(new Error('Change the per-app Feishu grant to allow writes without asking'), { code: 'bot/forbidden' })
const bot = rt.botOf(entry.botId)
const target = scope === 'room' ? rt.roomOf(entry.roomId) : bot
if (bot === undefined || bot.remote !== undefined) throw Object.assign(new Error('Only your own Bot can be given a standing approval'), { code: 'bot/forbidden' })
@@ -143,7 +144,7 @@ export function install(rt) {
}
// Other cards the new grant already covers stop waiting too.
for (const other of pending.values()) {
- if (other.id !== entry.id && other.answer !== undefined && standingCovers(other.sessionId, other.botId, other.roomId, approvalKindOf(other))) other.answer('allowed-once')
+ if (other.tool !== 'feishu_tool' && other.id !== entry.id && other.answer !== undefined && standingCovers(other.sessionId, other.botId, other.roomId, approvalKindOf(other))) other.answer('allowed-once')
}
}
const approvalKindOf = entry => approvalKind(entry.tool, entry.reason)
diff --git a/core/src/host/authz.js b/core/src/host/authz.js
index 7baaad2f6..770b1438b 100644
--- a/core/src/host/authz.js
+++ b/core/src/host/authz.js
@@ -207,6 +207,7 @@ export function install(rt) {
questions: Object.fromEntries(Object.entries(bySession(full.questions)).filter(([id, question]) => questionFor(actor, id, question))),
exchangeTurns: bySession(full.exchangeTurns),
remoteTypedTurns: bySession(full.remoteTypedTurns),
+ feishuTurns: bySession(full.feishuTurns),
remoteAwaiting: bySession(full.remoteAwaiting),
agents: alone() ? full.agents : [],
secrets: alone() ? full.secrets : [],
@@ -240,6 +241,7 @@ export function install(rt) {
if (!rt.authzEnforced()) return ALLOW
const ep = String(endpoint ?? '')
+ if (ep === 'feishu') return actor ? ALLOW : deny('bot/unauthorized', 'Sign in first')
if (ep === 'platform-login') return rt.platformIdentityEnabled ? ALLOW : deny('bot/forbidden', 'Platform identity is not configured')
if (['project-development', 'project-rooms', 'project-room-create', 'project-room-read', 'project-room-message', 'project-room-attachment', 'project-room-stop', 'project-agent-stop', 'workbench-state', 'project-resources', 'project-resource-environment-check', 'project-execution-input', 'project-runtime-check', 'project-terminal-open', 'project-terminal-poll', 'project-terminal-input', 'project-terminal-resize', 'project-terminal-close', 'project-queue-cancel', 'project-queue-retry', 'project-task-pools', 'project-github-read', 'project-consultation-reply', 'project-consultation-ask', 'project-consultation-get', 'project-consultation-list', 'project-handoff-get', 'project-handoff-list', 'project-chief-question', 'project-agent-mode', 'project-scheduled-task', 'project-chief-configure', 'project-chief-state', 'project-chief-inspect', 'project-attempt-stop', 'project-credential-status', 'project-github-comment', 'project-agents', 'project-agent-message', 'project-agent-history', 'project-agent-memory-write', 'project-role-memory-write', 'project-agent-definition', 'project-roles', 'project-role-proposals', 'project-role-decision', 'project-agent-proposal-apply', 'project-knowledge-write', 'project-task-run', 'project-task-detail', 'project-task-accept', 'project-task-reject', 'project-release-request', 'project-release-reconcile', 'project-release-status', 'project-attempt-log', 'project-attempt-cleanup', 'project-attempt-publication-retry', 'project-members', 'project-invite', 'project-join', 'project-leave', 'project-member-remove', 'project-quota', 'project-workflow'].includes(ep) && !rt.sharedProjectMode?.()) return deny('bot/forbidden', 'Project workbench is not enabled')
if (rt.platformIdentityEnabled && ['auth-invite', 'auth-redeem', 'auth-remove-member'].includes(ep)) return deny('bot/platform-auth', 'Use control-plane account authentication')
diff --git a/core/src/host/channel.js b/core/src/host/channel.js
index 2b16fe233..6dc226379 100644
--- a/core/src/host/channel.js
+++ b/core/src/host/channel.js
@@ -179,6 +179,7 @@ export function install(rt) {
exchangeTurns: state.exchangeTurns,
// Per Session: turn → the person's name, for friends' lines Bot Social attests they typed themselves.
remoteTypedTurns: state.remoteTypedTurns ?? {},
+ feishuTurns: state.feishuTurns ?? {},
// Per friend chat: when my message left, while its reply has not come back (#443).
remoteAwaiting: state.remoteAwaiting ?? {},
questions: state.questions,
@@ -308,6 +309,8 @@ export function install(rt) {
const gate = rt.authorize(actor, endpoint, body)
if (!gate.ok) return fail(gate.message, gate.code)
switch (endpoint) {
+ case 'feishu':
+ return ok(await rt.feishu.endpoint(body, actor))
case 'auth-mode':
case 'workbench-state':
case 'project-resources':
@@ -433,7 +436,11 @@ export function install(rt) {
const hidden = new Set(state.exchangeTurns[sessionId] ?? [])
const messages = page.records.flatMap(({ event }) => {
if (hidden.has(event.data?.turn)) return []
- const attachments = personalMessageAttachments(event)
+ const source = event.data?.source
+ const feishu = source?.form === 'remote-chat' ? source.feishu : undefined
+ const attachments = personalMessageAttachments(event).map(file => feishu ? { ...file, feishuAppId: feishu.appId } : file)
+ if (feishu) return [{ attachments, seq: event.seq, id: `${sessionId}:${event.seq}`, botId: null, kind: source.typedBy ? 'human' : 'assistant', speaker: source.typedBy ?? source.senderName, text: source.text, feishu }]
+ if (event.type === 'assistant/message' && state.feishuTurns?.[sessionId]?.[event.data?.turn]) return []
const entry = rt.historyEntry(event, Boolean(rt.roomOf(sessionId))) ?? (event.type === 'assistant/message' && attachments.length ? { answer: true, text: '' } : undefined)
return entry && (entry.text || attachments.length) ? [{ attachments, seq: event.seq, id: `${sessionId}:${event.seq}`, botId: entry.answer ? rt.botOf(sessionId)?.id : null, kind: entry.answer ? 'assistant' : 'human', speaker: entry.answer ? rt.botOf(sessionId)?.name ?? 'Bot' : currentActor.displayName ?? 'You', text: entry.text }] : []
})
@@ -648,7 +655,7 @@ export function install(rt) {
case 'connector-retry':
case 'connector-send':
await rt.load()
- return ok(await rt.connectorEndpoint(endpoint, body))
+ return ok(await rt.connectorEndpoint(endpoint, body, actor))
case 'capability-save':
case 'capability-delete':
case 'capability-approve':
diff --git a/core/src/host/connectors.js b/core/src/host/connectors.js
index 634d50914..33f756601 100644
--- a/core/src/host/connectors.js
+++ b/core/src/host/connectors.js
@@ -564,7 +564,7 @@ export function install(rt) {
if (typeof seam?.onSend !== 'function') return
if (feishuWire.seam === seam) return
feishuWire.off?.()
- feishuWire = { seam, off: seam.onSend(FEISHU, feishuReply({ secretValue: name => rt.secretValue(name), appOf })) }
+ feishuWire = { seam, off: seam.onSend(FEISHU, message => rt.feishu ? rt.feishu.reply(message) : feishuReply({ secretValue: name => rt.secretValue(name), appOf })(message)) }
}
const feishuInbound = createInbound({
@@ -639,6 +639,11 @@ export function install(rt) {
async function reconcileChannel(c, force, token) {
const { def } = c
const record = saved(c) ?? {}
+ if (record.managed === true) {
+ await feishuInbound.stop()
+ c.status = { state: 'ready' }
+ return
+ }
const mode = record.mode === 'app' ? 'app' : record.mode === 'webhook' ? 'webhook' : undefined
const app = mode === 'app' ? appOf() : undefined
const key = mode === 'app' ? `app\n${app?.appId ?? ''}\n${app?.appSecret ?? ''}` : mode === 'webhook' ? `webhook\n${token ?? ''}` : undefined
@@ -770,6 +775,7 @@ export function install(rt) {
// here carries a secret: the App ID is not one, and the webhook never comes back.
...(c.def.id === FEISHU ? {
mode: saved(c)?.mode ?? null,
+ ...(saved(c)?.managed === true ? { managed: true } : {}),
modes: c.def.modes,
allowed: (saved(c)?.allowed ?? []).map(entry => ({ openId: entry.openId, name: entry.name ?? entry.openId })),
inbound: { ...feishuInbound.view(), app: appOf() === undefined ? 'missing' : 'set' },
@@ -815,7 +821,7 @@ export function install(rt) {
c.saving += 1
try {
await rt.secretEndpoint('secret-set', { name: FEISHU_SECRET, value: webhook, purpose: c.def.purpose })
- state.connectors = { ...state.connectors, [FEISHU]: { ...previous, mode: 'webhook', connectedAt: Date.now() } }
+ state.connectors = { ...state.connectors, [FEISHU]: { ...previous, mode: 'webhook', managed: false, connectedAt: Date.now() } }
await rt.save()
} finally {
c.saving -= 1
@@ -955,10 +961,11 @@ export function install(rt) {
async 'connector-block'(body) {
return allowedOp(body, false)
},
- async 'connector-disconnect'(body) {
+ async 'connector-disconnect'(body, actor) {
const c = known(body.id)
await rt.loadSecrets()
if (c.def.kind === 'channel') {
+ for (const app of Object.values(state.feishu?.apps ?? {})) await rt.feishu?.endpoint({ operation: 'delete', appId: app.id }, actor)
// Disconnect closes both (#1266): the socket goes down, the webhook and the app secret are
// deleted (each only if it is there — deleting a key that is not saved is an error), and the
// record goes with them, so the row is `off` and no turn can start.
@@ -1019,7 +1026,7 @@ export function install(rt) {
},
}
- const connectorEndpoint = (endpoint, body) => endpoints[endpoint](body ?? {})
+ const connectorEndpoint = (endpoint, body, actor) => endpoints[endpoint](body ?? {}, actor)
// An older version kept the session's address in state.json. Only the id stays; the address is
// asked for again at mount time (composioSessionFind).
@@ -1048,5 +1055,5 @@ export function install(rt) {
}
}, 'ds-bot: connectors')
- Object.assign(rt, { connectorsView, connectorEndpoint, secretsChanged: () => { void syncAll() } })
+ Object.assign(rt, { replyLegacyFeishu: feishuReply({ secretValue: name => rt.secretValue(name), appOf }), stopLegacyFeishu: () => feishuInbound.stop(), connectorsView, connectorEndpoint, secretsChanged: () => { void syncAll() } })
}
diff --git a/core/src/host/constants.js b/core/src/host/constants.js
index d6ef5d367..ed0c7971f 100644
--- a/core/src/host/constants.js
+++ b/core/src/host/constants.js
@@ -57,7 +57,7 @@ export const TEAM_TOOLS = [
'list_bots', 'message_bot', 'stop_bot', 'create_bot', 'update_bot', 'archive_bot', 'list_models',
'bot_schedules', 'project_state', 'project_digest', 'meeting',
'create_group', 'update_group', 'delete_group', 'post_to_group', 'ask_user', 'track_tasks',
- 'request_secret', 'list_secrets', 'group_relay', 'read_own_chat',
+ 'request_secret', 'list_secrets', 'feishu_apps', 'feishu_tool', 'feishu_card', 'feishu_file', 'group_relay', 'read_own_chat',
'read_group_chat', 'remember', 'forget', 'recall', 'read_browser',
'list_capabilities', 'save_capability', 'delete_capability',
'attach_capability', 'detach_capability',
diff --git a/core/src/host/delivery.js b/core/src/host/delivery.js
index 7df2f934f..4d9472abd 100644
--- a/core/src/host/delivery.js
+++ b/core/src/host/delivery.js
@@ -166,7 +166,7 @@ export function install(rt) {
// group turn (groups.js). `fromRoomId`: the group whose Session the sender wrote
// from; the reply goes back to that Session (turns.js). `answeredIn`: the group where the user
// answered the Bot's question card about work handed over from there (tools.js, #550).
- async function deliver({ fromId, toId, sessionId, text, role, hop = 0, replyTo, roomId, audience, note, exchangeId = randomUUID(), steer = false, deferred = false, resumed = false, retried = false, rateLimited = false, resent = false, askedBy, fromRoomId, answeredIn, fromName: givenName, untrusted = false, remote, attachments, origin: givenOrigin, taskDrive = false, projectDelegation }) {
+ async function deliver({ fromId, toId, sessionId, text, role, hop = 0, replyTo, roomId, audience, note, exchangeId = randomUUID(), steer = false, deferred = false, resumed = false, retried = false, rateLimited = false, resent = false, askedBy, fromRoomId, answeredIn, fromName: givenName, untrusted = false, remote, attachments, origin: givenOrigin, taskDrive = false, projectDelegation, feishu, requesterMemberId }) {
const from = rt.botOf(fromId)
const to = rt.botOf(toId)
if (to === undefined) throw new Error(`Unknown Bot ${toId}`)
@@ -193,6 +193,8 @@ export function install(rt) {
hop,
// Whose request this is, for the connector tools (turn-origin.js): read by the receiving turn.
origin,
+ ...(feishu ? { feishu } : {}),
+ ...(requesterMemberId ? { requesterMemberId } : {}),
...(fromId ? { senderSessionId: fromId } : {}),
...(replyTo ? { replyTo } : {}),
...(roomId ? { roomId } : {}),
@@ -210,7 +212,7 @@ export function install(rt) {
// `firstContact`: this sender's first line in the Bot's own chat; the chat names who is talking (#420).
...(remote?.handle ? { remote: { handle: String(remote.handle), ...(remote.home ? { home: String(remote.home) } : {}), ...(remote.typedBy ? { typedBy: cleanName(remote.typedBy) } : {}), ...(firstContact ? { firstContact: true } : {}) } } : {}),
// A remote member's files, as references the chat shows as chips (fetched on demand).
- ...(remote?.handle && Array.isArray(attachments) && attachments.length ? { attachments: attachments.map(file => ({ id: String(file.id ?? ''), name: String(file.name), size: Number(file.size), mime: String(file.mime ?? '') })) } : {}),
+ ...((remote?.handle || feishu) && Array.isArray(attachments) && attachments.length ? { attachments: attachments.map(file => ({ id: String(file.attachmentId ?? file.id ?? ''), name: String(file.name), size: Number(file.bytes ?? file.size), mime: String(file.mediaType ?? file.mime ?? '') })) } : {}),
}
if (EXCHANGE_ROLES.has(role) && !deferred && !resumed && !retried && !rateLimited && !resent) {
const exchange = { id: exchangeId, from: fromId, to: toId, text, role, time: Date.now(), ...(replyTo ? { replyTo } : {}), ...(audience === 'user' ? { audience } : {}) }
@@ -221,9 +223,10 @@ export function install(rt) {
if (projectDelegation && !rt.projectAgents?.isDelegationActive(projectDelegation.agentId, projectDelegation.delegationId)) throw new Error('Project delegation was revoked before delivery')
// A steered message cuts into a running turn at its next step; a follow-up
// queues for the next turn (see turns.js for how each is routed).
+ if (feishu && !deferred && !resumed && !retried && !rateLimited && !resent && agent.session?.surface?.nodes?.some(seq => (agent.session.eventAt(seq)?.data?.source ?? agent.session.eventAt(seq)?.data?.message?.source)?.exchangeId === exchangeId)) return exchangeId
const body = fromId ? stripSessionChips(text) : text
const message = createUserMessage({
- content: [{ type: 'text', text: `${headerFor(role, fromName, room?.name, audience, note, deferred, { resumed, retried, rateLimited, answeredIn })}\n${untrusted ? fenceUntrusted(fromName, body) : body}` }],
+ content: [{ type: 'text', text: `${headerFor(role, fromName, room?.name, audience, note, deferred, { resumed, retried, rateLimited, answeredIn })}\n${untrusted ? fenceUntrusted(fromName, body) : body}` }, ...(feishu ? (attachments ?? []).map(file => ({ type: file.mediaType ? 'image' : 'file', attachment: file })) : [])],
source,
})
if (steer) agent.steer(message)
diff --git a/core/src/host/feishu-api.js b/core/src/host/feishu-api.js
new file mode 100644
index 000000000..3866c9116
--- /dev/null
+++ b/core/src/host/feishu-api.js
@@ -0,0 +1,32 @@
+const ORIGIN = 'https://open.feishu.cn/open-apis/'
+export class FeishuError extends Error {
+ constructor(code, detail = '') { super(`Feishu refused the request (${code})${detail ? `: ${detail}` : ''}`); this.code = code; this.detail = detail }
+}
+export function createFeishuApi(credentials, request = fetch, checkApplication = () => {}) {
+ let cached
+ async function token() {
+ if (cached?.until > Date.now()) return cached.value
+ const creds = await credentials()
+ if (!creds) throw new Error('Feishu credentials are missing')
+ const res = await request(`${ORIGIN}auth/v3/tenant_access_token/internal`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ app_id: creds.appId, app_secret: creds.appSecret }), redirect: 'error', signal: AbortSignal.timeout(15000) })
+ const body = await res.json()
+ if (!res.ok || body.code !== 0 || !body.tenant_access_token) { const error = new FeishuError(body.code ?? res.status); error.stage = 'credentials'; throw error }
+ cached = { value: body.tenant_access_token, until: Date.now() + Math.max(0, (Number(body.expire ?? 0) - 60) * 1000) }
+ return cached.value
+ }
+ async function call(method, path, { body, query, raw = false, authorize } = {}) {
+ if (!/^[a-z][a-z0-9_-]*\/v[1-9]\//.test(path) || path.includes('..') || /[?#\\]/.test(path)) throw new Error('Invalid Feishu API path')
+ const url = new URL(path, ORIGIN)
+ for (const [k, v] of Object.entries(query ?? {})) if (v !== undefined) url.searchParams.set(k, String(v))
+ const access = await token()
+ checkApplication()
+ authorize?.()
+ const form = body instanceof FormData
+ const res = await request(url.href, { method, redirect: 'error', signal: AbortSignal.timeout(60000), headers: { authorization: `Bearer ${access}`, ...(!form && body !== undefined ? { 'content-type': 'application/json' } : {}) }, ...(body !== undefined ? { body: form ? body : JSON.stringify(body) } : {}) })
+ if (raw && res.ok) return res
+ const data = await res.json().catch(() => ({}))
+ if (!res.ok || data.code !== 0) throw new FeishuError(data.code ?? res.status, typeof data.msg === 'string' ? data.msg.slice(0, 400) : '')
+ return data.data ?? data
+ }
+ return { call, clear: () => { cached = undefined } }
+}
diff --git a/core/src/host/feishu-calendar.js b/core/src/host/feishu-calendar.js
new file mode 100644
index 000000000..7c8a7240c
--- /dev/null
+++ b/core/src/host/feishu-calendar.js
@@ -0,0 +1,75 @@
+const enc = value => encodeURIComponent(String(value))
+const rank = role => ['free_busy_reader', 'reader', 'writer', 'owner'].indexOf(role)
+
+async function pages(api, path, query, key) {
+ const result = []; let token
+ do {
+ const response = await api.call('GET', path, { query: { ...query, ...(token ? { page_token: token } : {}) } })
+ result.push(...(response[key] ?? []))
+ token = response.has_more ? response.page_token : undefined
+ } while (token)
+ return result
+}
+
+export function createFeishuCalendars(service) {
+ const inFlight = new Set()
+ const shares = () => service.data().calendarShares ??= {}
+ const scopedApi = (appId, authorize) => ({ call: (method, path, options) => service.api(appId).call(method, path, { ...options, authorize }) })
+ async function synchronize(record, authorize = () => service.authorizeTool(record.botId, record.appId, 'calendar', true)) {
+ const key = `${record.appId}:${record.calendarId}:${record.chatId}`
+ if (inFlight.has(key)) return { pending: true }
+ inFlight.add(key)
+ try {
+ const api = scopedApi(record.appId, authorize), root = `calendar/v4/calendars/${enc(record.calendarId)}`
+ const users = await pages(api, `im/v1/chats/${enc(record.chatId)}/members`, { member_id_type: 'open_id', page_size: 100 }, 'items')
+ const existing = await pages(api, `${root}/acls`, { user_id_type: 'open_id', page_size: 50 }, 'acls')
+ const failed = []
+ for (const person of users) {
+ const id = person.member_id
+ if (!id || existing.some(a => a.scope?.user_id === id && rank(a.role) >= rank(record.role))) continue
+ try {
+ const created = await api.call('POST', `${root}/acls`, { query: { user_id_type: 'open_id' }, body: { role: record.role, scope: { type: 'user', user_id: id } } })
+ await service.commit(() => { const current = shares()[key]; if (current) { current.added ??= {}; current.added[id] = { aclId: created.acl_id, role: record.role } } })
+ } catch (error) { failed.push(id); await service.diagnose(record.appId, 'calendar-share', error) }
+ }
+ await service.commit(() => { if (shares()[key]) shares()[key].syncedAt = Date.now() })
+ return { members: users.length, failed }
+ } finally { inFlight.delete(key) }
+ }
+ async function share(appId, botId, args, authorize = () => service.authorizeTool(botId, appId, 'calendar', true)) {
+ const calendarId = String(args.calendar_id ?? ''), chatId = String(args.chat_id ?? ''), role = args.role ?? 'reader'
+ if (!calendarId || !chatId || rank(role) < 0) throw new Error('Choose a calendar, chat and valid calendar role')
+ const key = `${appId}:${calendarId}:${chatId}`
+ if (args.stop) {
+ const record = shares()[key]
+ if (!record) return { removed: 0 }
+ const api = scopedApi(appId, authorize), existing = await pages(api, `calendar/v4/calendars/${enc(calendarId)}/acls`, { user_id_type: 'open_id', page_size: 50 }, 'acls')
+ let removed = 0
+ for (const [id, added] of Object.entries(record.added ?? {})) {
+ const acl = existing.find(a => a.acl_id === added.aclId && a.scope?.user_id === id && a.role === added.role)
+ if (!acl || Object.values(shares()).some(s => s !== record && s.appId === appId && s.calendarId === calendarId && s.added?.[id])) continue
+ await api.call('DELETE', `calendar/v4/calendars/${enc(calendarId)}/acls/${enc(acl.acl_id)}`); removed++
+ }
+ await service.commit(() => { delete shares()[key] })
+ return { removed }
+ }
+ await service.commit(() => { shares()[key] = { ...shares()[key], appId, botId, calendarId, chatId, role } })
+ return synchronize(shares()[key], authorize)
+ }
+ async function follow(appId, chatId) {
+ for (const record of Object.values(shares())) if (record.appId === appId && record.chatId === chatId && (record.syncedAt ?? 0) < Date.now() - 600000) {
+ // Revoking the Bot's grant also stops automatic additions; membership messages never grant writes.
+ try { service.authorizeTool(record.botId, appId, 'calendar', true); await synchronize(record) }
+ catch (error) { await service.diagnose(appId, 'calendar-share', error) }
+ }
+ }
+ async function link(appId, calendarId, authorize) {
+ const api = scopedApi(appId, authorize), root = `calendar/v4/calendars/${enc(calendarId)}`
+ const calendar = await api.call('GET', root)
+ const events = await api.call('GET', `${root}/events`, { query: { page_size: 100 } })
+ const id = (events.items ?? []).map(e => /[?&]calendarId=(\d+)/.exec(e.app_link ?? '')?.[1]).find(Boolean)
+ if (!id) throw new Error('日历需要至少一个日程才能分享,请先创建日程。')
+ return { name: calendar.calendar?.summary ?? calendar.summary ?? calendarId, permissions: calendar.calendar?.permissions ?? calendar.permissions, url: `https://applink.feishu.cn/client/calendar/detail?calendarId=${id}&source=calendar_share_by_owner` }
+ }
+ return { share, follow, link }
+}
diff --git a/core/src/host/feishu-format.js b/core/src/host/feishu-format.js
new file mode 100644
index 000000000..cb17f6e5b
--- /dev/null
+++ b/core/src/host/feishu-format.js
@@ -0,0 +1,111 @@
+export const MAX_IN = 20 * 1024 * 1024
+export const MAX_IMAGE = 10 * 1024 * 1024
+export const MAX_FILE = 30 * 1024 * 1024
+export const MAX_POST = 30 * 1024
+const asText = v => typeof v === 'string' ? v : ''
+
+export function fromPost(post) {
+ const localized = post?.content ? post : Object.values(post ?? {}).find(v => Array.isArray(v?.content))
+ const lines = (localized?.content ?? []).map(line => line.map(node => {
+ let text = asText(node.text)
+ if (node.tag === 'a') text = `[${text}](${asText(node.href)})`
+ if (node.tag === 'at') text = `@${asText(node.user_name) || asText(node.user_id)}`
+ if (node.tag === 'code_block') return `\n\`\`\`${asText(node.language)}\n${text}\n\`\`\`\n`
+ if (node.tag === 'hr') return '\n---\n'
+ for (const [style, marker] of [['bold', '**'], ['italic', '*'], ['lineThrough', '~~']]) if (node.style?.includes(style)) text = `${marker}${text}${marker}`
+ return text
+ }).join(''))
+ return [localized?.title, ...lines].filter(Boolean).join('\n')
+}
+export function readMessage(envelope) {
+ if (envelope?.header?.event_type !== 'im.message.receive_v1') return null
+ const m = envelope.event?.message, sender = envelope.event?.sender
+ if (!m?.chat_id || !m.message_id || !sender?.sender_id?.open_id) return null
+ let c
+ try { c = JSON.parse(m.content) } catch { return null }
+ let text = m.message_type === 'text' ? asText(c.text) : m.message_type === 'post' ? fromPost(c) : m.message_type === 'interactive' ? cardWords(c) : ''
+ const files = []
+ if (m.message_type === 'image' && c.image_key) files.push({ key: c.image_key, type: 'image', name: 'image.png' })
+ if (['file', 'audio', 'media'].includes(m.message_type) && c.file_key) files.push({ key: c.file_key, type: 'file', name: c.file_name ?? `${m.message_type}.bin` })
+ if (m.message_type === 'post') {
+ const post = c.content ? c : Object.values(c).find(v => v?.content)
+ for (const row of post?.content ?? []) for (const n of row) if (n.tag === 'img' && n.image_key) files.push({ key: n.image_key, type: 'image', name: 'image.png' })
+ }
+ if (!text && !files.length) return null
+ text = text.replace(/@_user_\d+/g, key => { const person = (m.mentions ?? []).find(p => p.key === key); return person?.name ? `@${person.name}` : '' }).trim()
+ return { id: envelope.header.event_id ?? m.message_id, messageId: m.message_id, chatId: m.chat_id, rootId: m.root_id || m.parent_id || null, openId: sender.sender_id.open_id, bot: sender.sender_type === 'app', group: m.chat_type === 'group', mentions: m.mentions ?? [], text, files }
+}
+export function markdown(text, mentions = new Map()) {
+ let fence
+ return String(text).split('\n').map(line => {
+ const marker = /^\s*(`{3,}|~{3,})/.exec(line)?.[1]
+ if (marker) { const entering = !fence; if (entering) fence = marker; else if (marker[0] === fence[0] && marker.length >= fence.length) fence = undefined; return line }
+ if (fence) return line
+ return line.replace(/^#{1,3} /, h => h.length === 2 ? '#### ' : '##### ').split(/(`+[^`]*`+)/g).map((part, i) => {
+ if (i % 2) return part
+ let out = part.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '🖼 [$1]($2)')
+ .replace(/<(?!\/?u>)([^>]+)>/g, (all, tag) => /^https?:\/\//.test(tag) ? all : `<${tag}>`)
+ .replace(/\[([^\]]*)\]\(([^)]+)\)/g, (all, label, url) => /^https?:\/\//.test(url) ? all : label)
+ for (const [name, id] of [...mentions].sort(([a], [b]) => b.length - a.length)) out = out.split(`@${name}`).join(`${name.replace(/[<>]/g, '')}`)
+ return out
+ }).join('')
+ }).join('\n')
+}
+export function cardWords(value) {
+ if (typeof value === 'string') return value
+ if (Array.isArray(value)) return value.map(cardWords).filter(Boolean).join('\n')
+ if (!value || typeof value !== 'object') return ''
+ return Object.entries(value).filter(([k]) => ['text', 'content', 'title', 'elements', 'body', 'blocks', 'description'].includes(k)).map(([, v]) => cardWords(v)).filter(Boolean).join('\n')
+}
+
+export function validateCard(card) {
+ if (!card || !Array.isArray(card.blocks) || card.blocks.length > 80 || JSON.stringify(card).length > 100000) throw new Error('Invalid card')
+ const kinds = ['text', 'fields', 'list', 'progress', 'table', 'chart', 'pages', 'input', 'applet']
+ const names = new Set(); let count = 0
+ const visit = (blocks, depth = 0) => {
+ if (!Array.isArray(blocks) || depth > 5) throw new Error('Invalid card pages')
+ for (const b of blocks) {
+ if (!b || !kinds.includes(b.type) || ++count > 80) throw new Error('Unknown or excessive card blocks')
+ if (b.type === 'input') {
+ if (typeof b.name !== 'string' || !/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(b.name) || names.has(b.name)) throw new Error('Card inputs need unique names')
+ names.add(b.name)
+ }
+ if (b.type === 'pages') {
+ if (!Array.isArray(b.pages) || b.pages.length > 20) throw new Error('Invalid card pages')
+ for (const p of b.pages) visit(p.blocks, depth + 1)
+ }
+ if (b.type === 'table' && (!Array.isArray(b.columns) || !Array.isArray(b.rows))) throw new Error('Invalid card table')
+ if (['list', 'fields'].includes(b.type) && !Array.isArray(b.items)) throw new Error('Invalid card items')
+ if (b.type === 'chart' && (!b.spec || typeof b.spec !== 'object')) throw new Error('Invalid card chart')
+ }
+ }
+ visit(card.blocks)
+ if (!Array.isArray(card.actions ?? []) || (card.actions?.length ?? 0) > 12) throw new Error('Invalid card actions')
+ const ids = (card.actions ?? []).map(a => a.id)
+ if (ids.some(id => typeof id !== 'string' || !/^[\w-]{1,64}$/.test(id)) || new Set(ids).size !== ids.length) throw new Error('Invalid card action ID')
+ return structuredClone(card)
+}
+const plain = content => ({ tag: 'plain_text', content: String(content ?? '') })
+const md = content => ({ tag: 'markdown', content: markdown(content) })
+export function toCard(record) {
+ const inputs = []
+ const block = b => {
+ if (b.type === 'input') { inputs.push({ tag: 'input', name: b.name, label: plain(b.label), placeholder: plain(b.placeholder) }); return [] }
+ if (b.type === 'table') return [{ tag: 'table', page_size: Math.max(1, Math.min(10, b.rows?.length ?? 1)), columns: (b.columns ?? []).map((c, i) => ({ name: `c${i}`, display_name: c.label ?? c, data_type: 'text' })), rows: (b.rows ?? []).map(r => Object.fromEntries((b.columns ?? []).map((c, i) => [`c${i}`, String(Array.isArray(r) ? r[i] ?? '' : r[c.key] ?? '')]))) }]
+ if (b.type === 'chart') return [{ tag: 'chart', chart_spec: b.spec, aspect_ratio: '16:9' }]
+ if (b.type === 'pages') return (b.pages ?? []).flatMap(p => {
+ const parts = (p.blocks ?? []).flatMap(block)
+ return parts.some(e => e.tag === 'table') ? [md(`**${p.title}**`), ...parts] : [{ tag: 'collapsible_panel', header: { title: plain(p.title) }, elements: parts }]
+ })
+ if (b.type === 'fields') return [md((b.items ?? []).map(f => `**${f.label}** ${f.value}`).join('\n'))]
+ if (b.type === 'list') return [md((b.items ?? []).map(f => `- ${typeof f === 'string' ? f : f.title}`).join('\n'))]
+ if (b.type === 'progress') { const n = Math.round(Math.min(1, Math.max(0, Number(b.value) / (Number(b.max) || 100))) * 10); return [md(`${b.label ?? ''} ${'█'.repeat(n)}${'░'.repeat(10 - n)} ${n * 10}%`)] }
+ if (b.type === 'applet') return [md(`${b.description ?? ''}\n请在 FlyBot 控制台中打开使用。`)]
+ return [md(b.text ?? '')]
+ }
+ const elements = record.card.blocks.flatMap(block)
+ const buttons = (record.card.actions ?? []).map(a => ({ tag: 'button', name: a.id, text: plain(a.label ?? a.id), type: 'primary', action_type: 'form_submit', disabled: record.closed === true, value: { flybot_card: record.id, action: a.id, version: record.version } }))
+ if (inputs.length || buttons.length) elements.push({ tag: 'form', name: 'card_form', elements: [...inputs, ...buttons] })
+ if (record.submissions?.length) elements.push(md(record.submissions.map(s => `${s.name}:${s.action}`).join('\n')))
+ return { schema: '2.0', config: { update_multi: true }, header: { title: plain(record.card.title ?? 'FlyBot') }, body: { elements } }
+}
diff --git a/core/src/host/feishu-http.js b/core/src/host/feishu-http.js
new file mode 100644
index 000000000..8e8913b24
--- /dev/null
+++ b/core/src/host/feishu-http.js
@@ -0,0 +1,19 @@
+import { createServer } from 'node:http'
+
+// A separate listener exposes only authenticated Feishu events, never Harness or the console.
+export function createFeishuEventServer(service) {
+ return createServer(async (req, res) => {
+ const match = /^\/api\/feishu\/events\/(cli_[0-9a-f]{16})$/i.exec(req.url ?? '')
+ if (req.method !== 'POST' || !match) { res.writeHead(404).end(); return }
+ if (Number(req.headers['content-length']) > 1024 * 1024) { res.writeHead(413).end(); req.resume(); return }
+ try {
+ const chunks = []; let size = 0
+ for await (const chunk of req) { size += chunk.length; if (size > 1024 * 1024) { res.writeHead(413).end(); req.resume(); return }; chunks.push(chunk) }
+ const answer = await service.receive(match[1], JSON.parse(Buffer.concat(chunks).toString()), 'http')
+ res.writeHead(200, { 'content-type': 'application/json' }).end(JSON.stringify(answer))
+ } catch (error) {
+ const status = error.code === 'bot/forbidden' ? 403 : error instanceof SyntaxError ? 400 : 503
+ res.writeHead(status, { 'content-type': 'application/json' }).end(JSON.stringify({ error: status === 403 ? error.message : 'Event could not be saved; retry later' }))
+ }
+ })
+}
diff --git a/core/src/host/feishu-sdk.js b/core/src/host/feishu-sdk.js
index b9f530969..d9d52a930 100644
--- a/core/src/host/feishu-sdk.js
+++ b/core/src/host/feishu-sdk.js
@@ -12,6 +12,9 @@
export const SDK_PACKAGE = '@larksuiteoapi/node-sdk'
// A socket that never opens must not hang a start: the row says `error` instead.
export const READY_TIMEOUT_MS = 15_000
+// The lazy import lets a host without the package start healthy and fail only at the dial, so the
+// failure carries its own type: the owner is told to install it, not to check the network.
+export class FeishuSdkMissing extends Error {}
const within = (promise, ms, message) => {
let timer
@@ -25,6 +28,7 @@ export function createFeishuTransport({
credentials,
importSdk = () => import(SDK_PACKAGE),
log = () => {},
+ onState = () => {},
readyTimeoutMs = READY_TIMEOUT_MS,
} = {}) {
return {
@@ -38,13 +42,14 @@ export function createFeishuTransport({
sdk = await importSdk()
} catch (error) {
const why = String(error?.message ?? error).split('\n')[0]
- throw new Error(`The Feishu long connection needs ${SDK_PACKAGE} installed: ${why}`)
+ throw new FeishuSdkMissing(`The Feishu long connection needs ${SDK_PACKAGE} installed: ${why}`)
}
const Lark = sdk?.default ?? sdk
const { WSClient, EventDispatcher } = Lark ?? {}
if (typeof WSClient !== 'function' || typeof EventDispatcher !== 'function') throw new Error(`${SDK_PACKAGE} does not export the long-connection client`)
const dispatcher = new EventDispatcher({}).register({
+ 'card.action.trigger': data => onEvent({ header: { event_id: data?.event_id, event_type: 'card.action.trigger' }, event: data?.event ?? data }),
'im.message.receive_v1': data => onEvent({
header: { event_id: data?.event_id, event_type: 'im.message.receive_v1' },
event: { sender: data?.sender, message: data?.message },
@@ -55,10 +60,12 @@ export function createFeishuTransport({
const client = new WSClient({
appId: app.appId,
appSecret: app.appSecret,
+ logger: { error: () => log('Feishu SDK error'), warn: () => {}, info: () => {}, debug: () => {}, trace: () => {} },
+ onReconnected: () => onState('ready'),
// `onReady` is the first open; a later reconnect is not a second inbox, so it only logs.
- onReady: () => settle.resolve(),
- onError: error => settle.reject(error),
- onReconnecting: () => log('the Feishu long connection is reconnecting'),
+ onReady: () => { onState('ready'); settle.resolve() },
+ onError: error => { onState('error'); settle.reject(error) },
+ onReconnecting: () => { onState('connecting'); log('the Feishu long connection is reconnecting') },
})
try {
await client.start({ eventDispatcher: dispatcher })
diff --git a/core/src/host/feishu-service.js b/core/src/host/feishu-service.js
new file mode 100644
index 000000000..0ead0424c
--- /dev/null
+++ b/core/src/host/feishu-service.js
@@ -0,0 +1,491 @@
+import { randomUUID, timingSafeEqual } from 'node:crypto'
+import { createFeishuVault } from './feishu-vault.js'
+import { createFeishuApi, FeishuError } from './feishu-api.js'
+import { createFeishuTransport, FeishuSdkMissing } from './feishu-sdk.js'
+import { readMessage, markdown, MAX_POST, MAX_IN, MAX_IMAGE, MAX_FILE, validateCard, toCard, cardWords } from './feishu-format.js'
+import { PRODUCTS, validateCredentials, publicAddress } from '../shared/feishu.js'
+import { installFeishuTools } from './feishu-tools.js'
+import { createFeishuCalendars } from './feishu-calendar.js'
+import { createFeishuEventServer } from './feishu-http.js'
+
+const fail = text => Object.assign(new Error(text), { code: 'bot/forbidden' })
+const same = (a, b) => typeof a === 'string' && typeof b === 'string' && Buffer.byteLength(a) === Buffer.byteLength(b) && timingSafeEqual(Buffer.from(a), Buffer.from(b))
+const memberActive = m => m && !m.removedAt && !m.disabled && m.status !== 'disabled'
+const toast = (type, content) => ({ toast: { type, content } })
+const safeKey = value => typeof value === 'string' && /^[A-Za-z0-9_-]{1,128}$/.test(value)
+
+export function createFeishuService(rt, { request = fetch, vault = createFeishuVault(rt.home), transport = createFeishuTransport } = {}) {
+ const { state } = rt
+ let calendars
+ const apis = new Map(), sockets = new Map(), working = new Set(), names = new Map()
+ let removeSender
+ let tail = Promise.resolve(), stopped = false
+ const data = () => state.feishu ??= { apps: {}, events: {}, outbox: {}, cards: {}, files: {}, grants: {}, identities: {} }
+ const serial = fn => {
+ const job = tail.then(fn)
+ tail = job.catch(() => {})
+ return job
+ }
+ const commit = fn => serial(async () => {
+ const readOnly = rt.readOnly?.()
+ if (readOnly) throw new Error(readOnly)
+ const before = structuredClone(data())
+ try { const value = await fn(); await rt.save(); return value }
+ catch (error) { state.feishu = before; throw error }
+ })
+ const appOf = id => {
+ const app = data().apps[id]
+ if (!app) throw new Error('Unknown Feishu app')
+ return app
+ }
+ const api = id => {
+ appOf(id)
+ if (!apis.has(id)) apis.set(id, createFeishuApi(() => vault.get(id), request, () => appOf(id)))
+ return apis.get(id)
+ }
+ const principal = actor => {
+ if (!actor && !rt.authzEnforced?.()) return { memberId: 'owner-1' }
+ if (!actor || !memberActive(state.members?.[actor.memberId])) throw fail('Sign in first')
+ return actor
+ }
+ const manage = (actor, app) => {
+ actor = principal(actor)
+ if (actor.memberId !== 'owner-1' && app?.ownerId !== actor.memberId) throw fail('Only the app owner can change this connection')
+ return actor
+ }
+ const localBot = (id, ownerId) => {
+ const bot = rt.botOf(id)
+ if (!bot || bot.remote || bot.ephemeral || bot.projectAgent || (bot.ownerId ?? 'owner-1') !== ownerId) throw fail('Choose a local Bot owned by this member')
+ return bot
+ }
+ const diagnose = async (id, kind, error) => commit(() => {
+ const app = data().apps[id]
+ const detail = String(error?.message ?? '')
+ const message = error instanceof FeishuError && Number(error.code) === 99991672 ? 'Apply for the missing app permission, publish a new version, wait for approval, then check permissions again.'
+ : error instanceof FeishuSdkMissing ? 'The Feishu long-connection SDK is not installed on the FlyBot server. Reinstall FlyBot, or rebuild the image if it runs in Docker.'
+ : kind === 'connection' && /app.?id|app.?secret|auth|internal error/i.test(detail) ? 'Check App ID and App Secret. A nonexistent App ID may be reported as an internal error.'
+ : kind === 'connection' && /limit|too many|50/.test(detail) ? 'The application has reached its long-connection limit (up to 50 connections).'
+ : kind === 'connection' ? 'Could not connect to open.feishu.cn; check the server network, proxy and application credentials.'
+ : 'Operation failed; check network, permissions and published app version'
+ if (app) app.diagnostics = [...(app.diagnostics ?? []), { at: Date.now(), kind, message, ...(typeof error?.code === 'number' ? { code: error.code } : {}), ...(error instanceof FeishuError && error.detail ? { detail: error.detail } : {}) }].slice(-50)
+ })
+ const handle = (app, chatId) => app.legacy ? `feishu:${chatId}` : `feishu:${app.id}:${chatId}`
+ const identity = (appId, openId) => {
+ const row = data().identities[`${appId}:${openId}`]
+ return row && memberActive(state.members?.[row.memberId]) ? row : undefined
+ }
+ const view = actor => {
+ const who = principal(actor)
+ return Object.values(data().apps).map(a => who.memberId !== 'owner-1' && a.ownerId !== who.memberId ? { id: a.id, name: a.name, mode: a.mode, linkOnly: true, identities: Object.values(data().identities).filter(i => i.appId === a.id && i.memberId === who.memberId) } : ({ ...a,
+ connection: sockets.get(a.id)?.state ?? (a.mode === 'http' ? 'http' : 'off'),
+ grants: data().grants[a.id] ?? {}, identities: Object.values(data().identities).filter(i => i.appId === a.id),
+ cards: Object.values(data().cards).filter(c => c.appId === a.id),
+ files: Object.values(data().files).filter(f => f.appId === a.id).map(f => ({ id: f.ref.attachmentId, name: f.ref.name, size: f.ref.bytes })),
+ recent: Object.values(data().events).filter(e => e.appId === a.id).slice(-20).map(({ id, message, status, at }) => ({ id, chatId: message?.chatId, text: message?.text, status, at })),
+ outbox: Object.values(data().outbox).filter(o => o.appId === a.id).slice(-20).map(({ id, status }) => ({ id, status })),
+ }))
+ }
+ async function connect(id) {
+ const app = appOf(id)
+ await sockets.get(id)?.socket?.close?.()
+ sockets.delete(id)
+ if (app.mode !== 'socket' || stopped) return
+ const credentials = await vault.get(id)
+ const status = { state: 'connecting' }
+ sockets.set(id, status)
+ const adapter = transport({ credentials: () => credentials, log: () => {}, onState: s => { if (sockets.get(id) === status) status.state = s } })
+ try {
+ const socket = await adapter.connect(event => receive(id, event, 'socket'))
+ if (sockets.get(id) !== status || stopped) { await socket.close(); return }
+ Object.assign(status, { state: 'ready', socket })
+ } catch (error) {
+ if (sockets.get(id) === status) status.state = 'error'
+ await diagnose(id, 'connection', error)
+ }
+ }
+ async function test(id) {
+ try {
+ const result = await api(id).call('GET', 'bot/v3/info/')
+ await commit(() => { appOf(id).botOpenId = result.bot?.open_id; appOf(id).botName = result.bot?.app_name })
+ return { ok: true, bot: result.bot?.app_name }
+ } catch (error) {
+ return { ok: false, credentialError: error.stage === 'credentials' || !(error instanceof FeishuError), error: error.stage === 'credentials' ? 'Check App ID and App Secret. A nonexistent App ID may be reported as an internal error.' : !(error instanceof FeishuError) ? 'FlyBot cannot reach open.feishu.cn. Check the server network or proxy.' : 'Credentials accepted, but Bot information is unavailable. Enable the Bot capability and publish a version. You can continue now and test again after publishing.' }
+ }
+ }
+ async function scopes(id) {
+ const result = await api(id).call('GET', 'application/v6/scopes')
+ const granted = (result.scopes ?? []).filter(s => s.grant_status === 1).map(s => s.scope_name)
+ await commit(() => { appOf(id).scopes = granted })
+ return granted
+ }
+ async function save(body, actor) {
+ const id = String(body.appId ?? '')
+ const existing = data().apps[id]
+ const owner = manage(actor, existing)
+ await rt.loadSecrets?.()
+ const legacySecret = state.connectors?.feishu?.appId === id ? rt.secretValue?.('FEISHU_APP_SECRET') : undefined
+ const oldCredentials = existing ? await vault.get(id) : legacySecret ? { appId: id, appSecret: legacySecret } : undefined
+ const mode = body.mode ?? existing?.mode ?? 'socket'
+ const credentials = { appId: id, appSecret: body.appSecret?.trim() || oldCredentials?.appSecret, ...(mode === 'http' ? { verificationToken: body.verificationToken?.trim() || oldCredentials?.verificationToken } : {}) }
+ const changed = mode !== existing?.mode || credentials.appSecret !== oldCredentials?.appSecret || credentials.verificationToken !== oldCredentials?.verificationToken || body.publicUrl !== undefined && body.publicUrl !== existing?.publicUrl
+ validateCredentials(credentials, mode)
+ if (mode === 'http' && !publicAddress(body.publicUrl ?? existing?.publicUrl)) throw new Error('Prepare a public HTTPS event address')
+ if (mode === 'http') await rt.ensureFeishuEvents?.()
+ if (body.botId) localBot(body.botId, existing?.ownerId ?? owner.memberId)
+ await vault.set(id, credentials)
+ try {
+ await commit(() => {
+ const legacy = state.connectors?.feishu
+ data().apps[id] = { ...existing, id, name: String(body.name ?? existing?.name ?? '飞书').slice(0, 100), ownerId: existing?.ownerId ?? owner.memberId, mode,
+ publicUrl: body.publicUrl ?? existing?.publicUrl ?? '', botId: body.botId ?? existing?.botId ?? null, step: Math.max(0, Math.min(mode === 'http' ? 6 : 5, Number.isInteger(body.step) ? body.step : existing?.step ?? 1)),
+ allowed: existing?.allowed ?? legacy?.allowed?.map(e => e.openId) ?? [], legacy: existing?.legacy ?? (!Object.keys(data().apps).length && (!legacy?.appId || legacy.appId === id)), createdAt: existing?.createdAt ?? Date.now() }
+ if (changed) { delete data().apps[id].verifiedAt; delete data().apps[id].lastEventAt }
+ if (data().apps[id].legacy) { state.connectors ??= {}; state.connectors.feishu = { ...legacy, mode: 'app', appId: id, managed: true } }
+ })
+ } catch (error) { await vault.set(id, oldCredentials); throw error }
+ apis.delete(id)
+ await rt.stopLegacyFeishu?.()
+ void connect(id)
+ return { apps: view(owner), test: await test(id) }
+ }
+ async function send(id, message, type, content, uuid, authorize) {
+ const threaded = !!message.rootId
+ return api(id).call('POST', threaded ? `im/v1/messages/${encodeURIComponent(message.rootId)}/reply` : 'im/v1/messages', {
+ authorize, query: threaded ? undefined : { receive_id_type: 'chat_id' }, body: { ...(threaded ? { reply_in_thread: true } : { receive_id: message.chatId }), msg_type: type, content: JSON.stringify(content), ...(uuid ? { uuid } : {}) },
+ })
+ }
+ async function sendText(id, message, text, uuid) {
+ const mentions = new Map(Object.values(data().identities).filter(i => i.appId === id).map(i => [state.members?.[i.memberId]?.displayName, i.openId]).filter(([name]) => !!name))
+ const rich = { zh_cn: { ...(message.title ? { title: message.title } : {}), content: [[{ tag: 'md', text: markdown(text, mentions) }]] } }
+ if (Buffer.byteLength(JSON.stringify(rich)) <= MAX_POST) {
+ try { return await send(id, message, 'post', rich, uuid) }
+ catch (error) { if (!(error instanceof FeishuError)) throw error; await diagnose(id, 'format', error) }
+ }
+ return send(id, message, 'text', { text }, uuid)
+ }
+ async function reaction(event, remove = false) {
+ if (!event.message.messageId) return
+ if (remove && !event.reactionId) return
+ if (!remove && (event.reactionId || event.reactionAttempts >= 5)) return
+ try {
+ const result = await api(event.appId).call(remove ? 'DELETE' : 'POST', `im/v1/messages/${encodeURIComponent(event.message.messageId)}/reactions${remove ? `/${encodeURIComponent(event.reactionId)}` : ''}`, remove ? {} : { body: { reaction_type: { emoji_type: 'Get' } } })
+ await commit(() => { const row = data().events[event.id]; if (row) { delete row.reactionRetry; if (remove) delete row.reactionId; else row.reactionId = result.reaction_id } })
+ } catch (error) {
+ await commit(() => { const row = data().events[event.id]; if (row) { row.reactionAttempts = (row.reactionAttempts ?? 0) + 1; row.reactionRetry = Date.now() + Math.min(3600000, 1000 * 2 ** Math.min(row.reactionAttempts, 12)) } })
+ await diagnose(event.appId, 'reaction', error)
+ }
+ }
+ async function importFiles(event) {
+ const imported = []
+ for (const file of event.message.files) {
+ try {
+ const res = await api(event.appId).call('GET', `im/v1/messages/${encodeURIComponent(event.message.messageId)}/resources/${encodeURIComponent(file.key)}`, { query: { type: file.type }, raw: true })
+ if (Number(res.headers.get('content-length')) > MAX_IN) throw new Error('Attachment exceeds 20 MB')
+ const chunks = []; let size = 0
+ // Exiting the stream iterator cancels its reader, including on a size error.
+ for await (const chunk of res.body) { size += chunk.length; if (size > MAX_IN) throw new Error('Attachment exceeds 20 MB'); chunks.push(chunk) }
+ const mime = res.headers.get('content-type') ?? 'application/octet-stream'
+ const attachment = await rt.ctx.attachments[file.type === 'image' ? 'saveImage' : 'saveFile']({ data: Buffer.concat(chunks), name: String(file.name).slice(0, 200), mediaType: mime })
+ imported.push({ ...attachment, name: file.name })
+ } catch (error) { await diagnose(event.appId, 'attachment-receive', error) }
+ }
+ return imported
+ }
+ async function processEvent(key) {
+ if (working.has(key) || stopped) return
+ working.add(key)
+ try {
+ const event = data().events[key]
+ if (!event || !['queued', 'processing'].includes(event.status)) return
+ const app = appOf(event.appId), message = event.message
+ const botId = app.chatBots?.[message.chatId] ?? app.botId
+ const allowed = app.allowed.includes(message.openId)
+ const mentioned = !message.group || message.mentions.some(m => m.id?.open_id === app.botOpenId)
+ const botLimit = (app.autoRounds?.[message.chatId] ?? 0) >= 8
+ const accepted = allowed && botId && mentioned && (!message.bot || app.allowBots && !botLimit) && message.openId !== app.botOpenId
+ const chatHandle = handle(app, message.chatId)
+ let name = chatHandle
+ try {
+ const info = await api(app.id).call('GET', message.group ? `im/v1/chats/${encodeURIComponent(message.chatId)}` : `contact/v3/users/${encodeURIComponent(message.openId)}`, { query: message.group ? undefined : { user_id_type: 'open_id' } })
+ name = info.name ?? info.user?.name ?? name
+ } catch { /* IDs are display fallbacks, never identities. */ }
+ let senderName = `feishu-${message.openId}`
+ const cacheKey = `${app.id}:${message.group ? message.chatId : message.openId}`
+ try {
+ let cached = names.get(cacheKey)
+ if (!cached || cached.at < Date.now() - (message.group ? 600000 : 3600000)) {
+ const users = {}; let token
+ if (message.group) {
+ do {
+ const result = await api(app.id).call('GET', `im/v1/chats/${encodeURIComponent(message.chatId)}/members`, { query: { member_id_type: 'open_id', page_size: 100, ...(token ? { page_token: token } : {}) } })
+ for (const user of result.items ?? []) users[user.member_id] = user.name
+ token = result.has_more ? result.page_token : undefined
+ } while (token)
+ } else users[message.openId] = name === chatHandle ? senderName : name
+ cached = { at: Date.now(), users }; names.set(cacheKey, cached)
+ }
+ senderName = cached.users[message.openId] ?? senderName
+ } catch { /* Missing contact scope keeps the stable open_id label. */ }
+ if (message.group) await calendars?.follow(app.id, message.chatId)
+ const attachments = event.attachments ?? await importFiles(event)
+ if (attachments.length) await commit(() => { for (const ref of attachments) data().files[`${app.id}:${ref.attachmentId}`] = { appId: app.id, ref } })
+ await rt.remoteChats.open({ handle: chatHandle, name, plugin: 'feishu' })
+ await rt.remoteChats.deliver({ handle: chatHandle, text: message.text || attachments.map(a => a.name).join(', '), name, plugin: 'feishu', human: !message.bot, ownerName: senderName, sourceId: key, feishu: { appId: app.id, rootId: message.rootId, messageId: message.messageId }, attachments })
+ if (!accepted) {
+ await commit(() => { data().events[key].status = !allowed ? 'refused' : !botId ? 'no-bot' : message.bot && app.allowBots && botLimit ? 'bot-limit' : 'context'; if (!message.bot && app.autoRounds) app.autoRounds[message.chatId] = 0 })
+ return
+ }
+ localBot(botId, app.ownerId)
+ const reserved = await commit(() => {
+ if (Object.values(data().events).some(e => e.id !== key && e.botId === botId && ['processing', 'admitted'].includes(e.status)) || rt.liveOf?.(rt.chatOf?.(botId) ?? botId)?.turn !== undefined) return false
+ Object.assign(data().events[key], { botId, attachments, status: 'processing' })
+ app.autoRounds ??= {}; app.autoRounds[message.chatId] = message.bot ? (app.autoRounds[message.chatId] ?? 0) + 1 : 0
+ return true
+ })
+ if (!reserved) return
+ await reaction(data().events[key])
+ const context = Object.values(data().events).filter(e => e.id !== key && e.appId === app.id && e.message?.chatId === message.chatId && e.at <= event.at && ['context', 'sent', 'responded'].includes(e.status)).slice(-10).map(e => `${e.message.openId}: ${e.message.text}`).join('\n').slice(-8000)
+ const prompt = [context ? `[Earlier messages in this Feishu chat]\n${context}\n[Current request]` : '', message.text || attachments.map(a => a.name).join(', ')].filter(Boolean).join('\n')
+ await rt.deliver({ toId: botId, text: prompt, role: 'feishu', exchangeId: key, fromName: senderName, untrusted: true, origin: 'other', attachments,
+ feishu: { eventId: key, appId: app.id, chatId: message.chatId, openId: message.openId, rootId: message.rootId } })
+ await commit(() => { if (data().events[key].status === 'processing') data().events[key].status = 'admitted' })
+ } catch (error) {
+ const event = data().events[key]
+ if (event) { await commit(() => { event.status = 'failed' }); await diagnose(event.appId, 'delivery', error) }
+ } finally { working.delete(key) }
+ }
+ async function receive(id, envelope, mode) {
+ const app = appOf(id)
+ if (mode !== app.mode) throw fail('Receiving method changed; update event and callback subscriptions and publish a version')
+ const credentials = await vault.get(id)
+ if (mode === 'http' && !same(envelope?.header?.token ?? envelope?.token, credentials.verificationToken)) throw fail('Verification Token does not match')
+ if (envelope?.encrypt) throw fail('Encrypt Key must be empty; encrypted events are unsupported')
+ if (envelope?.header?.app_id && envelope.header.app_id !== id) throw fail('Feishu app does not match')
+ if (envelope?.type === 'url_verification') { await commit(() => { app.verifiedAt = Date.now() }); return { challenge: String(envelope.challenge ?? '') } }
+ if (envelope?.header?.event_type === 'card.action.trigger') return trigger(id, envelope)
+ const message = readMessage(envelope)
+ if (!message) return { ignored: true }
+ if (message.openId === app.botOpenId) return { ignored: true }
+ const key = `${id}:${message.messageId}`
+ const added = await commit(() => {
+ if (data().events[key]) return false
+ data().events[key] = { id: key, appId: id, message, status: 'queued', at: Date.now() }
+ app.lastEventAt = Date.now()
+ return true
+ })
+ if (added) void processEvent(key)
+ return { duplicate: !added }
+ }
+ async function complete(meta, text, failure) {
+ const event = data().events[meta.eventId]
+ if (!event || ['sent', 'cancelled'].includes(event.status) || !data().apps[event.appId]) return
+ if (failure || !text) { await commit(() => { event.status = 'failed' }); void tick(); return }
+ const id = event.id
+ await commit(() => { data().outbox[id] ??= { id, appId: event.appId, text, message: event.message, status: 'pending', uuid: randomUUID() }; event.status = 'responded' })
+ void tick()
+ await flush(id)
+ }
+ async function flush(id) {
+ if (working.has(`send:${id}`)) return
+ working.add(`send:${id}`)
+ try {
+ const item = data().outbox[id]
+ if (!item || item.status === 'sent') return
+ await sendText(item.appId, item.message, item.text, item.uuid)
+ await commit(() => { item.status = 'sent'; const event = data().events[id]; if (event) event.status = 'sent' })
+ const app = appOf(item.appId)
+ await rt.remoteChats.deliver({ handle: handle(app, item.message.chatId), text: item.text, name: rt.botOf(data().events[id]?.botId)?.name, plugin: 'feishu', sourceId: `reply:${id}`, feishu: { appId: app.id, rootId: item.message.rootId } })
+ if (data().events[id]) await reaction(data().events[id], true)
+ } catch (error) {
+ const item = data().outbox[id]
+ if (item) { await commit(() => { item.status = 'failed' }); await diagnose(item.appId, 'send', error) }
+ } finally { working.delete(`send:${id}`) }
+ }
+ async function card(appId, botId, message, cardValue, cardId) {
+ const app = appOf(appId)
+ localBot(botId, app.ownerId)
+ const existing = cardId && data().cards[cardId]
+ if (cardId && (!existing || existing.botId !== botId || existing.appId !== appId)) throw fail('Card is not owned by this Bot')
+ const record = { ...existing, id: existing?.id ?? randomUUID(), appId, botId, message, card: validateCard(cardValue), version: (existing?.version ?? 0) + 1, submissions: existing?.submissions ?? [], closed: false }
+ await commit(() => { data().cards[record.id] = record })
+ try {
+ const result = record.messageId ? await api(appId).call('PATCH', `im/v1/messages/${encodeURIComponent(record.messageId)}`, { body: { content: JSON.stringify(toCard(record)) } }) : await send(appId, message, 'interactive', toCard(record), record.id)
+ await commit(() => { record.messageId ??= result.message_id })
+ } catch (error) {
+ if (!(error instanceof FeishuError)) throw error
+ await diagnose(appId, 'card', error)
+ await send(appId, message, 'text', { text: `${cardWords(cardValue)}\n按钮和表单需在 FlyBot 控制台中使用。` }, record.id)
+ }
+ return { id: record.id, version: record.version }
+ }
+ async function trigger(id, envelope) {
+ const event = envelope.event ?? {}, value = event.action?.value ?? {}, key = `${id}:card:${envelope.header?.event_id ?? event.token ?? ''}`
+ if (!envelope.header?.event_id && !event.token) throw fail('Card callback ID is missing')
+ const linked = identity(id, event.operator?.open_id)
+ if (!linked) return toast('error', '你的飞书账号还没有关联到 FlyBot,不能操作这张卡片。请联系管理员关联。')
+ const result = await commit(() => {
+ if (data().events[key]?.response) {
+ const previous = data().events[key], current = data().cards[previous.cardId]
+ return current ? { ...previous.response, card: { type: 'raw', data: toCard(current) } } : previous.response
+ }
+ const record = data().cards[value.flybot_card]
+ if (!record || record.appId !== id || record.messageId !== event.context?.open_message_id || record.message.chatId !== event.context?.open_chat_id) return toast('error', '这张卡片已不存在')
+ if (record.closed || value.version !== record.version || !(record.card.actions ?? []).some(a => a.id === value.action)) return toast('error', '这张卡片已更新,请使用最新卡片')
+ const fields = event.action?.form_value ?? {}
+ if (JSON.stringify(fields).length > 16000) return toast('error', '提交内容过长')
+ record.submissions.push({ memberId: linked.memberId, openId: linked.openId, name: state.members[linked.memberId].displayName ?? linked.memberId, action: value.action, fields, at: Date.now() })
+ record.closed = record.card.once !== false
+ record.version += 1
+ const response = { ...toast('success', '已提交'), card: { type: 'raw', data: toCard(record) } }
+ data().events[key] = { id: key, appId: id, status: 'card-pending', cardId: record.id, submission: record.submissions.at(-1), response, at: Date.now() }
+ return response
+ })
+ void dispatchCard(key)
+ return result
+ }
+ async function dispatchCard(key) {
+ if (working.has(key)) return
+ working.add(key)
+ try {
+ const event = data().events[key]
+ if (!event || !['card-pending', 'processing'].includes(event.status)) return
+ const record = data().cards[event.cardId]
+ if (!record || !identity(record.appId, event.submission.openId)) return
+ const reserved = await commit(() => {
+ if (Object.values(data().events).some(e => e.id !== key && e.botId === record.botId && ['processing', 'admitted'].includes(e.status)) || rt.liveOf?.(rt.chatOf?.(record.botId) ?? record.botId)?.turn !== undefined) return false
+ event.status = 'processing'; event.message = record.message; event.botId = record.botId
+ return true
+ })
+ if (!reserved) return
+ await rt.deliver({ toId: record.botId, role: 'feishu', exchangeId: key, text: JSON.stringify({ cardId: record.id, ...event.submission }), untrusted: true, origin: 'other',
+ feishu: { eventId: key, appId: record.appId, ...record.message, openId: event.submission.openId } })
+ await commit(() => { if (event.status === 'processing') event.status = 'admitted' })
+ } catch (error) { const event = data().events[key]; if (event) await diagnose(event.appId, 'card-action', error) }
+ finally { working.delete(key) }
+ }
+ async function endpoint(body, actor) {
+ await rt.load()
+ const who = principal(actor), op = body.operation ?? 'list'
+ if (op === 'list') return { apps: view(who), members: Object.values(state.members ?? {}).filter(m => memberActive(m) && (who.memberId === 'owner-1' || m.id === who.memberId)).map(m => ({ id: m.id, name: m.displayName ?? m.id })) }
+ if (op === 'save') return save(body, who)
+ if (op === 'webhook') { manage(who); return rt.connectorEndpoint('connector-connect', { id: 'feishu', mode: 'webhook', credentials: { webhook: body.webhook } }) }
+ const id = String(body.appId ?? ''), app = appOf(id)
+ if (op === 'identity') {
+ const target = String(body.memberId ?? who.memberId), openId = String(body.openId ?? '')
+ if (target !== who.memberId && who.memberId !== 'owner-1' || !memberActive(state.members?.[target]) || !safeKey(openId)) throw fail('Choose your own existing platform identity')
+ if (who.memberId !== 'owner-1' && app.ownerId !== who.memberId && !app.allowed.includes(openId)) throw fail('Sender is not allowed on this app')
+ const old = data().identities[`${id}:${openId}`]
+ if (old && old.memberId !== who.memberId && who.memberId !== 'owner-1') throw fail('This identity is already linked')
+ await commit(() => { data().identities[`${id}:${openId}`] = { appId: id, openId, memberId: target } })
+ return { linked: true }
+ }
+ manage(who, app)
+ if (op === 'attachment') {
+ const ref = data().files[`${id}:${body.attachmentId}`]?.ref
+ if (!ref) throw fail('Attachment does not belong to this Feishu app')
+ const chunks = []
+ if (ref.mediaType) chunks.push((await rt.ctx.attachments.readImage(ref)).data)
+ else for await (const chunk of rt.ctx.attachments.readFileStream(ref)) chunks.push(chunk)
+ return { name: ref.name, content_base64: Buffer.concat(chunks).toString('base64') }
+ }
+ if (op === 'test') return test(id)
+ if (op === 'scopes') return { scopes: await scopes(id) }
+ if (op === 'allow') {
+ if (!safeKey(body.openId)) throw new Error('Enter an open_id')
+ await commit(() => { app.allowed = body.enabled === false ? app.allowed.filter(i => i !== body.openId) : [...new Set([...app.allowed, body.openId])] })
+ } else if (op === 'configure') {
+ if (body.botId) localBot(body.botId, app.ownerId)
+ if (body.chatId && (!safeKey(body.chatId) || ['__proto__', 'constructor', 'prototype'].includes(body.chatId))) throw new Error('Invalid Feishu chat')
+ const cancelled = []
+ await commit(() => {
+ if (body.botId !== undefined) for (const event of Object.values(data().events)) {
+ const affected = body.chatId ? event.message?.chatId === body.chatId : !app.chatBots?.[event.message?.chatId]
+ if (event.appId === id && affected && event.botId !== (body.botId || app.botId) && ['processing', 'admitted'].includes(event.status)) { event.status = 'cancelled'; cancelled.push(event) }
+ }
+ if (body.chatId) { app.chatBots ??= {}; if (body.botId) app.chatBots[body.chatId] = body.botId; else delete app.chatBots[body.chatId] }
+ if (body.botId && !body.chatId) app.botId = body.botId
+ if (typeof body.allowBots === 'boolean') app.allowBots = body.allowBots
+ if (Number.isInteger(body.step)) app.step = Math.max(0, Math.min(app.mode === 'http' ? 6 : 5, body.step))
+ })
+ for (const event of cancelled) {
+ const sessionId = rt.chatOf?.(event.botId) ?? event.botId
+ if (rt.liveOf?.(sessionId)?.info?.feishu?.eventId !== event.id) continue
+ try { const agent = await rt.resolveAgent(sessionId); agent.cancel({ kind: 'hook', reason: 'Feishu conversation handler changed' }) }
+ catch (error) { await diagnose(id, 'handler-stop', error) }
+ }
+ } else if (op === 'grant') {
+ localBot(body.botId, app.ownerId)
+ if (!PRODUCTS.some(p => p.id === body.product) || !['disabled', 'read', 'ask', 'write'].includes(body.mode)) throw new Error('Invalid Feishu grant')
+ await commit(() => { data().grants[id] ??= {}; data().grants[id][body.botId] ??= {}; data().grants[id][body.botId][body.product] = body.mode })
+ } else if (op === 'retry') {
+ if (body.outboxId && data().outbox[body.outboxId]?.appId === id) await flush(body.outboxId)
+ else if (body.eventId && data().events[body.eventId]?.appId === id && data().events[body.eventId].status === 'failed') { await commit(() => { data().events[body.eventId].status = 'queued' }); void processEvent(body.eventId) }
+ else await connect(id)
+ } else if (op === 'card-action') {
+ const record = data().cards[body.cardId]
+ if (!record || record.appId !== id) throw fail('Unknown card')
+ const openId = Object.values(data().identities).find(i => i.appId === id && i.memberId === who.memberId)?.openId
+ if (!openId) throw fail('Link your Feishu identity first')
+ return trigger(id, { header: { event_id: randomUUID() }, event: { operator: { open_id: openId }, context: { open_message_id: record.messageId, open_chat_id: record.message.chatId }, action: { value: { flybot_card: record.id, version: record.version, action: body.action }, form_value: body.fields ?? {} } } })
+ } else if (op === 'delete') {
+ await commit(() => {
+ delete data().apps[id]; delete data().grants[id]
+ for (const name of ['events', 'outbox', 'cards', 'identities', 'files', 'calendarShares']) for (const [key, row] of Object.entries(data()[name] ?? {})) if (row.appId === id) delete data()[name][key]
+ if (app.legacy && state.connectors?.feishu?.managed) delete state.connectors.feishu
+ })
+ await sockets.get(id)?.socket?.close?.(); sockets.delete(id); apis.delete(id); await vault.set(id, undefined)
+ } else throw new Error('Unknown Feishu operation')
+ return { apps: view(who) }
+ }
+ const authorizeTool = (botId, appId, product, write) => {
+ const app = appOf(appId), bot = localBot(botId, app.ownerId), grant = data().grants[appId]?.[bot.id]?.[product] ?? 'disabled'
+ if (grant === 'disabled' || write && grant === 'read') throw fail('This Feishu capability is not granted to this Bot')
+ return grant
+ }
+ async function tick() {
+ for (const event of Object.values(data().events)) {
+ if (event.status === 'queued') void processEvent(event.id)
+ if (event.status === 'card-pending') void dispatchCard(event.id)
+ if (event.reactionRetry && event.reactionRetry < Date.now()) void reaction(event, event.status === 'sent')
+ }
+ }
+ async function start() {
+ stopped = false; await rt.load()
+ removeSender?.()
+ removeSender = rt.remoteChats?.onSend?.('feishu', reply)
+ for (const app of Object.values(data().apps)) { if (app.mode === 'http') await rt.ensureFeishuEvents?.(); void connect(app.id) }
+ for (const event of Object.values(data().events)) if (event.status === 'processing') void (event.cardId ? dispatchCard(event.id) : processEvent(event.id))
+ for (const item of Object.values(data().outbox)) if (item.status === 'pending') void flush(item.id)
+ await tick()
+ }
+ async function stop() { stopped = true; removeSender?.(); for (const s of sockets.values()) await s.socket?.close?.(); sockets.clear() }
+ async function reply(message) {
+ const app = Object.values(data().apps).find(a => a.legacy ? message.handle.startsWith('feishu:') && !message.handle.slice(7).includes(':') : message.handle.startsWith(`feishu:${a.id}:`))
+ if (!app) return rt.replyLegacyFeishu?.(message)
+ const chatId = message.handle.slice(app.legacy ? 7 : `feishu:${app.id}:`.length)
+ return sendText(app.id, { chatId, title: state.members?.[app.ownerId]?.displayName ?? 'Owner' }, String(message.text), message.messageId)
+ }
+ const service = { endpoint, receive, complete, view, api, card, identity, authorizeTool, appOf, data, commit, diagnose, start, stop, tick, sendText, send, reply, MAX_IN, MAX_IMAGE, MAX_FILE }
+ calendars = createFeishuCalendars(service)
+ return Object.assign(service, { calendars })
+}
+
+export function install(rt) {
+ const service = createFeishuService(rt)
+ rt.feishu = service
+ installFeishuTools(rt, service)
+ let server, listening
+ rt.ensureFeishuEvents = () => listening ??= (async () => {
+ const port = Number(rt.config.feishu?.eventsPort ?? process.env.FLYBOT_FEISHU_EVENTS_PORT ?? 3082)
+ if (!Number.isInteger(port) || port < 1 || port > 65535) throw new Error('Configure a valid Feishu event port')
+ server = createFeishuEventServer(service)
+ try { await new Promise((resolve, reject) => { server.once('error', reject); server.listen(port, '0.0.0.0', resolve) }) }
+ catch (error) { listening = undefined; throw error }
+ })()
+ rt.ctx.effect(() => {
+ void service.start().catch(() => rt.warn('ds-bot: Feishu recovery failed'))
+ const timer = setInterval(() => { void service.tick().catch(() => {}) }, 10000)
+ timer.unref?.()
+ return () => { clearInterval(timer); server?.close(); void service.stop() }
+ }, 'ds-bot: Feishu apps')
+}
diff --git a/core/src/host/feishu-tools.js b/core/src/host/feishu-tools.js
new file mode 100644
index 000000000..d1dfd3d4a
--- /dev/null
+++ b/core/src/host/feishu-tools.js
@@ -0,0 +1,180 @@
+import { defineTool } from './tool-schema.js'
+import { output } from './tools.js'
+import { MAX_IMAGE, MAX_FILE } from './feishu-format.js'
+
+const TOO_LARGE = 'Feishu accepts images up to 10 MB and files up to 30 MB; this attachment is too large to send'
+
+const seg = (args, key) => {
+ const value = args[key]
+ if (typeof value !== 'string' || !value || value.length > 1024 || /[\u0000-\u001f]/.test(value)) throw new Error(`Enter ${key}`)
+ return encodeURIComponent(value)
+}
+// The operation list is the authority boundary; a model cannot supply a URL, method, token or host.
+export const FEISHU_OPERATIONS = {
+ calendar_share_group: ['calendar', 'POST', () => 'calendar/v4/calendars'],
+ calendar_share_link: ['calendar', 'GET', () => 'calendar/v4/calendars'],
+ calendar_share_card: ['calendar', 'POST', () => 'calendar/v4/calendars'],
+ calendar_list: ['calendar', 'GET', () => 'calendar/v4/calendars'],
+ calendar_get: ['calendar', 'GET', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}`],
+ calendar_search: ['calendar', 'POST', () => 'calendar/v4/calendars/search', false],
+ calendar_create: ['calendar', 'POST', () => 'calendar/v4/calendars'],
+ calendar_update: ['calendar', 'PATCH', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}`],
+ calendar_subscribe: ['calendar', 'POST', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/subscribe`],
+ calendar_members: ['calendar', 'GET', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/acls`],
+ calendar_member_add: ['calendar', 'POST', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/acls`],
+ calendar_member_remove: ['calendar', 'DELETE', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/acls/${seg(a, 'acl_id')}`],
+ calendar_events: ['calendar', 'GET', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events`],
+ calendar_event_get: ['calendar', 'GET', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events/${seg(a, 'event_id')}`],
+ calendar_event_create: ['calendar', 'POST', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events`],
+ calendar_event_update: ['calendar', 'PATCH', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events/${seg(a, 'event_id')}`],
+ calendar_event_delete: ['calendar', 'DELETE', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events/${seg(a, 'event_id')}`],
+ calendar_attendees: ['calendar', 'POST', a => `calendar/v4/calendars/${seg(a, 'calendar_id')}/events/${seg(a, 'event_id')}/attendees`],
+ calendar_freebusy: ['calendar', 'POST', () => 'calendar/v4/freebusy/list', false],
+ docs_read: ['docs', 'GET', a => `docx/v1/documents/${seg(a, 'document_id')}/raw_content`],
+ docs_create: ['docs', 'POST', () => 'docx/v1/documents'],
+ docs_append: ['docs', 'POST', a => `docx/v1/documents/${seg(a, 'document_id')}/blocks/${seg(a, 'document_id')}/children`],
+ docs_folder: ['docs', 'GET', () => 'drive/v1/files'],
+ docs_share: ['docs', 'POST', a => `drive/v1/permissions/${seg(a, 'document_id')}/members`],
+ wiki_spaces: ['docs', 'GET', () => 'wiki/v2/spaces'],
+ wiki_nodes: ['docs', 'GET', a => `wiki/v2/spaces/${seg(a, 'space_id')}/nodes`],
+ wiki_node: ['docs', 'GET', () => 'wiki/v2/spaces/get_node'],
+ bitable_tables: ['bitable', 'GET', a => `bitable/v1/apps/${seg(a, 'app_token')}/tables`],
+ bitable_fields: ['bitable', 'GET', a => `bitable/v1/apps/${seg(a, 'app_token')}/tables/${seg(a, 'table_id')}/fields`],
+ bitable_records: ['bitable', 'POST', a => `bitable/v1/apps/${seg(a, 'app_token')}/tables/${seg(a, 'table_id')}/records/search`, false],
+ bitable_create: ['bitable', 'POST', a => `bitable/v1/apps/${seg(a, 'app_token')}/tables/${seg(a, 'table_id')}/records`],
+ bitable_update: ['bitable', 'PUT', a => `bitable/v1/apps/${seg(a, 'app_token')}/tables/${seg(a, 'table_id')}/records/${seg(a, 'record_id')}`],
+ sheets_read: ['sheets', 'GET', a => `sheets/v2/spreadsheets/${seg(a, 'spreadsheet_token')}/values/${seg(a, 'range')}`],
+ sheets_write: ['sheets', 'PUT', a => `sheets/v2/spreadsheets/${seg(a, 'spreadsheet_token')}/values`],
+ meeting_reserve: ['meeting', 'POST', () => 'vc/v1/reserves/apply'],
+ task_create: ['task', 'POST', () => 'task/v2/tasks'],
+}
+export const operationWrites = op => op[3] ?? op[1] !== 'GET'
+const object = value => {
+ if (!value || typeof value !== 'object' || Array.isArray(value) || JSON.stringify(value).length > 60000) throw new Error('Arguments must be a bounded object')
+ return value
+}
+
+export function installFeishuTools(rt, service) {
+ const decisions = new Map()
+ const botOf = exec => {
+ const bot = rt.whoseAgent?.(exec.agent)?.bot
+ if (!bot || bot.remote || bot.ephemeral || bot.projectAgent) throw new Error('Feishu tools require a local Bot')
+ return bot
+ }
+ const context = exec => rt.liveOf(exec.agent?.id ?? exec.agent?.session?.id)?.info?.feishu
+ const requester = (appId, exec) => {
+ const live = rt.liveOf(exec.agent?.id ?? exec.agent?.session?.id), source = live?.info?.feishu
+ const linked = source && service.identity(source.appId, source.openId)
+ if (source?.appId === appId) return linked
+ const memberId = source ? linked?.memberId : live?.requesterMemberId
+ if (!memberId) return undefined
+ const matches = Object.values(service.data().identities).filter(i => i.appId === appId && i.memberId === memberId && service.identity(appId, i.openId))
+ // Multiple linked accounts need an explicit Feishu request; never pick a default host.
+ return matches.length === 1 ? matches[0] : undefined
+ }
+ const check = exec => {
+ const op = FEISHU_OPERATIONS[exec.arguments?.operation]
+ if (!op) throw new Error('Unknown Feishu operation')
+ return service.authorizeTool(botOf(exec).id, exec.arguments.appId, op[0], operationWrites(op))
+ }
+ rt.ctx.on('tools/pre-execute', async (exec, next) => {
+ if (exec.name !== 'feishu_tool') return next()
+ try {
+ const grant = check(exec), op = FEISHU_OPERATIONS[exec.arguments.operation]
+ decisions.set(exec.callId, { grant, appId: exec.arguments.appId, operation: exec.arguments.operation })
+ if (decisions.size > 1000) decisions.delete(decisions.keys().next().value)
+ if (operationWrites(op) && grant === 'ask') return { kind: 'ask', reason: `Feishu ${exec.arguments.appId}: ${exec.arguments.operation}`, displayReason: { en: 'Allow this write to Feishu?', zh: '是否允许这次飞书写入?' } }
+ return next()
+ } catch (error) { return { kind: 'deny', reason: error.message } }
+ })
+ rt.ctx.tools.register(defineTool({ name: 'feishu_apps', description: 'List Feishu applications and capabilities explicitly granted to you, with linked member open_ids. Credentials remain on the platform.', parameters: {}, output,
+ async execute(_args, exec) {
+ const bot = botOf(exec)
+ return JSON.stringify(Object.values(service.data().apps).filter(app => app.ownerId === (bot.ownerId ?? 'owner-1') && Object.values(service.data().grants[app.id]?.[bot.id] ?? {}).some(grant => grant !== 'disabled')).map(app => ({ appId: app.id, name: app.name, grants: service.data().grants[app.id]?.[bot.id] ?? {}, people: Object.values(service.data().identities).filter(i => i.appId === app.id).map(i => ({ openId: i.openId, name: rt.state.members?.[i.memberId]?.displayName })) })))
+ } }))
+ rt.ctx.tools.register(defineTool({ name: 'feishu_tool', description: `Use one explicitly granted Feishu app. Operations: ${Object.keys(FEISHU_OPERATIONS).join(', ')}. Parameters contain path IDs plus body and query matching the Feishu API. Examples: calendar_create body:{summary,permissions}; calendar_event_create calendar_id and body:{summary,start_time:{timestamp},end_time:{timestamp}}; calendar_member_add body:{role,scope:{type:"user",user_id}}; docs_create body:{title}; docs_append document_id and body:{children:[{block_type:2,text:{elements:[{text_run:{content:"text"}}]}}]}; bitable_create app_token,table_id and body:{fields:{fieldName:value}}; sheets_write spreadsheet_token and body:{valueRange:{range,values}}; meeting_reserve body:{end_time,meeting_settings:{topic}}; task_create body:{summary,due:{timestamp,is_all_day:false},members:[{id,type:"user",role:"assignee"}]},query:{user_id_type:"open_id"}. Calendar includes events, attendees, ACL members and freebusy; docs_append accepts document blocks; bitable accepts fields; sheets_write accepts valueRange; task_create accepts summary, due, members. meeting_reserve uses the actual linked requester as host. Permissions are per app/product; ask mode waits for human approval before any write.`,
+ parameters: { appId: { type: 'string', required: true }, operation: { type: 'string', enum: Object.keys(FEISHU_OPERATIONS), required: true }, parameters: { type: 'json', required: true } }, output,
+ async execute(args, exec) {
+ check({ ...exec, arguments: args })
+ const [product, method, path] = FEISHU_OPERATIONS[args.operation], params = object(args.parameters)
+ const decision = decisions.get(exec.callId)
+ const authorize = () => {
+ const latest = service.authorizeTool(botOf(exec).id, args.appId, product, operationWrites(FEISHU_OPERATIONS[args.operation]))
+ if (latest === 'ask' && operationWrites(FEISHU_OPERATIONS[args.operation]) && (decision?.grant !== 'ask' || decision.appId !== args.appId || decision.operation !== args.operation)) throw new Error('This write now requires human approval; retry the tool')
+ }
+ authorize()
+ if (args.operation === 'calendar_share_group') return JSON.stringify(await service.calendars.share(args.appId, botOf(exec).id, params, authorize))
+ if (args.operation === 'calendar_share_link' || args.operation === 'calendar_share_card') {
+ const link = await service.calendars.link(args.appId, params.calendar_id, authorize)
+ if (args.operation === 'calendar_share_card') {
+ const source = context(exec)
+ const chatId = params.chat_id ?? (source?.appId === args.appId ? source.chatId : undefined)
+ if (!chatId) throw new Error('Choose a Feishu chat')
+ await service.send(args.appId, { chatId, rootId: params.chat_id ? null : source?.rootId }, 'interactive', { schema: '2.0', header: { title: { tag: 'plain_text', content: link.name } }, body: { elements: [{ tag: 'markdown', content: String(link.permissions ?? '') }, { tag: 'button', text: { tag: 'plain_text', content: '在日历中查看' }, type: 'primary', multi_url: { url: link.url } }] } }, exec.callId, authorize)
+ }
+ return JSON.stringify(link)
+ }
+ let body = params.body === undefined ? undefined : structuredClone(object(params.body))
+ const query = params.query === undefined ? {} : { ...object(params.query) }
+ if (args.operation === 'meeting_reserve') {
+ const linked = requester(args.appId, exec)
+ if (!linked) throw new Error('提问的人没有关联这家公司的飞书账号,不能预约会议。')
+ body = { ...body, owner_id: linked.openId }
+ query.user_id_type = 'open_id'
+ }
+ // Recheck after asynchronous approvals and before the platform uses its credentials.
+ service.authorizeTool(botOf(exec).id, args.appId, product, operationWrites(FEISHU_OPERATIONS[args.operation]))
+ try {
+ const result = await service.api(args.appId).call(method, path(params), { body, query, authorize })
+ if (args.operation === 'docs_create' && result.document?.document_id) {
+ const linked = requester(args.appId, exec)
+ if (linked) try { await service.api(args.appId).call('POST', `drive/v1/permissions/${encodeURIComponent(result.document.document_id)}/members`, { authorize, query: { type: 'docx', need_notification: true }, body: { member_type: 'openid', member_id: linked.openId, perm: 'edit' } }) } catch (error) { await service.diagnose(args.appId, 'document-share', error); result.sharing = 'Document created, but sharing failed; check connection diagnostics' }
+ }
+ return JSON.stringify(result)
+ } catch (error) {
+ await service.diagnose(args.appId, 'tool', error)
+ throw new Error(`${error.message}。请检查应用权限是否开通并发布,文档、表格或知识库是否已把应用添加为成员。`)
+ }
+ } }))
+ rt.ctx.tools.register(defineTool({ name: 'feishu_card', description: 'Send or update a persistent Feishu card in the current request conversation. card has title, blocks and actions [{id,label}], optional once:false. Blocks: text{text}, fields{items:[{label,value}]}, list{items}, progress{value,max,label}, table{columns:[{key,label}],rows}, chart{spec}, pages{pages:[{title,blocks}]}, input{name,label,placeholder}, applet{description}. Inputs/buttons form the final form. Submissions return to this Bot; they never approve tools. Pass cardId to update your own original card.',
+ parameters: { card: { type: 'json', required: true }, cardId: { type: 'string' } }, output,
+ async execute(args, exec) {
+ const stored = args.cardId ? service.data().cards[args.cardId] : undefined
+ const source = context(exec) ?? (stored ? { appId: stored.appId, ...stored.message } : undefined)
+ if (!source) throw new Error('Send cards while answering a Feishu request')
+ return JSON.stringify(await service.card(source.appId, botOf(exec).id, { chatId: source.chatId, rootId: source.rootId }, args.card, args.cardId))
+ } }))
+ rt.ctx.tools.register(defineTool({ name: 'feishu_file', description: 'Send an attachment already present in this Session to the current Feishu request. Images up to 10 MB, files up to 30 MB; a larger attachment cannot be sent. No host paths or arbitrary URLs are accepted.',
+ parameters: { attachmentId: { type: 'string', required: true } }, output,
+ async execute(args, exec) {
+ const bot = botOf(exec), source = context(exec)
+ if (!source) throw new Error('Send files while answering a Feishu request')
+ service.appOf(source.appId)
+ if ((bot.ownerId ?? 'owner-1') !== service.appOf(source.appId).ownerId) throw new Error('Wrong Feishu app owner')
+ let ref
+ const session = exec.agent?.session
+ for (const seq of session?.surface?.nodes ?? []) {
+ const event = session.eventAt(seq)
+ for (const b of event?.data?.message?.content ?? event?.data?.content ?? []) if ((b.attachment?.attachmentId ?? b.attachment?.id) === args.attachmentId) ref = b.attachment
+ for (const file of (event?.data?.source ?? event?.data?.message?.source)?.attachments ?? []) if (file.id === args.attachmentId) ref = file
+ }
+ if (!ref) throw new Error('Attachment is not present in this Session')
+ const image = (ref.mediaType ?? ref.mime)?.startsWith('image/') && (ref.bytes ?? ref.size) <= MAX_IMAGE
+ // A `mediaType` marks an image attachment, readable only as an image: past 10 MB it cannot go out as a file either.
+ if ((ref.bytes ?? ref.size) > MAX_FILE || !image && ref.mediaType) throw new Error(TOO_LARGE)
+ const chunks = []
+ if (image) chunks.push((await rt.ctx.attachments.readImage(ref, exec.signal)).data)
+ else for await (const chunk of rt.ctx.attachments.readFileStream(ref, exec.signal)) chunks.push(chunk)
+ const bytes = Buffer.concat(chunks)
+ if (bytes.length > (image ? MAX_IMAGE : MAX_FILE)) throw new Error(TOO_LARGE)
+ const form = new FormData()
+ form.set(image ? 'image_type' : 'file_type', image ? 'message' : 'stream')
+ if (!image) form.set('file_name', ref.name ?? 'attachment')
+ form.set(image ? 'image' : 'file', new Blob([bytes]), ref.name ?? 'attachment')
+ try {
+ const result = await service.api(source.appId).call('POST', image ? 'im/v1/images' : 'im/v1/files', { body: form })
+ await service.send(source.appId, source, image ? 'image' : 'file', image ? { image_key: result.image_key } : { file_key: result.file_key }, exec.callId)
+ return 'Sent'
+ } catch (error) { await service.diagnose(source.appId, 'attachment-send', error); throw new Error('Feishu did not accept the attachment; the connection diagnostics have the details') }
+ } }))
+}
diff --git a/core/src/host/feishu-vault.js b/core/src/host/feishu-vault.js
new file mode 100644
index 000000000..260e4b718
--- /dev/null
+++ b/core/src/host/feishu-vault.js
@@ -0,0 +1,50 @@
+import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto'
+import { mkdir, readFile, writeFile, rename } from 'node:fs/promises'
+import { join } from 'node:path'
+
+// Separate from user Secrets: no shell environment, model schema, or connection view can expose these.
+export function createFeishuVault(home) {
+ let key, records, loading, tail = Promise.resolve()
+ const path = join(home, 'feishu-credentials.json')
+ const load = () => loading ??= (async () => {
+ await mkdir(home, { recursive: true, mode: 0o700 })
+ const keyPath = join(home, 'feishu-credentials.key')
+ try { key = await readFile(keyPath) } catch (error) {
+ if (error.code !== 'ENOENT') throw error
+ key = randomBytes(32)
+ try { await writeFile(keyPath, key, { flag: 'wx', mode: 0o600 }) }
+ catch (err) { if (err.code !== 'EEXIST') throw err; key = await readFile(keyPath) }
+ }
+ if (key.length !== 32) throw new Error('Invalid Feishu credential key')
+ try { records = JSON.parse(await readFile(path, 'utf8')) }
+ catch (error) { if (error.code !== 'ENOENT') throw new Error('Cannot read Feishu credentials'); records = {} }
+ })()
+ const get = async id => {
+ await load()
+ const item = records[id]
+ if (!item) return undefined
+ const decipher = createDecipheriv('aes-256-gcm', key, Buffer.from(item.iv, 'base64'))
+ decipher.setAAD(Buffer.from(id))
+ decipher.setAuthTag(Buffer.from(item.tag, 'base64'))
+ return JSON.parse(Buffer.concat([decipher.update(Buffer.from(item.data, 'base64')), decipher.final()]).toString())
+ }
+ const set = (id, value) => {
+ const job = tail.then(async () => {
+ await load()
+ const next = { ...records }
+ if (value === undefined) delete next[id]
+ else {
+ const iv = randomBytes(12), cipher = createCipheriv('aes-256-gcm', key, iv)
+ cipher.setAAD(Buffer.from(id))
+ next[id] = { iv: iv.toString('base64'), data: Buffer.concat([cipher.update(JSON.stringify(value)), cipher.final()]).toString('base64'), tag: cipher.getAuthTag().toString('base64') }
+ }
+ const temp = `${path}.${randomBytes(8).toString('hex')}`
+ await writeFile(temp, JSON.stringify(next), { mode: 0o600 })
+ await rename(temp, path)
+ records = next
+ })
+ tail = job.catch(() => {})
+ return job
+ }
+ return { get, set }
+}
diff --git a/core/src/host/remote-chat.js b/core/src/host/remote-chat.js
index 88f5278aa..88745fd9a 100644
--- a/core/src/host/remote-chat.js
+++ b/core/src/host/remote-chat.js
@@ -286,17 +286,18 @@ export function install(rt) {
// from outside the team) that the chat's route writes back as the reply.
// `human` + `ownerName`: the plugin has Bot Social's attestation that the friend typed this line
// themselves (never derived from the text). The reply is then drawn as the person, not the Bot.
- async function deliver({ handle, text, name, home, plugin, human, ownerName }) {
+ async function deliver({ handle, text, name, home, plugin, human, ownerName, sourceId, feishu, attachments }) {
const id = chatOfHandle(handle)?.id ?? await open({ handle, name: name ?? handle, home, plugin })
const bot = rt.botOf(id)
const agent = await rt.resolveAgent(rt.chatOf(id))
+ if (sourceId && agent.session?.surface?.nodes?.some(seq => (agent.session.eventAt(seq)?.data?.source ?? agent.session.eventAt(seq)?.data?.message?.source)?.sourceId === sourceId)) return
const shownName = cleanName(bot?.name ?? name ?? handle)
// The reply is here: the thinking row goes before the reply is drawn, not a beat after it (#443).
if (markAwaiting(id)) await rt.save().catch(error => warn('ds-bot: saving a friend chat wait failed: %s', error))
const typedBy = human === true && typeof ownerName === 'string' && ownerName.trim() ? cleanName(ownerName) : ''
agent.followup(createUserMessage({
- content: [{ type: 'text', text: `[Message from ${shownName} (${cleanName(handle)})]\n${fenceUntrusted(shownName, text)}` }],
- source: { kind: SOURCE_KIND, form: REMOTE_FORM, role: 'remote', exchangeId: randomUUID(), senderName: shownName, hop: 0, remote: { handle, ...(home ? { home } : {}) }, ...(typedBy ? { typedBy } : {}), text: String(text) },
+ content: [{ type: 'text', text: `[Message from ${shownName} (${cleanName(handle)})]\n${fenceUntrusted(shownName, text)}` }, ...(attachments ?? []).map(file => ({ type: file.mediaType ? 'image' : 'file', attachment: file }))],
+ source: { kind: SOURCE_KIND, form: REMOTE_FORM, role: 'remote', ...(sourceId ? { sourceId } : {}), ...(feishu ? { feishu } : {}), ...(attachments?.length ? { attachments: attachments.map(ref => ({ id: ref.attachmentId, name: ref.name, size: ref.bytes, mime: ref.mediaType ?? '' })) } : {}), exchangeId: randomUUID(), senderName: shownName, hop: 0, remote: { handle, ...(home ? { home } : {}) }, ...(typedBy ? { typedBy } : {}), text: String(text) },
}))
await ctx.sessions.flush(agent.session)
await rt.ingestRemoteRoomLine?.({ handle, text, name: shownName }).catch(error => warn('ds-bot: room ingest for %s failed: %s', handle, error))
diff --git a/core/src/host/resume.js b/core/src/host/resume.js
index d010bf247..94308e8f3 100644
--- a/core/src/host/resume.js
+++ b/core/src/host/resume.js
@@ -27,6 +27,7 @@ export const resumeText = record => [
// The trigger fields a resumed turn needs to answer the same sender.
const triggerOf = info => ({
role: info.role,
+ ...(info.feishu ? { feishu: info.feishu } : {}),
...(info.exchangeId ? { exchangeId: info.exchangeId } : {}),
...(info.senderSessionId ? { senderSessionId: info.senderSessionId } : {}),
...(info.roomId ? { roomId: info.roomId } : {}),
@@ -157,6 +158,8 @@ export function install(rt) {
// Whose request the turn answers, so a resumed turn keeps its connector tools only when it was the owner's.
const note = originNote(id)
update(id, record => (record === undefined || record.origin === note.origin ? record : (({ origin: _, ...rest }) => ({ ...rest, ...note }))(record)))
+ const requester = rt.live.get(id)?.requesterMemberId
+ if (requester) update(id, record => record && record.requesterMemberId !== requester ? { ...record, requesterMemberId: requester } : record)
if (event.data?.source?.kind !== SOURCE_KIND) break
// turns.js, installed earlier, has already claimed the turn's trigger.
const info = rt.live.get(id)?.info
@@ -198,12 +201,18 @@ export function install(rt) {
}
if (record.resumed) return
const trigger = record.trigger
+ if (trigger?.role === 'feishu' && trigger.feishu) {
+ const meta = trigger.feishu, pending = rt.state.feishu?.events?.[meta.eventId]
+ if (!rt.state.feishu?.apps?.[meta.appId] || pending?.botId !== bot.id || ['sent', 'cancelled'].includes(pending.status)) return
+ await rt.deliver({ toId: bot.id, role: 'feishu', feishu: meta, exchangeId: trigger.exchangeId ?? meta.eventId, resumed: true, origin: record.origin ?? OTHER, text })
+ return
+ }
if ((trigger?.role === 'request' || trigger?.role === 'stopped') && trigger.senderSessionId && trigger.audience !== 'user' && rt.botOf(trigger.senderSessionId)) {
// The sender still waits for this turn's answer, so it goes on under the same exchange.
await rt.deliver({ fromId: trigger.senderSessionId, toId: bot.id, role: trigger.role, hop: trigger.hop ?? 0, ...(trigger.exchangeId ? { exchangeId: trigger.exchangeId } : {}), ...(trigger.senderRoomId ? { fromRoomId: trigger.senderRoomId } : {}), resumed: true, origin: record.origin ?? OTHER, text })
return
}
- await rt.deliver({ toId: bot.id, role: 'resume', resumed: true, origin: record.origin ?? OTHER, text })
+ await rt.deliver({ toId: bot.id, role: 'resume', resumed: true, origin: record.origin ?? OTHER, text, ...(record.requesterMemberId ? { requesterMemberId: record.requesterMemberId } : {}) })
}
// A hard stop keeps the inbox, which the Session runs once it wakes; only what DSH
diff --git a/core/src/host/secrets.js b/core/src/host/secrets.js
index ccf336414..7914d98e6 100644
--- a/core/src/host/secrets.js
+++ b/core/src/host/secrets.js
@@ -31,7 +31,7 @@ export const WITHHELD_REASONS = Object.freeze({
NOT_IN_SCOPE: 'not-in-scope',
UNKNOWN_BOT: 'unknown-bot',
})
-export const canUse = (secret, botId) => secret !== undefined && botId !== undefined
+export const canUse = (secret, botId) => secret !== undefined && botId !== undefined && !['FEISHU_APP_SECRET', 'FEISHU_WEBHOOK'].includes(secret.name)
&& (secret.scope === 'all' || (Array.isArray(secret.scope) && secret.scope.includes(botId)))
export function normalizeName(raw) {
diff --git a/core/src/host/tools.js b/core/src/host/tools.js
index a807dc7f1..f938b3ac0 100644
--- a/core/src/host/tools.js
+++ b/core/src/host/tools.js
@@ -26,6 +26,7 @@ export const EPHEMERAL_DENIED_TOOLS = Object.freeze([
'ask_user', 'save_capability', 'delete_capability', 'attach_capability', 'detach_capability',
'track_tasks', 'group_relay',
'request_secret', 'list_secrets',
+ 'feishu_apps', 'feishu_tool', 'feishu_card', 'feishu_file',
'send_message', 'schedule_create', 'schedule_update', 'schedule_delete',
'message_friend_bot', 'get_friend_file', 'list_friend_bots',
'define_workflow', 'run_workflow',
diff --git a/core/src/host/turns.js b/core/src/host/turns.js
index 8acc59e37..a2b507068 100644
--- a/core/src/host/turns.js
+++ b/core/src/host/turns.js
@@ -85,6 +85,8 @@ export function install(rt) {
const keeps = info !== undefined && (info.role === 'room' || expectsReply(info))
return rt.deliver({
origin,
+ ...(rt.live.get(id)?.requesterMemberId ? { requesterMemberId: rt.live.get(id).requesterMemberId } : {}),
+ ...(keeps && info.feishu ? { feishu: info.feishu } : {}),
...(keeps && info.senderSessionId ? { fromId: info.senderSessionId } : {}),
toId: rt.selfOf(id),
sessionId: id,
@@ -132,6 +134,8 @@ export function install(rt) {
const keeps = info !== undefined && (info.role === 'room' || expectsReply(info))
return rt.deliver({
origin,
+ ...(rt.live.get(id)?.requesterMemberId ? { requesterMemberId: rt.live.get(id).requesterMemberId } : {}),
+ ...(keeps && info.feishu ? { feishu: info.feishu } : {}),
...(keeps && info.senderSessionId ? { fromId: info.senderSessionId } : {}),
toId: rt.selfOf(id),
sessionId: id,
@@ -243,7 +247,7 @@ export function install(rt) {
const answersUser = info => info.role === 'request' && info.audience === 'user'
// Roles whose turn owes the sender a reply: a 'stopped' notice asks the Bot to
// acknowledge, exactly like a request.
- const expectsReply = info => info.role === 'request' || info.role === 'stopped'
+ const expectsReply = info => info.role === 'request' || info.role === 'stopped' || info.role === 'feishu'
// A friend's Bot asking (FlyBot remote, Bot Social): the turn stays in the Bot's own
// chat, where the user sees it, and its answer goes back to the friend's Bot.
const fromRemote = info => info.role === 'request' && typeof info.remote?.handle === 'string'
@@ -262,6 +266,13 @@ export function install(rt) {
const claimTrigger = (sessionId, entry, info) => {
if (info.form === 'remote-chat' && typeof info.typedBy === 'string' && info.typedBy && entry.turn !== undefined) markTypedTurn(sessionId, entry.turn, info.typedBy)
entry.info = info
+ if (info.requesterMemberId) entry.requesterMemberId = info.requesterMemberId
+ if (info.form === 'remote-chat' && info.feishu && entry.turn !== undefined) {
+ const turns = (state.feishuTurns ??= {})[sessionId] ??= {}
+ turns[entry.turn] = { ...info.feishu, attachments: info.attachments ?? [] }
+ for (const key of Object.keys(turns).slice(0, -400)) delete turns[key]
+ void rt.save().catch(() => {})
+ }
rt.noteTaskDriveTrigger?.(sessionId, info)
// A turn that was stopped for a part switch brings its joined requests along.
if (Array.isArray(info.joined) && info.joined.length > 0) {
@@ -464,6 +475,7 @@ export function install(rt) {
entry.since = event.time ?? Date.now()
entry.texts = []
entry.info = undefined
+ entry.requesterMemberId = undefined
// The turn's tool-call count for the inbox (#471), one per tool/call event, the same
// events the activity feed folds. A program's sub-calls are not tool/call events.
entry.toolCalls = 0
@@ -497,6 +509,7 @@ export function install(rt) {
// Bot relay that lands inside it may claim: the first message of a turn
// still claims it as today, a later one only joins it.
const opened = entry.opened === true
+ if (!opened && source?.kind === 'user' && source.authorKind === 'human' && typeof source.authorId === 'string') entry.requesterMemberId = source.authorId
if (entry.turn !== undefined && !bare(source)
&& (source?.kind === 'user' || source?.kind === REPLY_KIND || source?.kind === 'schedule' || source?.kind === SOURCE_KIND)) {
entry.opened = true
@@ -669,6 +682,10 @@ export function install(rt) {
// Whoever the turn answers gets the same three-way rule: a failure notice,
// the turn's text (or a stopped-before-answer line), or nothing.
const answer = (source, reply) => {
+ if (source.feishu) {
+ void rt.feishu?.complete(source.feishu, reply, failure ?? (reason?.kind === 'aborted' ? true : undefined)).catch(error => rt.warn('ds-bot: Feishu reply failed: %s', error.code ?? 'error'))
+ return
+ }
if (fromRemote(source)) {
// A hard failure owes the sender a sentence (#1068). Without it their DM stays on
// "Weighing the options…" until the wait expires, and a missing credential never expires
@@ -754,7 +771,8 @@ export function install(rt) {
toId: rt.selfOf(id),
sessionId: id,
text: request.text,
- role: 'request',
+ role: request.info.feishu ? 'feishu' : 'request',
+ ...(request.info.feishu ? { feishu: request.info.feishu, untrusted: true } : {}),
hop: request.info.hop ?? 0,
exchangeId: request.info.exchangeId,
...(request.info.senderRoomId ? { fromRoomId: request.info.senderRoomId } : {}),
diff --git a/core/src/host/workbench-gateway.js b/core/src/host/workbench-gateway.js
index fc3d80759..47ccb9b92 100644
--- a/core/src/host/workbench-gateway.js
+++ b/core/src/host/workbench-gateway.js
@@ -8,6 +8,7 @@ import { resolve } from 'node:path'
import { pathToFileURL } from 'node:url'
export const WORKBENCH_ENDPOINTS = new Set([
+ 'feishu',
'personal-agent-token-create', 'personal-agent-token-list', 'personal-agent-token-revoke', 'personal-agent-delegation-set', 'personal-agent-propose-task', 'personal-agent-history', 'personal-agent-create', 'personal-agent-read', 'personal-agent-list', 'personal-agent-join', 'personal-agent-default', 'personal-agent-participations', 'personal-agent-leave', 'personal-agent-retire',
'personal-space', 'auth-mode', 'platform-login', 'auth-whoami', 'auth-revoke', 'auth-invite', 'auth-redeem', 'workbench-state',
'project-repositories', 'project-repository-link', 'project-repository-unlink', 'project-close-request', 'project-close-prepare', 'project-close-confirm',
diff --git a/core/src/host/workbench-personal.js b/core/src/host/workbench-personal.js
index 35a3d321d..125f28443 100644
--- a/core/src/host/workbench-personal.js
+++ b/core/src/host/workbench-personal.js
@@ -3,7 +3,7 @@ import { textOf } from './text.js'
import { ownEntry } from './store.js'
const refused = () => Object.assign(new Error('You cannot access that personal conversation'), { code: 'bot/forbidden' })
-const personalBot = bot => bot && !bot.projectAgent && !bot.ephemeral && !bot.projectId && !bot.remote
+const personalBot = bot => bot && !bot.projectAgent && !bot.ephemeral && !bot.projectId && (!bot.remote || bot.remote.plugin === 'feishu')
export function personalRoster(rt, actor) {
if (!actor?.memberId) throw refused()
const bots = Object.values(rt.state.bots).filter(bot => personalBot(bot) && rt.botOwnedBy(actor, bot.id))
@@ -11,7 +11,7 @@ export function personalRoster(rt, actor) {
const bot = ownEntry(rt.state.bots, id)
return bot && !bot.projectAgent && !bot.ephemeral && !bot.remote && (!bot.projectId || bot.projectId === room.projectId)
}))
- return { bots: bots.map(({ id, name, role, instructions, model, color, avatar, parentId, sessionId }) => ({ id, name, role, instructions, model, color, avatar, parentId, sessionId: rt.chatOf?.(id) ?? sessionId ?? id, parts: (rt.partsOf?.(id) ?? []).map(part => ({ sessionId: part.sessionId, number: part.number })) })), rooms: rooms.map(({ id, name, members, participants, mode, projectId }) => ({ id, name, ...(projectId ? { projectId } : {}), members, participants: (participants ?? []).map(({ id, kind, displayName, role, joinedSeq, leftSeq }) => ({ id, kind, displayName, role, joinedSeq, leftSeq })), mode })), mainBotIds: rt.state.mainBotIds.filter(id => bots.some(bot => bot.id === id)) }
+ return { bots: bots.map(({ id, name, role, instructions, model, color, avatar, parentId, sessionId, remote }) => ({ id, name, role, instructions, model, color, avatar, parentId, ...(remote ? { remote } : {}), sessionId: rt.chatOf?.(id) ?? sessionId ?? id, parts: (rt.partsOf?.(id) ?? []).map(part => ({ sessionId: part.sessionId, number: part.number })) })), rooms: rooms.map(({ id, name, members, participants, mode, projectId }) => ({ id, name, ...(projectId ? { projectId } : {}), members, participants: (participants ?? []).map(({ id, kind, displayName, role, joinedSeq, leftSeq }) => ({ id, kind, displayName, role, joinedSeq, leftSeq })), mode })), mainBotIds: rt.state.mainBotIds.filter(id => bots.some(bot => bot.id === id)) }
}
export function requirePersonalSession(rt, actor, id) {
const roster = personalRoster(rt, actor)
diff --git a/core/src/shared/feishu.js b/core/src/shared/feishu.js
new file mode 100644
index 000000000..ea27c552c
--- /dev/null
+++ b/core/src/shared/feishu.js
@@ -0,0 +1,37 @@
+// Shared setup contract; the browser and server validate the same application and permission names.
+export const APP_ID = /^cli_[0-9a-f]{16}$/i
+export const BASE_SCOPES = ['im:message.group_at_msg:readonly', 'im:message.p2p_msg:readonly', 'im:message:send_as_bot', 'im:message.reactions:write_only', 'im:resource', 'im:message:readonly', 'im:chat:readonly', 'contact:contact.base:readonly', 'contact:user.base:readonly', 'im:message.group_msg.include_bot:read']
+export const PRODUCTS = [
+ { id: 'calendar', label: 'Calendar', scopes: ['calendar:calendar'] },
+ { id: 'docs', label: 'Documents and wiki', scopes: ['docx:document', 'drive:drive', 'wiki:wiki'] },
+ { id: 'bitable', label: 'Bitable', scopes: ['bitable:app'] },
+ { id: 'sheets', label: 'Spreadsheets', scopes: ['sheets:spreadsheet'] },
+ { id: 'meeting', label: 'Video meetings', scopes: ['vc:reserve'] },
+ { id: 'task', label: 'Tasks', scopes: ['task:task:write'] },
+]
+export const STEPS = ['Create an app on Feishu Open Platform', 'Enter credentials and test connection', 'Subscribe to message events and card callbacks', 'Publish an app version', 'Choose the Bot represented by the robot', 'Try it in Feishu']
+export const setupSteps = mode => mode === 'http' ? ['Prepare a public event address', ...STEPS] : [...STEPS]
+export const permissionJSON = (selected = []) => JSON.stringify({ scopes: { tenant: [...new Set([...BASE_SCOPES, ...PRODUCTS.filter(p => selected.includes(p.id)).flatMap(p => p.scopes)])], user: [] } }, null, 2)
+export function scopeGranted(scope, list = []) {
+ if (scope === 'im:message:readonly') return ['im:message:readonly', 'im:message', 'im:message.history:readonly'].some(s => list.includes(s))
+ if (scope === 'im:message.reactions:write_only') return list.includes(scope) || list.includes('im:message')
+ return list.includes(scope)
+}
+export function productAccess(product, list = []) {
+ if (product.scopes.every(s => list.includes(s))) return 'write'
+ if (['meeting', 'task'].includes(product.id)) return 'disabled'
+ return product.scopes.every(s => list.includes(s) || list.includes(`${s}:readonly`)) ? 'read' : 'disabled'
+}
+export function validateCredentials({ appId, appSecret, verificationToken }, mode) {
+ if (!APP_ID.test(appId ?? '')) throw new Error('App ID must be cli_ followed by 16 hexadecimal characters')
+ if (typeof appSecret !== 'string' || !appSecret.trim()) throw new Error('Enter the App Secret')
+ if (!['socket', 'http'].includes(mode)) throw new Error('Choose a receiving method')
+ if (mode === 'http' && !verificationToken?.trim()) throw new Error('Enter the Verification Token')
+}
+export function publicAddress(value) {
+ try {
+ const u = new URL(value)
+ return u.protocol === 'https:' && !u.username && !u.password && !u.hash && !u.search &&
+ !/^(localhost$|127\.|10\.|0\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|\[|169\.254\.)/.test(u.hostname) && !u.hostname.endsWith('.local')
+ } catch { return false }
+}
diff --git a/core/test/feishu-migration.test.js b/core/test/feishu-migration.test.js
new file mode 100644
index 000000000..e2b766d88
--- /dev/null
+++ b/core/test/feishu-migration.test.js
@@ -0,0 +1,450 @@
+import assert from 'node:assert/strict'
+import { test } from 'node:test'
+import { mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { setTimeout as delay } from 'node:timers/promises'
+import { createFeishuService } from '../src/host/feishu-service.js'
+import { createFeishuVault } from '../src/host/feishu-vault.js'
+import { createFeishuEventServer } from '../src/host/feishu-http.js'
+import { readMessage, fromPost, markdown, toCard, MAX_POST } from '../src/host/feishu-format.js'
+import { setupSteps, permissionJSON, validateCredentials } from '../src/shared/feishu.js'
+import { canUse } from '../src/host/secrets.js'
+import { installFeishuTools, FEISHU_OPERATIONS, operationWrites } from '../src/host/feishu-tools.js'
+import { createFeishuCalendars } from '../src/host/feishu-calendar.js'
+import { createRuntime } from '../index.js'
+import { fakeContext } from './fake-ctx.js'
+import { SOURCE_KIND } from '../src/host/constants.js'
+import { createFeishuApi } from '../src/host/feishu-api.js'
+import { createFeishuTransport, SDK_PACKAGE } from '../src/host/feishu-sdk.js'
+import { install as installResume } from '../src/host/resume.js'
+import { install as installDelivery } from '../src/host/delivery.js'
+
+const APP = 'cli_0123456789abcdef', OTHER = 'cli_fedcba9876543210'
+const owner = { memberId: 'owner-1' }
+const creds = { appId: APP, appSecret: 'fixture-app-secret', verificationToken: 'fixture-verification' }
+const event = (id = 'm1', more = {}) => ({ header: { event_id: `e-${id}`, event_type: 'im.message.receive_v1', app_id: APP, token: creds.verificationToken }, event: { sender: { sender_id: { open_id: 'ou_alice' }, sender_type: 'user' }, message: { message_id: id, chat_id: 'oc_group', chat_type: 'group', root_id: 'om_root', message_type: 'text', mentions: [{ id: { open_id: 'ou_bot' } }], content: JSON.stringify({ text: 'hello' }), ...more } } })
+const until = async fn => { for (let i = 0; i < 100; i++) { if (fn()) return; await delay(5) }; assert.fail('condition did not settle') }
+function rig(snapshot, options = {}) {
+ const rt = { home: '', config: {}, state: snapshot ?? { members: { 'owner-1': { id: 'owner-1', displayName: 'Owner' }, bob: { id: 'bob', displayName: 'Bob' } }, bots: { b1: { id: 'b1', ownerId: 'owner-1', name: 'Chief' } } }, ctx: {}, authzEnforced: () => true, readOnly: () => undefined, load: async () => {}, save: async () => {}, botOf(id) { return rt.state.bots[id] } }
+ const calls = [], delivered = [], history = [], secrets = new Map()
+ const vault = { get: async id => secrets.get(id), set: async (id, value) => value === undefined ? secrets.delete(id) : secrets.set(id, structuredClone(value)) }
+ let failSend = false, failPost = false
+ const request = async (url, init) => {
+ const path = new URL(url).pathname, body = init.body instanceof FormData ? init.body : init.body ? JSON.parse(init.body) : undefined
+ calls.push({ path, method: init.method, body })
+ if (path.includes('tenant_access_token')) return Response.json({ code: 0, tenant_access_token: 'fixture-tenant-token', expire: 7200 })
+ if (failSend && path.includes('/messages') && init.method === 'POST' && !path.includes('reactions')) throw new Error('fixture network failure')
+ if (failPost && body?.msg_type === 'post') return Response.json({ code: 230001 })
+ const data = path.includes('bot/v3/info') ? { bot: { open_id: 'ou_bot', app_name: 'Example' } } : path.includes('application/v6/scopes') ? { scopes: [] } : path.includes('/chats/') ? { name: 'Example group' } : path.includes('reactions') ? { reaction_id: 'reaction1' } : { message_id: 'sent-card' }
+ return Response.json({ code: 0, data })
+ }
+ rt.deliver = async m => { delivered.push(m) }
+ rt.remoteChats = { open: async () => {}, deliver: async m => { history.push(m) } }
+ const transport = options.transport ?? (() => ({ connect: async () => ({ close: async () => {} }) }))
+ const service = createFeishuService(rt, { request, vault, transport })
+ const save = async (id = APP, mode = 'socket') => {
+ await service.endpoint({ operation: 'save', appId: id, appSecret: creds.appSecret, mode, verificationToken: creds.verificationToken, publicUrl: 'https://events.example.com', botId: 'b1' }, owner)
+ await service.endpoint({ operation: 'allow', appId: id, openId: 'ou_alice' }, owner)
+ }
+ return { rt, service, calls, delivered, history, vault, secrets, save, failSend: value => { failSend = value }, failPost: value => { failPost = value } }
+}
+
+test('setup flows, credential validation and a single permission import cover both receiving methods', () => {
+ assert.equal(setupSteps('socket').length, 6)
+ assert.equal(setupSteps('http').length, 7)
+ assert.equal(setupSteps('http')[0], 'Prepare a public event address')
+ assert.throws(() => validateCredentials({ ...creds, appId: 'cli_nothexcharacters' }, 'socket'), /16 hexadecimal/)
+ assert.throws(() => validateCredentials({ ...creds, verificationToken: '' }, 'http'), /Verification Token/)
+ validateCredentials(creds, 'http')
+ const permissions = JSON.parse(permissionJSON(['calendar', 'docs', 'bitable', 'sheets', 'meeting', 'task']))
+ assert.ok(permissions.scopes.tenant.includes('im:message.reactions:write_only'))
+ assert.ok(permissions.scopes.tenant.includes('wiki:wiki'))
+ assert.ok(permissions.scopes.tenant.includes('vc:reserve'))
+ assert.equal(new Set(permissions.scopes.tenant).size, permissions.scopes.tenant.length)
+})
+
+test('vault encrypts credentials on disk and authenticates their application binding', async t => {
+ const home = await mkdtemp(join(tmpdir(), 'feishu-vault-')); t.after(() => rm(home, { recursive: true, force: true }))
+ const vault = createFeishuVault(home)
+ await vault.set(APP, creds)
+ const bytes = await readFile(join(home, 'feishu-credentials.json'), 'utf8')
+ assert.ok(!bytes.includes(creds.appSecret)); assert.ok(!bytes.includes(creds.verificationToken))
+ assert.equal((await stat(join(home, 'feishu-credentials.json'))).mode & 0o777, 0o600)
+ assert.deepEqual(await createFeishuVault(home).get(APP), creds)
+ assert.equal(canUse({ name: 'FEISHU_APP_SECRET', scope: 'all' }, 'b1'), false)
+ assert.equal(canUse({ name: 'OTHER_KEY', scope: 'all' }, 'b1'), true)
+ assert.equal(canUse({ name: 'FEISHU_CUSTOM_USER_KEY', scope: 'all' }, 'b1'), true)
+ await vault.set(APP, undefined); assert.equal(await vault.get(APP), undefined)
+})
+
+test('switching methods retains app, sender list, identity, Bot and conversation handle, but deletes token', async () => {
+ const r = rig(); await r.save(APP, 'http')
+ await r.service.endpoint({ operation: 'identity', appId: APP, openId: 'ou_alice', memberId: 'bob' }, owner)
+ await r.service.endpoint({ operation: 'save', appId: APP, mode: 'socket' }, owner)
+ assert.equal(Object.keys(r.service.data().apps).length, 1)
+ assert.equal((await r.vault.get(APP)).verificationToken, undefined)
+ assert.deepEqual(r.service.appOf(APP).allowed, ['ou_alice'])
+ assert.equal(r.service.appOf(APP).botId, 'b1')
+ assert.equal(r.service.identity(APP, 'ou_alice').memberId, 'bob')
+ await assert.rejects(r.service.receive(APP, event(), 'http'), /Receiving method changed/)
+ const display = JSON.stringify(r.service.view(owner))
+ assert.ok(!display.includes(creds.appSecret)); assert.ok(!display.includes(creds.verificationToken))
+})
+
+test('persisted inbox deduplicates concurrent and restarted deliveries and routes replies to their thread', async () => {
+ const r = rig(); await r.save()
+ await Promise.all([r.service.receive(APP, event(), 'socket'), r.service.receive(APP, event(), 'socket')])
+ await until(() => r.delivered.length === 1)
+ assert.equal(r.delivered[0].toId, 'b1'); assert.equal(r.delivered[0].feishu.rootId, 'om_root')
+ assert.equal(r.history[0].handle, `feishu:oc_group`)
+ const restarted = rig(structuredClone(r.rt.state)); await restarted.vault.set(APP, await r.vault.get(APP))
+ assert.equal((await restarted.service.receive(APP, event(), 'socket')).duplicate, true)
+ assert.equal(restarted.delivered.length, 0)
+ await r.service.complete(r.delivered[0].feishu, '**answer**')
+ const reply = r.calls.find(c => c.path.endsWith('/om_root/reply'))
+ assert.ok(reply); assert.equal(reply.body.reply_in_thread, true)
+ assert.equal(reply.body.msg_type, 'post')
+ assert.ok(r.calls.some(c => c.method === 'DELETE' && c.path.endsWith('/reactions/reaction1')))
+})
+
+test('save failure is not acknowledged as a handled event', async () => {
+ const r = rig(); await r.save()
+ r.rt.save = async () => { throw new Error('disk full') }
+ await assert.rejects(r.service.receive(APP, event(), 'socket'), /disk full/)
+ assert.equal(Object.keys(r.service.data().events).length, 0)
+ r.rt.save = async () => {}
+ assert.equal((await r.service.receive(APP, event(), 'socket')).duplicate, false)
+ await until(() => r.delivered.length === 1)
+})
+
+test('HTTP verifies token, application, mode and encryption before accepting a challenge or event', async () => {
+ const r = rig(); await r.save(APP, 'http')
+ await assert.rejects(r.service.receive(APP, { token: 'wrong', type: 'url_verification', challenge: 'x' }, 'http'), /Verification Token/)
+ assert.deepEqual(await r.service.receive(APP, { token: creds.verificationToken, type: 'url_verification', challenge: 'x' }, 'http'), { challenge: 'x' })
+ await assert.rejects(r.service.receive(APP, { token: creds.verificationToken, encrypt: 'ciphertext' }, 'http'), /Encrypt Key/)
+ const foreign = event(); foreign.header.app_id = OTHER
+ await assert.rejects(r.service.receive(APP, foreign, 'http'), /does not match/)
+ assert.equal(Object.keys(r.service.data().events).length, 0)
+})
+
+test('event listener exposes only event paths and never console or arbitrary API access', async t => {
+ const r = rig(); await r.save(APP, 'http')
+ const server = createFeishuEventServer(r.service)
+ await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); t.after(() => server.close())
+ const base = `http://127.0.0.1:${server.address().port}`
+ assert.equal((await fetch(`${base}/api/bot`)).status, 404)
+ const response = await fetch(`${base}/api/feishu/events/${APP}`, { method: 'POST', body: JSON.stringify({ type: 'url_verification', token: creds.verificationToken, challenge: 'challenge' }) })
+ assert.equal(response.status, 200); assert.deepEqual(await response.json(), { challenge: 'challenge' })
+})
+
+test('Markdown round trip preserves rich content and thread metadata without fetching external images', () => {
+ const text = fromPost({ zh_cn: { title: 'Title', content: [[{ tag: 'text', text: 'bold', style: ['bold'] }, { tag: 'a', text: 'link', href: 'https://example.com' }], [{ tag: 'code_block', language: 'js', text: 'x()' }], [{ tag: 'hr' }]] } })
+ assert.match(text, /\*\*bold\*\*/); assert.match(text, /\[link\]/); assert.match(text, /```js/); assert.match(text, /---/)
+ const m = event('rich', { message_type: 'post', content: JSON.stringify({ zh_cn: { content: [[{ tag: 'text', text: 'hello' }, { tag: 'img', image_key: 'fixture-image' }]] } }) })
+ const read = readMessage(m)
+ assert.equal(read.text, 'hello'); assert.equal(read.files.length, 1); assert.equal(read.rootId, 'om_root')
+ assert.match(markdown('# Title\n\nall'), /^#### Title/)
+ assert.ok(!markdown('').includes(''))
+ assert.equal(markdown('See [notes](/files/1) and [site](https://example.com)'), 'See notes and [site](https://example.com)', 'a console-relative link keeps only its text')
+ assert.equal(markdown('```mermaid\ngraph TD\n```'), '```mermaid\ngraph TD\n```', 'Mermaid stays code, with no console link')
+ assert.equal(markdown('Ask @Bob', new Map([['Bob', 'ou_bob']])), 'Ask Bob')
+})
+
+test('rich-post rejection and size overflow fall back to plain text, leaving technical details in diagnostics', async () => {
+ const r = rig(); await r.save(); r.failPost(true)
+ await r.service.sendText(APP, { chatId: 'chat' }, '**answer**', 'uuid1')
+ assert.deepEqual(r.calls.filter(c => c.body?.msg_type).map(c => c.body.msg_type), ['post', 'text'])
+ await r.service.sendText(APP, { chatId: 'chat' }, 'x'.repeat(MAX_POST + 1), 'uuid2')
+ assert.equal(r.calls.at(-1).body.msg_type, 'text')
+ assert.equal(r.service.appOf(APP).diagnostics[0].kind, 'format')
+})
+
+test('failed sending keeps the Get reaction; explicit retry sends once and only then removes it', async () => {
+ const r = rig(); await r.save(); await r.service.receive(APP, event(), 'socket'); await until(() => r.delivered.length === 1)
+ r.failSend(true); await r.service.complete(r.delivered[0].feishu, 'answer')
+ assert.equal(r.service.data().events[`${APP}:m1`].reactionId, 'reaction1')
+ assert.ok(!r.calls.some(c => c.method === 'DELETE'))
+ r.failSend(false); await r.service.endpoint({ operation: 'retry', appId: APP, outboxId: `${APP}:m1` }, owner)
+ assert.equal(r.service.data().outbox[`${APP}:m1`].status, 'sent')
+ assert.equal(r.service.data().events[`${APP}:m1`].reactionId, undefined)
+})
+
+test('cards persist before sending and require the actual linked clicker; replay and foreign app cannot resubmit', async () => {
+ const r = rig(); await r.save()
+ const card = await r.service.card(APP, 'b1', { chatId: 'oc_group', rootId: 'om_root' }, { title: 'Question', blocks: [{ type: 'text', text: 'Choose' }, { type: 'input', name: 'comment', label: 'Comment' }], actions: [{ id: 'yes', label: 'Submit' }] })
+ const callback = { header: { event_type: 'card.action.trigger', event_id: 'click1' }, event: { operator: { open_id: 'ou_alice' }, context: { open_message_id: 'sent-card', open_chat_id: 'oc_group' }, action: { value: { flybot_card: card.id, action: 'yes', version: 1 }, form_value: { comment: 'hi' } } } }
+ assert.equal((await r.service.receive(APP, callback, 'socket')).toast.type, 'error')
+ assert.equal(r.delivered.length, 0)
+ await r.service.endpoint({ operation: 'identity', appId: APP, openId: 'ou_alice', memberId: 'bob' }, owner)
+ const response = await r.service.receive(APP, callback, 'socket')
+ assert.equal(response.toast.content, '已提交')
+ await until(() => r.delivered.length === 1)
+ assert.equal(r.service.data().cards[card.id].submissions[0].memberId, 'bob')
+ assert.match(r.delivered[0].text, /bob/)
+ assert.deepEqual(await r.service.receive(APP, callback, 'socket'), response)
+ await delay(10); assert.equal(r.delivered.length, 1)
+ const rendered = toCard(r.service.data().cards[card.id])
+ assert.equal(rendered.body.elements.find(e => e.tag === 'form').elements[0].tag, 'input')
+ assert.equal(rendered.body.elements.find(e => e.tag === 'form').elements.at(-1).disabled, true)
+})
+
+test('tool capabilities default off, remain app-specific and are removed with the connection', async () => {
+ const r = rig(); await r.save(); await r.save(OTHER)
+ assert.throws(() => r.service.authorizeTool('b1', APP, 'calendar', false), /not granted/)
+ await r.service.endpoint({ operation: 'grant', appId: APP, botId: 'b1', product: 'calendar', mode: 'read' }, owner)
+ assert.equal(r.service.authorizeTool('b1', APP, 'calendar', false), 'read')
+ assert.throws(() => r.service.authorizeTool('b1', APP, 'calendar', true), /not granted/)
+ assert.throws(() => r.service.authorizeTool('b1', OTHER, 'calendar', false), /not granted/)
+ await assert.rejects(r.service.endpoint({ operation: 'grant', appId: APP, botId: 'b1', product: 'calendar', mode: 'write' }, { memberId: 'bob' }), /app owner/)
+ await r.service.endpoint({ operation: 'delete', appId: APP }, owner)
+ assert.equal(r.service.data().grants[APP], undefined); assert.equal(await r.vault.get(APP), undefined)
+})
+
+test('write gate requests native approval before network access; meeting host must come from linked request context', async () => {
+ const r = rig(); await r.save()
+ const tools = new Map(), listeners = new Map()
+ r.rt.ctx = { tools: { register: tool => tools.set(tool.name, tool) }, on: (name, listener) => listeners.set(name, listener) }
+ r.rt.whoseAgent = () => ({ bot: r.rt.state.bots.b1 })
+ r.rt.liveOf = () => ({ info: { feishu: { appId: APP, openId: 'ou_alice' } } })
+ installFeishuTools(r.rt, r.service)
+ const args = { appId: APP, operation: 'calendar_create', parameters: { body: { summary: 'Team' } } }, exec = { name: 'feishu_tool', arguments: args, agent: { id: 'b1' } }
+ await r.service.endpoint({ operation: 'grant', appId: APP, botId: 'b1', product: 'calendar', mode: 'ask' }, owner)
+ const before = r.calls.length
+ assert.equal((await listeners.get('tools/pre-execute')(exec, async () => ({ kind: 'allow' }))).kind, 'ask')
+ assert.equal(r.calls.length, before)
+ await r.service.endpoint({ operation: 'grant', appId: APP, botId: 'b1', product: 'meeting', mode: 'write' }, owner)
+ const booking = { appId: APP, operation: 'meeting_reserve', parameters: { body: { owner_id: 'forged-owner', end_time: '2000000000' } } }
+ await assert.rejects(tools.get('feishu_tool').execute(booking, exec), /没有关联/)
+ await r.service.endpoint({ operation: 'identity', appId: APP, openId: 'ou_alice', memberId: 'bob' }, owner)
+ await tools.get('feishu_tool').execute(booking, exec)
+ assert.equal(r.calls.at(-1).body.owner_id, 'ou_alice')
+ assert.deepEqual(new Set(Object.values(FEISHU_OPERATIONS).map(op => op[0])), new Set(['calendar', 'docs', 'bitable', 'sheets', 'meeting', 'task']))
+ assert.equal(operationWrites(FEISHU_OPERATIONS.bitable_records), false)
+})
+
+test('multiple requests queue for one Bot and do not clear a later request reaction', async () => {
+ const r = rig(); await r.save()
+ await r.service.receive(APP, event('m1'), 'socket'); await until(() => r.delivered.length === 1)
+ await r.service.receive(APP, event('m2'), 'socket'); await delay(15)
+ assert.equal(r.delivered.length, 1)
+ await r.service.complete(r.delivered[0].feishu, 'first answer')
+ await until(() => r.delivered.length === 2)
+ assert.equal(r.delivered[1].feishu.eventId, `${APP}:m2`)
+ assert.ok(!r.calls.some(c => c.method === 'DELETE' && c.path.includes('/m2/')))
+})
+
+test('meetings use the actual linked human across companies and refuse ambiguous or missing accounts', async () => {
+ const r = rig(); await r.save(); await r.save(OTHER)
+ const tools = new Map()
+ r.rt.ctx = { tools: { register: tool => tools.set(tool.name, tool) }, on() {} }
+ r.rt.whoseAgent = () => ({ bot: r.rt.state.bots.b1 })
+ let live = { info: { feishu: { appId: APP, openId: 'ou_alice' } }, requesterMemberId: 'owner-1' }
+ r.rt.liveOf = () => live
+ installFeishuTools(r.rt, r.service)
+ for (const [appId, openId] of [[APP, 'ou_alice'], [OTHER, 'ou_bob_other']]) await r.service.endpoint({ operation: 'identity', appId, openId, memberId: 'bob' }, owner)
+ await r.service.endpoint({ operation: 'grant', appId: OTHER, botId: 'b1', product: 'meeting', mode: 'write' }, owner)
+ const booking = { appId: OTHER, operation: 'meeting_reserve', parameters: { body: { owner_id: 'forged', end_time: '2000000000' } } }, exec = { agent: { id: 'b1' } }
+ await tools.get('feishu_tool').execute(booking, exec)
+ assert.equal(r.calls.at(-1).body.owner_id, 'ou_bob_other')
+ live = { requesterMemberId: 'bob' }
+ await tools.get('feishu_tool').execute(booking, exec)
+ assert.equal(r.calls.at(-1).body.owner_id, 'ou_bob_other')
+ live = { info: { feishu: { appId: APP, openId: 'ou_unlinked' } }, requesterMemberId: 'bob' }
+ await assert.rejects(tools.get('feishu_tool').execute(booking, exec), /没有关联/)
+ live = { requesterMemberId: 'bob' }
+ await r.service.endpoint({ operation: 'identity', appId: OTHER, openId: 'ou_second', memberId: 'bob' }, owner)
+ await assert.rejects(tools.get('feishu_tool').execute(booking, exec), /没有关联/)
+})
+
+test('native delivery deduplicates a new event but permits its interrupted turn to resume', async () => {
+ const messages = [], meta = { eventId: 'event', appId: APP, chatId: 'oc_chat' }
+ const agent = { session: { surface: { nodes: [1] }, eventAt: () => ({ data: { source: { exchangeId: 'event' } } }) }, followup: message => messages.push(message) }
+ const rt = { state: {}, ctx: { sessionController: { resolveAgent: async () => ({ agent }) }, sessions: { flush: async () => {} } }, botOf: id => id ? { id } : undefined, chatOf: id => id, roomOf() {}, ensureCapabilities: async () => {}, hideBlockingQuestion() {} }
+ installDelivery(rt)
+ const args = { toId: 'b1', role: 'feishu', exchangeId: 'event', feishu: meta, origin: 'other', text: 'question' }
+ await rt.deliver(args); assert.equal(messages.length, 0)
+ await rt.deliver({ ...args, resumed: true }); assert.equal(messages.length, 1)
+ assert.deepEqual(messages[0].source.feishu, meta)
+})
+
+test('restart pickup retains the Feishu target and suppresses cancelled-handler recovery', async t => {
+ const home = await mkdtemp(join(tmpdir(), 'feishu-resume-')), meta = { eventId: 'event', appId: APP, chatId: 'oc_chat', rootId: 'om_thread', openId: 'ou_alice' }
+ await writeFile(join(home, 'inflight.json'), JSON.stringify({ turns: { b1: { botId: 'b1', trigger: { role: 'feishu', exchangeId: 'event', feishu: meta } }, b2: { botId: 'b2', trigger: { role: 'feishu', feishu: { ...meta, eventId: 'cancelled' } } } }, queued: {} }))
+ const ctx = fakeContext(), deliveries = []
+ const rt = { home, ctx, state: { feishu: { apps: { [APP]: {} }, events: { event: { botId: 'b1', status: 'admitted' }, cancelled: { botId: 'b2', status: 'cancelled' } } } }, live: new Map(), readOnly() {}, load: async () => {}, botOf: id => ({ id }), chatOf: id => id, resolveAgent: async () => ({}), deliver: async args => deliveries.push(args), warn() {} }
+ t.mock.timers.enable({ apis: ['setTimeout'] })
+ installResume(rt)
+ t.after(async () => { await ctx.dispose(); await rm(home, { recursive: true, force: true }) })
+ t.mock.timers.tick(3000)
+ for (let i = 0; i < 1000 && !deliveries.length; i++) await new Promise(resolve => setImmediate(resolve))
+ assert.equal(deliveries.length, 1)
+ assert.equal(deliveries[0].role, 'feishu'); assert.equal(deliveries[0].resumed, true)
+ assert.deepEqual(deliveries[0].feishu, meta)
+})
+
+test('native turn completion routes the original Feishu metadata to its durable outbox', async t => {
+ const home = await mkdtemp(join(tmpdir(), 'feishu-turn-'))
+ const ctx = fakeContext(), rt = createRuntime(ctx, { home })
+ await rt.load()
+ rt.state.bots.b1 = { id: 'b1', sessionId: 'b1', name: 'Chief', ownerId: 'owner-1' }
+ rt.chatOwners.set('b1', 'b1')
+ const completed = [], meta = { eventId: 'fixture-event', appId: APP, chatId: 'oc_chat', rootId: 'om_root', openId: 'ou_alice' }
+ rt.feishu = { complete: async (...args) => completed.push(args) }
+ t.after(async () => { await ctx.dispose(); await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 20 }) })
+ const emit = async (type, data) => { for (const listener of ctx.listeners.get('session/event') ?? []) await listener({ id: 'b1' }, { type, data }) }
+ await emit('turn/start', { turn: 1 })
+ await emit('user/message', { source: { kind: 'user', authorKind: 'human', authorId: 'bob' }, content: [{ type: 'text', text: 'native question' }] })
+ assert.equal(rt.liveOf('b1').requesterMemberId, 'bob')
+ await emit('turn/start', { turn: 2 })
+ assert.equal(rt.liveOf('b1').requesterMemberId, undefined)
+ await emit('user/message', { source: { kind: SOURCE_KIND, form: 'relay', role: 'feishu', exchangeId: 'fixture-event', feishu: meta, origin: 'other', hop: 0 }, content: [{ type: 'text', text: 'question' }] })
+ await emit('assistant/message', { message: { content: [{ type: 'text', text: 'answer' }] } })
+ await emit('turn/end', { reason: { kind: 'completed' } })
+ assert.equal(completed.length, 1)
+ assert.deepEqual(completed[0][0], meta)
+ assert.equal(completed[0][1], 'answer')
+})
+
+test('calendar group sharing preserves existing owners and removes only its own unchanged ACL additions', async () => {
+ const state = {}, calls = [], acl = [{ acl_id: 'owner-acl', role: 'owner', scope: { user_id: 'ou_owner' } }]
+ const api = { async call(method, path, options = {}) {
+ calls.push({ method, path, body: options.body })
+ if (path.endsWith('/members')) return { items: [{ member_id: 'ou_owner' }, { member_id: 'ou_joiner' }] }
+ if (method === 'GET') return { acls: structuredClone(acl) }
+ if (method === 'POST') { const row = { acl_id: 'new-acl', ...options.body }; acl.push(row); return row }
+ return {}
+ } }
+ const service = { data: () => state, api: () => api, commit: async fn => fn(), diagnose: async () => {}, authorizeTool() {} }
+ const calendars = createFeishuCalendars(service)
+ const result = await calendars.share(APP, 'b1', { calendar_id: 'calendar', chat_id: 'chat', role: 'reader' })
+ assert.equal(result.members, 2)
+ assert.equal(calls.filter(c => c.method === 'POST').length, 1)
+ assert.equal(calls.find(c => c.method === 'POST').body.scope.user_id, 'ou_joiner')
+ await calendars.share(APP, 'b1', { calendar_id: 'calendar', chat_id: 'chat', stop: true })
+ assert.equal(calls.filter(c => c.method === 'DELETE').length, 1)
+ assert.ok(calls.find(c => c.method === 'DELETE').path.endsWith('/new-acl'))
+ assert.deepEqual(state.calendarShares, {})
+})
+
+test('revocation while obtaining a tenant token prevents the pending product request', async () => {
+ let release, revoked = false
+ const requests = []
+ const api = createFeishuApi(async () => creds, async url => {
+ requests.push(String(url))
+ return new Promise(resolve => { release = () => resolve(Response.json({ code: 0, tenant_access_token: 'fixture-token' })) })
+ })
+ const pending = api.call('POST', 'calendar/v4/calendars', { body: { summary: 'Team' }, authorize: () => { if (revoked) throw new Error('grant revoked') } })
+ await until(() => !!release)
+ revoked = true; release()
+ await assert.rejects(pending, /grant revoked/)
+ assert.equal(requests.length, 1)
+ assert.ok(requests[0].includes('/auth/v3/'))
+})
+
+test('changing a handler cancels only matching Feishu work and suppresses its late answer', async () => {
+ const r = rig(); await r.save()
+ r.rt.state.bots.b2 = { id: 'b2', ownerId: 'owner-1', name: 'Other Bot' }
+ await r.service.receive(APP, event(), 'socket'); await until(() => r.delivered.length === 1)
+ const meta = r.delivered[0].feishu, cancellations = []
+ r.rt.liveOf = () => ({ turn: 1, info: { feishu: meta } })
+ r.rt.resolveAgent = async () => ({ cancel: reason => cancellations.push(reason) })
+ await r.service.endpoint({ operation: 'configure', appId: APP, botId: 'b2', chatId: 'oc_group' }, owner)
+ assert.equal(cancellations.length, 1)
+ assert.equal(r.service.data().events[meta.eventId].status, 'cancelled')
+ await r.service.complete(meta, 'late answer')
+ assert.equal(r.service.data().outbox[meta.eventId], undefined)
+})
+
+test('all six tool products use platform-held credentials and their named API operations', async () => {
+ const r = rig(); await r.save()
+ const tools = new Map()
+ r.rt.ctx = { tools: { register: tool => tools.set(tool.name, tool) }, on() {} }
+ r.rt.whoseAgent = () => ({ bot: r.rt.state.bots.b1 })
+ r.rt.liveOf = () => ({ info: { feishu: { appId: APP, openId: 'ou_alice' } } })
+ installFeishuTools(r.rt, r.service)
+ await r.service.endpoint({ operation: 'identity', appId: APP, openId: 'ou_alice', memberId: 'bob' }, owner)
+ const cases = [
+ ['calendar', 'calendar_list', {}, '/calendar/v4/calendars'],
+ ['docs', 'docs_read', { document_id: 'doc' }, '/docx/v1/documents/doc/raw_content'],
+ ['bitable', 'bitable_records', { app_token: 'base', table_id: 'table', body: {} }, '/bitable/v1/apps/base/tables/table/records/search'],
+ ['sheets', 'sheets_read', { spreadsheet_token: 'sheet', range: 'sheet1!A1:B2' }, '/sheets/v2/spreadsheets/sheet/values/'],
+ ['meeting', 'meeting_reserve', { body: { end_time: '2000000000' } }, '/vc/v1/reserves/apply'],
+ ['task', 'task_create', { body: { summary: 'Work' }, query: { user_id_type: 'open_id' } }, '/task/v2/tasks'],
+ ]
+ for (const [product, operation, parameters, path] of cases) {
+ await r.service.endpoint({ operation: 'grant', appId: APP, botId: 'b1', product, mode: 'write' }, owner)
+ const result = await tools.get('feishu_tool').execute({ appId: APP, operation, parameters }, { agent: { id: 'b1' } })
+ assert.ok(r.calls.at(-1).path.includes(path), operation)
+ assert.ok(!result.includes(creds.appSecret))
+ assert.ok(!result.includes('fixture-tenant-token'))
+ }
+})
+
+test('rich cards keep tables outside the final form and include all supported block types', () => {
+ const record = { id: 'card', version: 1, card: { blocks: [
+ { type: 'text', text: '**text**' }, { type: 'fields', items: [{ label: 'Key', value: 'Value' }] },
+ { type: 'list', items: ['Item'] }, { type: 'progress', value: 50 }, { type: 'chart', spec: { type: 'bar', data: { values: [] } } },
+ { type: 'pages', pages: [{ title: 'Table page', blocks: [{ type: 'table', columns: ['Column'], rows: [['Value']] }] }, { title: 'Text page', blocks: [{ type: 'text', text: 'Page' }] }] },
+ { type: 'input', name: 'answer', label: 'Answer' }, { type: 'applet', description: 'Interactive explanation' },
+ ], actions: [{ id: 'submit', label: 'Submit' }] } }
+ const card = toCard(record), elements = card.body.elements
+ assert.equal(card.schema, '2.0')
+ assert.ok(elements.some(e => e.tag === 'table'))
+ assert.ok(elements.some(e => e.tag === 'chart'))
+ assert.ok(elements.some(e => e.tag === 'collapsible_panel'))
+ assert.equal(elements.at(-1).tag, 'form')
+ assert.ok(elements.at(-1).elements.every(e => ['input', 'button'].includes(e.tag)))
+})
+
+test('a long connection without the SDK installed says so instead of blaming the network', async () => {
+ // The Docker image once linked ds-bot without its dependencies: credentials and network were
+ // fine, but the diagnosis sent the owner to check them.
+ const missing = (credentials) => createFeishuTransport({ credentials, importSdk: async () => { throw new Error(`Cannot find package '${SDK_PACKAGE}' imported from core`) } })
+ const r = rig(undefined, { transport: ({ credentials }) => missing(credentials) })
+ await r.save()
+ await until(() => r.service.appOf(APP).diagnostics?.length)
+ const [first] = r.service.appOf(APP).diagnostics
+ assert.equal(first.kind, 'connection')
+ assert.match(first.message, /long-connection SDK is not installed/)
+ assert.doesNotMatch(first.message, /open\.feishu\.cn|credentials/)
+
+ const offline = rig(undefined, { transport: () => ({ connect: async () => { throw new Error('getaddrinfo ENOTFOUND open.feishu.cn') } }) })
+ await offline.save()
+ await until(() => offline.service.appOf(APP).diagnostics?.length)
+ assert.match(offline.service.appOf(APP).diagnostics[0].message, /^Could not connect to open\.feishu\.cn/, 'other dial failures keep the network advice')
+})
+
+test('the connection keeps no console address: save and configure ignore one', async () => {
+ const r = rig(); await r.save()
+ await r.service.endpoint({ operation: 'save', appId: APP, mode: 'socket', consoleUrl: 'https://flybot.example.com' }, owner)
+ await r.service.endpoint({ operation: 'configure', appId: APP, consoleUrl: 'https://flybot.example.com' }, owner)
+ assert.equal(r.service.appOf(APP).consoleUrl, undefined)
+})
+
+test('feishu_file uploads within the Feishu limits and refuses the rest without sending a console link', async () => {
+ const r = rig(); await r.save()
+ const tools = new Map()
+ const small = { attachmentId: 'a-small', name: 'notes.txt', bytes: 5 }
+ const huge = { attachmentId: 'a-huge', name: 'video.mov', bytes: 31 * 1024 * 1024 }
+ const bigImage = { attachmentId: 'a-image', name: 'scan.png', mediaType: 'image/png', bytes: 11 * 1024 * 1024 }
+ r.rt.ctx = { tools: { register: tool => tools.set(tool.name, tool) }, on() {}, attachments: {
+ async* readFileStream() { yield Buffer.from('hello') },
+ readImage: async () => assert.fail('an oversized image is not read'),
+ } }
+ r.rt.whoseAgent = () => ({ bot: r.rt.state.bots.b1 })
+ r.rt.liveOf = () => ({ info: { feishu: { appId: APP, openId: 'ou_alice', chatId: 'oc_chat' } } })
+ installFeishuTools(r.rt, r.service)
+ const session = { surface: { nodes: [1] }, eventAt: () => ({ data: { message: { content: [small, huge, bigImage].map(attachment => ({ type: 'file', attachment })) } } }) }
+ const send = attachmentId => tools.get('feishu_file').execute({ attachmentId }, { agent: { id: 'b1', session }, callId: `call-${attachmentId}` })
+
+ assert.equal(await send('a-small'), 'Sent')
+ assert.ok(r.calls.some(c => c.path.endsWith('/im/v1/files')))
+ assert.equal(r.calls.filter(c => c.body?.msg_type === 'file').length, 1)
+ await assert.rejects(send('a-huge'), /files up to 30 MB/)
+ await assert.rejects(send('a-image'), /images up to 10 MB/)
+ r.failSend(true)
+ await assert.rejects(send('a-small'), /did not accept the attachment/)
+ assert.equal(r.service.appOf(APP).diagnostics.at(-1).kind, 'attachment-send')
+ assert.ok(!r.calls.some(c => ['post', 'text'].includes(c.body?.msg_type)), 'no fallback message with a link is sent')
+})
diff --git a/core/test/feishu-setup.test.js b/core/test/feishu-setup.test.js
new file mode 100644
index 000000000..625b274d5
--- /dev/null
+++ b/core/test/feishu-setup.test.js
@@ -0,0 +1,87 @@
+import assert from 'node:assert/strict'
+import { test } from 'node:test'
+import { createRequire } from 'node:module'
+import { readFile } from 'node:fs/promises'
+import { join } from 'node:path'
+import { setTimeout as delay } from 'node:timers/promises'
+const { JSDOM } = createRequire(join(process.env.DSH_HARNESS ?? join(import.meta.dirname, '../dev/harness'), 'package.json'))('jsdom')
+
+async function setup(t, saved = [], language) {
+ const dom = new JSDOM('', { url: 'http://localhost/', runScripts: 'outside-only', pretendToBeVisual: true })
+ dom.window.eval(await readFile(join(import.meta.dirname, '../workbench-native.js'), 'utf8'))
+ const apps = saved, calls = []
+ const api = async body => {
+ calls.push(body)
+ if (body.operation === 'save') {
+ let app = apps.find(a => a.id === body.appId)
+ if (!app) { app = { id: body.appId, name: 'Feishu', allowed: [], identities: [], grants: {} }; apps.push(app) }
+ Object.assign(app, { mode: body.mode, step: body.step, publicUrl: body.publicUrl, connection: 'connecting' })
+ return { apps: structuredClone(apps), test: { ok: false, error: 'Publish the app first' } }
+ }
+ if (body.operation === 'configure') Object.assign(apps.find(a => a.id === body.appId), body)
+ return { apps: structuredClone(apps), members: [{ id: 'owner-1', name: 'Owner' }] }
+ }
+ const root = dom.window.document.getElementById('root')
+ let unmount = dom.window.FlyBotNativeConversation.mountNativeFeishu(root, { actions: { feishu: api }, roster: { bots: [{ id: 'b1', name: 'Chief' }] }, language, onClose() {} })
+ t.after(() => { unmount?.(); dom.window.close() })
+ for (let i = 0; i < 100; i++) { if (calls.length && (!saved.length || root.querySelector('select')?.value === saved[0].id)) break; await delay(10) }
+ await delay(20)
+ const button = title => [...root.querySelectorAll('button')].find(b => (b.getAttribute('aria-label') ?? b.textContent) === title)
+ const click = async title => { const b = button(title); assert.ok(b, title); assert.equal(b.disabled, false, title); b.click(); await delay(30) }
+ const input = async (name, value) => {
+ const target = root.querySelector(`input[aria-label="${name}"]`)
+ assert.ok(target, name)
+ Object.getOwnPropertyDescriptor(dom.window.HTMLInputElement.prototype, 'value').set.call(target, value)
+ target.dispatchEvent(new dom.window.Event('input', { bubbles: true })); target.dispatchEvent(new dom.window.Event('change', { bubbles: true })); await delay(10)
+ }
+ return { dom, root, apps, calls, button, click, input, unmount: () => { unmount(); unmount = undefined } }
+}
+
+test('mounted guide defaults to six steps and validates credentials before saving', async t => {
+ const ui = await setup(t)
+ assert.equal(ui.root.querySelectorAll('ol > li').length, 6)
+ assert.match(ui.root.textContent, /im:message.reactions:write_only/)
+ await ui.click('Next')
+ await ui.input('App ID', 'cli_invalid')
+ await ui.input('App Secret', 'fixture-secret')
+ assert.equal(ui.button('Save and test connection').disabled, true)
+ await ui.input('App ID', 'cli_0123456789abcdef')
+ await ui.click('Save and test connection')
+ assert.match(ui.root.textContent, /Wait until connected/)
+ assert.ok(!ui.root.textContent.includes('Now set Events and callbacks'))
+ assert.ok(!ui.root.textContent.includes('fixture-secret'))
+ assert.ok(ui.calls.some(c => c.operation === 'save' && c.mode === 'socket'))
+})
+
+test('standalone guide reuses Chinese setup copy and keeps credential errors readable', async t => {
+ const ui = await setup(t, [], 'zh-CN')
+ assert.match(ui.root.textContent, /在飞书开放平台创建应用/)
+ assert.equal(ui.root.querySelector('button[aria-label="长连接(推荐,不需要公网地址)"]').getAttribute('aria-pressed'), 'true')
+ await ui.click('下一步')
+ await ui.input('App ID', 'cli_invalid')
+ assert.match(ui.root.textContent, /App ID 必须是 cli_ 加 16 位十六进制字符/)
+ assert.equal(ui.button('保存并测试连接').disabled, true)
+ assert.ok(!ui.root.textContent.includes('Enter credentials and test connection'))
+})
+
+test('mounted HTTP guide requires a public address, resumes saved progress and switches the same app', async t => {
+ const id = 'cli_0123456789abcdef'
+ const ui = await setup(t, [{ id, mode: 'socket', step: 2, botId: 'b1', connection: 'ready', allowed: [], grants: {}, identities: [] }])
+ assert.match(ui.root.querySelector('h4').textContent, /Subscribe to message/)
+ assert.match(ui.root.textContent, /Now set Events and callbacks/)
+ await ui.click('Event address (HTTP, needs a public address)')
+ assert.equal(ui.root.querySelectorAll('ol > li').length, 7)
+ assert.equal(ui.button('Next').disabled, true)
+ await ui.input('Public HTTPS event origin', 'http://localhost')
+ assert.equal(ui.button('Next').disabled, true)
+ await ui.input('Public HTTPS event origin', 'https://events.example.com')
+ await ui.click('Next'); await ui.click('Next')
+ assert.equal(ui.root.querySelector('input[aria-label="App ID"]').disabled, true)
+ await ui.input('Verification Token', 'fixture-token')
+ await ui.click('Save and test connection')
+ assert.equal(ui.apps.length, 1)
+ assert.equal(ui.apps[0].id, id)
+ assert.equal(ui.apps[0].mode, 'http')
+ assert.match(ui.root.textContent, new RegExp(`/api/feishu/events/${id}`))
+ assert.ok(!ui.root.textContent.includes('fixture-token'))
+})
diff --git a/core/test/feishu.test.js b/core/test/feishu.test.js
index c0662ce91..6042536ba 100644
--- a/core/test/feishu.test.js
+++ b/core/test/feishu.test.js
@@ -235,9 +235,9 @@ const all = (node, out = []) => { if (node && typeof node === 'object') { if (Ar
const text = node => (node === null || node === undefined ? '' : Array.isArray(node) ? node.map(text).join('') : typeof node === 'object' ? text(node.props.children) : String(node))
const actions = { connectorConnect: async () => {}, connectorDisconnect: async () => {}, connectorRetry: async () => {}, connectorSend: async () => {} }
-const renderRow = (connector, given = []) => {
+const renderRow = (connector, given = [], overrides = {}) => {
states = [...given]
- const tree = expand(h(ConnectorsPage, { roster: { connectors: [connector], bots: [], self: { memberId: 'me' } }, actions }))
+ const tree = expand(h(ConnectorsPage, { roster: { connectors: [connector], bots: [], self: { memberId: 'me' } }, actions: { ...actions, ...overrides } }))
states = []
return tree
}
@@ -245,6 +245,17 @@ const renderRow = (connector, given = []) => {
const FEISHU_OFF = { id: 'feishu', name: 'Feishu', state: 'off', kind: 'channel', account: null, mode: null, modes: FEISHU_MODES, allowed: [] }
const FEISHU_APP = { ...FEISHU_OFF, state: 'ready', mode: 'app', allowed: [{ openId: 'ou_owner_1', name: 'Owner' }], inbound: { state: 'ready', refusedSenders: [{ openId: 'ou_stranger_1', name: 'Mallory', at: '2026-10-26T10:00:00.000Z' }] } }
+test('guided Feishu uses one Connect entry before and after connecting', () => {
+ for (const connector of [FEISHU_OFF, { ...FEISHU_APP, managed: true }]) {
+ const tree = renderRow(connector, [], { feishu: async () => ({ apps: [] }) })
+ const labels = all(tree).filter(node => node.type === 'button').map(text)
+ assert.equal(labels.filter(label => label === 'Connect').length, 1)
+ assert.ok(!labels.includes('Setup guide'))
+ const entry = all(tree).find(node => node.type === 'button' && text(node) === 'Connect')
+ assert.equal(entry.props['aria-expanded'], false)
+ }
+})
+
test('#1266: the Feishu row offers both ways to connect, and the webhook one links to Feishu', () => {
// form open, so the two mode buttons, the field and the link are drawn
const tree = renderRow(FEISHU_OFF, [true, false, '', [], false, false, null])
diff --git a/core/test/install.test.js b/core/test/install.test.js
index 55844158d..2bcf737e2 100644
--- a/core/test/install.test.js
+++ b/core/test/install.test.js
@@ -130,6 +130,12 @@ test('apply registers listeners, tools, and effects in a fixed order', (t) => {
'tool bot_schedules',
'tool project_digest',
'effect ds-bot: automation tasks default',
+ 'on tools/pre-execute',
+ 'tool feishu_apps',
+ 'tool feishu_tool',
+ 'tool feishu_card',
+ 'tool feishu_file',
+ 'effect ds-bot: Feishu apps',
'effect ds-bot: usage ledger',
'on llm/stream',
'effect ds-bot: update check',
diff --git a/core/test/run-bot-tools.test.js b/core/test/run-bot-tools.test.js
index 9c1d8a238..985affc25 100644
--- a/core/test/run-bot-tools.test.js
+++ b/core/test/run-bot-tools.test.js
@@ -111,8 +111,8 @@ test('the constant refuses every name at the guard and the approval seam, with n
const { fb, home, callAsDsh, ask, refusalOf, received, saved, stop } = await start()
t.after(stop)
const id = await runBot(fb, [])
- assert.equal(EPHEMERAL_DENIED_TOOLS.length, 32)
- assert.equal(new Set(EPHEMERAL_DENIED_TOOLS).size, 32, 'no duplicate name')
+ assert.equal(EPHEMERAL_DENIED_TOOLS.length, 36)
+ assert.equal(new Set(EPHEMERAL_DENIED_TOOLS).size, 36, 'no duplicate name')
assert.equal(new Set(EPHEMERAL_ALLOWED_TOOLS).size, EPHEMERAL_ALLOWED_TOOLS.length)
assert.deepEqual(EPHEMERAL_DENIED_TOOLS.filter(name => ALLOWED.has(name)), [], 'a name is in one list only')
diff --git a/core/workbench-native.css b/core/workbench-native.css
index 80ce0d0bc..70a7c1be3 100644
--- a/core/workbench-native.css
+++ b/core/workbench-native.css
@@ -572,6 +572,62 @@ button.bt-set-row:hover{background:var(--bt-hover)}
.bt-connector[data-state=error] .bt-connector-status{color:#e02135;white-space:normal}
.bt-connector-actions{flex:none;display:flex;gap:6px}
.bt-connector-form{display:flex;flex-direction:column;gap:8px;padding-left:48px;animation:bt-q-in 420ms linear(0.0000,0.0510,0.1692,0.3153,0.4639,0.6001,0.7163,0.8102,0.8823,0.9350,0.9717,0.9955,1.0098,1.0171,1.0198,1.0195,1.0175,1.0147,1.0117,1.0089,1.0064,1.0044,1.0028,1.0016,1.0000),bt-veil-in .2s ease-out}
+.bt-feishu-setup{container-type:inline-size;min-width:0;width:100%;max-width:960px;box-sizing:border-box;padding:20px;border:1px solid var(--bt-line);border-radius:14px;background:var(--bt-card);color:var(--bt-ink);font:13px/1.6 ui-sans-serif,system-ui,sans-serif;overflow-wrap:anywhere;animation:bt-veil-in .16s ease-out}
+.bt-feishu-setup *{box-sizing:border-box}
+.bt-feishu-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--bt-line)}
+.bt-feishu-header h3{padding:0;margin:0 0 4px;font-size:17px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-header>.bt-input{width:220px;max-width:45%;flex:none}
+.bt-feishu-setup .bt-set-hint{margin:0;font-size:12px;line-height:1.7;color:var(--bt-ink-2)}
+.bt-feishu-body{display:flex;flex-direction:column;gap:22px;padding-top:18px}
+.bt-feishu-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
+.bt-feishu-modes button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:11px 14px;border:1px solid var(--bt-line-2);border-radius:10px;background:var(--bt-card);color:var(--bt-ink);font:inherit;text-align:left;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-modes button:hover{background:var(--bt-hover)}
+.bt-feishu-modes button[aria-pressed=true]{border-color:var(--bt-accent);background:color-mix(in srgb,var(--bt-accent) 6%,var(--bt-card));box-shadow:0 0 0 1px var(--bt-accent)}
+.bt-feishu-modes strong{font-size:13px;font-weight:600}.bt-feishu-modes small{color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-layout{display:grid;grid-template-columns:160px minmax(0,1fr);gap:24px;align-items:start}
+.bt-feishu-progress{min-width:0}.bt-feishu-progress ol{display:flex;flex-direction:column;gap:4px;list-style:none;margin:0;padding:0}
+.bt-feishu-progress li{min-width:0}.bt-feishu-progress button{display:flex;align-items:center;gap:9px;width:100%;padding:9px 8px;border:0;border-radius:8px;background:transparent;color:var(--bt-ink-2);font:inherit;font-size:12px;line-height:19px;text-align:left;cursor:pointer}
+.bt-feishu-progress button:hover:not(:disabled){background:var(--bt-hover)}
+.bt-feishu-progress button[aria-current=step]{background:color-mix(in srgb,var(--bt-accent) 7%,var(--bt-card));color:var(--bt-accent);font-weight:600}
+.bt-feishu-progress button:disabled{opacity:.48;cursor:default}
+.bt-feishu-step-number{display:flex;align-items:center;justify-content:center;flex:none;width:22px;height:22px;border:1px solid var(--bt-line-2);border-radius:50%;font-size:11px;font-variant-numeric:tabular-nums}
+.bt-feishu-progress [aria-current=step] .bt-feishu-step-number{background:var(--bt-accent);border-color:var(--bt-accent);color:white}
+.bt-feishu-progress [data-done=true] .bt-feishu-step-number{border-color:transparent;background:var(--bt-hover);color:var(--bt-ink-2)}
+.bt-feishu-step{min-width:0}.bt-feishu-step-heading{margin-bottom:16px}.bt-feishu-eyebrow{display:block;margin-bottom:4px;color:var(--bt-ink-2);font-size:11px}
+.bt-feishu-step h4{margin:0;font-size:16px;line-height:24px;font-weight:650;letter-spacing:-.02em}
+.bt-feishu-step-content>div{display:flex;flex-direction:column;align-items:stretch;gap:14px}
+.bt-feishu-external{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;align-self:flex-start;border:1px solid var(--bt-line-2);border-radius:8px;padding:7px 11px;color:var(--bt-ink);font-size:12px;font-weight:500;text-decoration:none}
+.bt-feishu-external:hover{background:var(--bt-hover)}.bt-feishu-external span{color:var(--bt-ink-2)}
+.bt-feishu-permissions{display:flex;flex-direction:column;gap:10px;padding-top:5px}.bt-feishu-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.bt-feishu-section-head strong{font-size:13px;font-weight:600}
+.bt-feishu-optional{color:var(--bt-ink-2);font-size:11px}.bt-feishu-permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
+.bt-feishu-permission{display:flex;align-items:center;gap:9px;min-width:0;min-height:42px;margin:0;padding:9px 11px;border:1px solid var(--bt-line);border-radius:9px;background:var(--bt-card);font-size:12px;line-height:20px;cursor:pointer;transition:background-color .12s,border-color .12s}
+.bt-feishu-permission:hover{border-color:var(--bt-line-2);background:var(--bt-hover)}
+.bt-feishu-permission[data-checked=true]{border-color:color-mix(in srgb,var(--bt-accent) 55%,var(--bt-line));background:color-mix(in srgb,var(--bt-accent) 5%,var(--bt-card))}
+.bt-feishu-setup input[type=checkbox]{appearance:auto;flex:none;width:15px;height:15px;min-height:0;margin:0;padding:0;border-radius:4px;accent-color:var(--bt-accent);cursor:pointer}
+.bt-feishu-permission-copy{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
+.bt-feishu-setup .bt-feishu-button{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;gap:6px;flex:none;width:auto;min-height:34px;height:auto;margin:0;padding:6px 12px;border:1px solid var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink);font:inherit;font-size:12px;font-weight:500;cursor:pointer;box-shadow:none}
+.bt-feishu-setup .bt-feishu-button:hover:not(:disabled){background:var(--bt-hover)}.bt-feishu-setup .bt-feishu-button:disabled{opacity:.4;cursor:default}
+.bt-feishu-setup .bt-feishu-primary{background:var(--bt-accent);border-color:var(--bt-accent);color:#fff;padding-inline:18px}
+.bt-feishu-setup .bt-feishu-primary:hover:not(:disabled){background:color-mix(in srgb,var(--bt-accent) 88%,#000)}
+.bt-feishu-setup .bt-feishu-quiet{border-color:transparent;background:transparent;color:var(--bt-ink-2)}
+.bt-feishu-setup :is(button,a,input,select,textarea):focus-visible{outline:2px solid var(--bt-accent);outline-offset:3px}
+.bt-feishu-setup details{min-width:0}.bt-feishu-setup summary{cursor:pointer;font-size:12px;font-weight:500;line-height:20px;padding:8px 0;color:var(--bt-ink-2)}
+.bt-feishu-json{border:0}.bt-feishu-setup .bt-feishu-json summary{padding:2px 0;color:var(--bt-accent);font-weight:400}
+.bt-feishu-setup .bt-feishu-json textarea{width:100%;height:180px;min-height:120px;max-height:320px;margin-top:10px;padding:12px;border:1px solid var(--bt-line);border-radius:8px;background:var(--bt-sidebar);color:var(--bt-ink-2);font:11px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;resize:vertical;white-space:pre;overflow:auto;overflow-wrap:normal}
+.bt-feishu-field,.bt-feishu-setup .bt-q-field{display:flex;flex-direction:column;flex:initial;gap:6px;min-width:0;min-height:0;margin:0;padding:0;border:0;cursor:default;color:var(--bt-ink-2);font-size:12px}
+.bt-feishu-setup .bt-input{min-width:0;height:38px;padding:0 11px;font-size:13px;border-color:var(--bt-line-2);border-radius:8px;background:var(--bt-card);color:var(--bt-ink)}
+.bt-feishu-field+.bt-feishu-field{margin-top:2px}.bt-feishu-setup .bt-input:disabled{opacity:.65;background:var(--bt-sidebar)}
+.bt-feishu-check{display:flex;align-items:flex-start;gap:9px;font-size:12px}.bt-feishu-check input{margin-top:3px!important}
+.bt-feishu-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:22px;padding-top:16px;border-top:1px solid var(--bt-line)}
+.bt-feishu-footer>div{display:flex;align-items:center;gap:6px}.bt-feishu-result,.bt-feishu-error{margin:14px 0 0;padding:10px 12px;border-radius:8px;font-size:12px;line-height:1.6;background:var(--bt-sidebar);color:var(--bt-ink-2)}
+.bt-feishu-result[data-success=true]{color:var(--bt-ink);border:1px solid var(--bt-line)}.bt-feishu-error{color:#d33e4e;background:color-mix(in srgb,#e5484d 7%,var(--bt-card))}
+.bt-feishu-management{border-top:1px solid var(--bt-line);padding-top:8px}.bt-feishu-management>details+details{border-top:1px solid var(--bt-line)}
+.bt-feishu-management>details>summary{padding:12px 0;color:var(--bt-ink)}.bt-feishu-management>details[open]{display:flex;flex-direction:column;gap:10px;padding-bottom:14px}
+.bt-feishu-management>details>fieldset{min-width:0;margin:4px 0;padding:12px;border:1px solid var(--bt-line);border-radius:10px}.bt-feishu-management legend{font-size:12px;font-weight:600;padding-inline:4px}
+.bt-feishu-management fieldset>.bt-q-field+.bt-q-field{margin-top:10px}.bt-feishu-setup code,.bt-feishu-setup pre{white-space:pre-wrap;overflow-wrap:anywhere}.bt-feishu-setup ul{padding-left:18px;margin:4px 0}
+.bt-feishu-webhook{margin-top:18px;padding-top:10px;border-top:1px solid var(--bt-line)}.bt-feishu-webhook[open]{display:flex;flex-direction:column;gap:12px}.bt-feishu-webhook>summary{color:var(--bt-ink-2)}
+@container (max-width:640px){.bt-feishu-layout{display:flex;flex-direction:column;gap:18px}.bt-feishu-progress{width:100%}.bt-feishu-progress ol{flex-direction:row;gap:5px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.bt-feishu-progress li{flex:1}.bt-feishu-progress button{justify-content:center;padding:5px;gap:7px}.bt-feishu-step-label{display:none}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{display:block;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bt-feishu-progress li:has([aria-current=step]){flex:4}.bt-feishu-step{width:100%}.bt-feishu-header{flex-direction:column;gap:10px}.bt-feishu-header>.bt-input{max-width:100%;width:100%}}
+@container (max-width:340px){.bt-feishu-modes{gap:8px}.bt-feishu-modes button{padding:9px 10px}.bt-feishu-modes small{font-size:10px}.bt-feishu-permission{padding:8px}.bt-feishu-footer>div{gap:2px}.bt-feishu-footer .bt-feishu-button{padding-inline:9px}.bt-feishu-progress [aria-current=step] .bt-feishu-step-label{max-width:90px}}
.bt-connector-form-row{display:flex;align-items:center;gap:6px}
.bt-connector-apps{display:flex;flex-direction:column;gap:8px}
.bt-connector-link{flex:1;font-size:12px;color:var(--bt-ink-2)}
diff --git a/core/workbench-native.js b/core/workbench-native.js
index a08d7c6dc..0439d844c 100644
--- a/core/workbench-native.js
+++ b/core/workbench-native.js
@@ -1,4 +1,4 @@
-var FlyBotNativeConversation=(()=>{var vz=Object.create,ll=Object.freeze,gt=Object.defineProperty;var yz=Object.getOwnPropertyDescriptor;var _z=Object.getOwnPropertyNames;var wz=Object.getPrototypeOf,xz=Object.prototype.hasOwnProperty;var n1=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(a){throw n=[a],a}};var ye=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}},u1=(e,t)=>{for(var n in t)gt(e,n,{get:t[n],enumerable:!0})},pl=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _z(t))!xz.call(e,i)&&i!==n&>(e,i,{get:()=>t[i],enumerable:!(a=yz(t,i))||a.enumerable});return e};var U1=(e,t,n)=>(n=e!=null?vz(wz(e)):{},pl(t||!e||!e.__esModule?gt(n,"default",{value:e,enumerable:!0}):n,e)),kz=e=>pl(gt({},"__esModule",{value:!0}),e);var t1=(e,t)=>ll(gt(e,"raw",{value:ll(t||e.slice())}));var wl=ye(F1=>{"use strict";var bt=Symbol.for("react.element"),zz=Symbol.for("react.portal"),Cz=Symbol.for("react.fragment"),Az=Symbol.for("react.strict_mode"),Mz=Symbol.for("react.profiler"),$z=Symbol.for("react.provider"),Lz=Symbol.for("react.context"),Sz=Symbol.for("react.forward_ref"),Zz=Symbol.for("react.suspense"),Ez=Symbol.for("react.memo"),Fz=Symbol.for("react.lazy"),ul=Symbol.iterator;function jz(e){return e===null||typeof e!="object"?null:(e=ul&&e[ul]||e["@@iterator"],typeof e=="function"?e:null)}var hl={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},gl=Object.assign,bl={};function e5(e,t,n){this.props=e,this.context=t,this.refs=bl,this.updater=n||hl}e5.prototype.isReactComponent={};e5.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};e5.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function fl(){}fl.prototype=e5.prototype;function r9(e,t,n){this.props=e,this.context=t,this.refs=bl,this.updater=n||hl}var s9=r9.prototype=new fl;s9.constructor=r9;gl(s9,e5.prototype);s9.isPureReactComponent=!0;var ml=Array.isArray,vl=Object.prototype.hasOwnProperty,c9={current:null},yl={key:!0,ref:!0,__self:!0,__source:!0};function _l(e,t,n){var a,i={},r=null,s=null;if(t!=null)for(a in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(r=""+t.key),t)vl.call(t,a)&&!yl.hasOwnProperty(a)&&(i[a]=t[a]);var c=arguments.length-2;if(c===1)i.children=n;else if(1{"use strict";xl.exports=wl()});var Ip=ye(Y1=>{"use strict";function I9(e,t){var n=e.length;e.push(t);e:for(;0>>1,i=e[a];if(0>>1;aP7(c,n))oP7(l,c)?(e[a]=l,e[o]=n,a=o):(e[a]=c,e[s]=n,a=s);else if(oP7(l,n))e[a]=l,e[o]=n,a=o;else break e}}return t}function P7(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(Zp=performance,Y1.unstable_now=function(){return Zp.now()}):(T9=Date,Ep=T9.now(),Y1.unstable_now=function(){return T9.now()-Ep});var Zp,T9,Ep,_e=[],x3=[],WC=1,P2=null,W0=3,G7=!1,g4=!1,St=!1,Hp=typeof setTimeout=="function"?setTimeout:null,Np=typeof clearTimeout=="function"?clearTimeout:null,Fp=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function B9(e){for(var t=ae(x3);t!==null;){if(t.callback===null)D7(x3);else if(t.startTime<=e)D7(x3),t.sortIndex=t.expirationTime,I9(_e,t);else break;t=ae(x3)}}function P9(e){if(St=!1,B9(e),!g4)if(ae(_e)!==null)g4=!0,D9(R9);else{var t=ae(x3);t!==null&&G9(P9,t.startTime-e)}}function R9(e,t){g4=!1,St&&(St=!1,Np(Zt),Zt=-1),G7=!0;var n=W0;try{for(B9(t),P2=ae(_e);P2!==null&&(!(P2.expirationTime>t)||e&&!qp());){var a=P2.callback;if(typeof a=="function"){P2.callback=null,W0=P2.priorityLevel;var i=a(P2.expirationTime<=t);t=Y1.unstable_now(),typeof i=="function"?P2.callback=i:P2===ae(_e)&&D7(_e),B9(t)}else D7(_e);P2=ae(_e)}if(P2!==null)var r=!0;else{var s=ae(x3);s!==null&&G9(P9,s.startTime-t),r=!1}return r}finally{P2=null,W0=n,G7=!1}}var O7=!1,R7=null,Zt=-1,Tp=5,Vp=-1;function qp(){return!(Y1.unstable_now()-Vpe||125a?(e.sortIndex=n,I9(x3,e),ae(_e)===null&&e===ae(x3)&&(St?(Np(Zt),Zt=-1):St=!0,G9(P9,n-a))):(e.sortIndex=i,I9(_e,e),g4||G7||(g4=!0,D9(R9))),e};Y1.unstable_shouldYield=qp;Y1.unstable_wrapCallback=function(e){var t=W0;return function(){var n=W0;W0=t;try{return e.apply(this,arguments)}finally{W0=n}}}});var Pp=ye((oD,Bp)=>{"use strict";Bp.exports=Ip()});var Ud=ye(H2=>{"use strict";var Xu=g0(),F2=Pp();function K(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hi=Object.prototype.hasOwnProperty,UC=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Rp={},Dp={};function XC(e){return hi.call(Dp,e)?!0:hi.call(Rp,e)?!1:UC.test(e)?Dp[e]=!0:(Rp[e]=!0,!1)}function KC(e,t,n,a){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return a?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function YC(e,t,n,a){if(t===null||typeof t>"u"||KC(e,t,n,a))return!0;if(a)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function c2(e,t,n,a,i,r,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=a,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=r,this.removeEmptyString=s}var R0={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){R0[e]=new c2(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];R0[t]=new c2(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){R0[e]=new c2(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){R0[e]=new c2(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){R0[e]=new c2(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){R0[e]=new c2(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){R0[e]=new c2(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){R0[e]=new c2(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){R0[e]=new c2(e,5,!1,e.toLowerCase(),null,!1,!1)});var sr=/[\-:]([a-z])/g;function cr(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(sr,cr);R0[t]=new c2(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(sr,cr);R0[t]=new c2(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(sr,cr);R0[t]=new c2(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){R0[e]=new c2(e,1,!1,e.toLowerCase(),null,!1,!1)});R0.xlinkHref=new c2("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){R0[e]=new c2(e,1,!1,e.toLowerCase(),null,!0,!0)});function or(e,t,n,a){var i=R0.hasOwnProperty(t)?R0[t]:null;(i!==null?i.type!==0:a||!(2c||i[s]!==r[c]){var o="\n"+i[s].replace(" at new "," at ");return e.displayName&&o.includes("")&&(o=o.replace("",e.displayName)),o}while(1<=s&&0<=c);break}}}finally{W9=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?It(e):""}function QC(e){switch(e.tag){case 5:return It(e.type);case 16:return It("Lazy");case 13:return It("Suspense");case 19:return It("SuspenseList");case 0:case 2:case 15:return e=U9(e.type,!1),e;case 11:return e=U9(e.type.render,!1),e;case 1:return e=U9(e.type,!0),e;default:return""}}function vi(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case p5:return"Fragment";case l5:return"Portal";case gi:return"Profiler";case lr:return"StrictMode";case bi:return"Suspense";case fi:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Qu:return(e.displayName||"Context")+".Consumer";case Yu:return(e._context.displayName||"Context")+".Provider";case pr:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ur:return t=e.displayName||null,t!==null?t:vi(e.type)||"Memo";case z3:t=e._payload,e=e._init;try{return vi(e(t))}catch{}}return null}function JC(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return vi(t);case 8:return t===lr?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function V3(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function em(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function eA(e){var t=em(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,r=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){a=""+s,r.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(s){a=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function U7(e){e._valueTracker||(e._valueTracker=eA(e))}function tm(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=em(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function x8(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function yi(e,t){var n=t.checked;return l0({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Op(e,t){var n=t.defaultValue==null?"":t.defaultValue,a=t.checked!=null?t.checked:t.defaultChecked;n=V3(t.value!=null?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function nm(e,t){t=t.checked,t!=null&&or(e,"checked",t,!1)}function _i(e,t){nm(e,t);var n=V3(t.value),a=t.type;if(n!=null)a==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(a==="submit"||a==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?wi(e,t.type,n):t.hasOwnProperty("defaultValue")&&wi(e,t.type,V3(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Wp(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!(a!=="submit"&&a!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function wi(e,t,n){(t!=="number"||x8(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Bt=Array.isArray;function w5(e,t,n,a){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=X7.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function e6(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Dt={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},tA=["Webkit","ms","Moz","O"];Object.keys(Dt).forEach(function(e){tA.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Dt[t]=Dt[e]})});function sm(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Dt.hasOwnProperty(e)&&Dt[e]?(""+t).trim():t+"px"}function cm(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var a=n.indexOf("--")===0,i=sm(n,t[n],a);n==="float"&&(n="cssFloat"),a?e.setProperty(n,i):e[n]=i}}var nA=l0({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function zi(e,t){if(t){if(nA[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(K(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(K(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(K(61))}if(t.style!=null&&typeof t.style!="object")throw Error(K(62))}}function Ci(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ai=null;function mr(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Mi=null,x5=null,k5=null;function Kp(e){if(e=v6(e)){if(typeof Mi!="function")throw Error(K(280));var t=e.stateNode;t&&(t=K8(t),Mi(e.stateNode,e.type,t))}}function om(e){x5?k5?k5.push(e):k5=[e]:x5=e}function lm(){if(x5){var e=x5,t=k5;if(k5=x5=null,Kp(e),t)for(e=0;e>>=0,e===0?32:31-(dA(e)/hA|0)|0}var K7=64,Y7=4194304;function Pt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function A8(e,t){var n=e.pendingLanes;if(n===0)return 0;var a=0,i=e.suspendedLanes,r=e.pingedLanes,s=n&268435455;if(s!==0){var c=s&~i;c!==0?a=Pt(c):(r&=s,r!==0&&(a=Pt(r)))}else s=n&~i,s!==0?a=Pt(s):r!==0&&(a=Pt(r));if(a===0)return 0;if(t!==0&&t!==a&&(t&i)===0&&(i=a&-a,r=t&-t,i>=r||i===16&&(r&4194240)!==0))return t;if((a&4)!==0&&(a|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=a;0n;n++)t.push(e);return t}function b6(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-oe(t),e[t]=n}function vA(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var a=e.eventTimes;for(e=e.expirationTimes;0=Ot),ru=" ",su=!1;function Lm(e,t){switch(e){case"keyup":return OA.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Sm(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var u5=!1;function UA(e,t){switch(e){case"compositionend":return Sm(t);case"keypress":return t.which!==32?null:(su=!0,ru);case"textInput":return e=t.data,e===ru&&su?null:e;default:return null}}function XA(e,t){if(u5)return e==="compositionend"||!_r&&Lm(e,t)?(e=Mm(),d8=fr=$3=null,u5=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=lu(n)}}function jm(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?jm(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Hm(){for(var e=window,t=x8();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=x8(e.document)}return t}function wr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function iM(e){var t=Hm(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&jm(n.ownerDocument.documentElement,n)){if(a!==null&&wr(n)){if(t=a.start,e=a.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,r=Math.min(a.start,i);a=a.end===void 0?r:Math.min(a.end,i),!e.extend&&r>a&&(i=a,a=r,r=i),i=pu(n,r);var s=pu(n,a);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),r>a?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,m5=null,Fi=null,Ut=null,ji=!1;function uu(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ji||m5==null||m5!==x8(a)||(a=m5,"selectionStart"in a&&wr(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ut&&s6(Ut,a)||(Ut=a,a=L8(Fi,"onSelect"),0g5||(e.current=Ii[g5],Ii[g5]=null,g5--)}function Q1(e,t){g5++,Ii[g5]=e.current,e.current=t}var q3={},Y0=B3(q3),_2=B3(!1),k4=q3;function $5(e,t){var n=e.type.contextTypes;if(!n)return q3;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var i={},r;for(r in n)i[r]=t[r];return a&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function w2(e){return e=e.childContextTypes,e!=null}function Z8(){n0(_2),n0(Y0)}function _u(e,t,n){if(Y0.current!==q3)throw Error(K(168));Q1(Y0,t),Q1(_2,n)}function Dm(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,typeof a.getChildContext!="function")return n;a=a.getChildContext();for(var i in a)if(!(i in t))throw Error(K(108,JC(e)||"Unknown",i));return l0({},n,a)}function E8(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||q3,k4=Y0.current,Q1(Y0,e),Q1(_2,_2.current),!0}function wu(e,t,n){var a=e.stateNode;if(!a)throw Error(K(169));n?(e=Dm(e,t,k4),a.__reactInternalMemoizedMergedChildContext=e,n0(_2),n0(Y0),Q1(Y0,e)):n0(_2),Q1(_2,n)}var Re=null,Y8=!1,ri=!1;function Gm(e){Re===null?Re=[e]:Re.push(e)}function hM(e){Y8=!0,Gm(e)}function P3(){if(!ri&&Re!==null){ri=!0;var e=0,t=W1;try{var n=Re;for(W1=1;e>=s,i-=s,De=1<<32-oe(t)+i|n<N?(H=j,j=null):H=j.sibling;var S=m(v,j,_[N],z);if(S===null){j===null&&(j=H);break}e&&j&&S.alternate===null&&t(v,j),b=r(S,b,N),C===null?L=S:C.sibling=S,C=S,j=H}if(N===_.length)return n(v,j),a0&&b4(v,N),L;if(j===null){for(;N<_.length;N++)j=u(v,_[N],z),j!==null&&(b=r(j,b,N),C===null?L=j:C.sibling=j,C=j);return a0&&b4(v,N),L}for(j=a(v,j);N<_.length;N++)H=d(j,v,N,_[N],z),H!==null&&(e&&H.alternate!==null&&j.delete(H.key===null?N:H.key),b=r(H,b,N),C===null?L=H:C.sibling=H,C=H);return e&&j.forEach(function(R){return t(v,R)}),a0&&b4(v,N),L}function w(v,b,_,z){var L=Et(_);if(typeof L!="function")throw Error(K(150));if(_=L.call(_),_==null)throw Error(K(151));for(var C=L=null,j=b,N=b=0,H=null,S=_.next();j!==null&&!S.done;N++,S=_.next()){j.index>N?(H=j,j=null):H=j.sibling;var R=m(v,j,S.value,z);if(R===null){j===null&&(j=H);break}e&&j&&R.alternate===null&&t(v,j),b=r(R,b,N),C===null?L=R:C.sibling=R,C=R,j=H}if(S.done)return n(v,j),a0&&b4(v,N),L;if(j===null){for(;!S.done;N++,S=_.next())S=u(v,S.value,z),S!==null&&(b=r(S,b,N),C===null?L=S:C.sibling=S,C=S);return a0&&b4(v,N),L}for(j=a(v,j);!S.done;N++,S=_.next())S=d(j,v,N,S.value,z),S!==null&&(e&&S.alternate!==null&&j.delete(S.key===null?N:S.key),b=r(S,b,N),C===null?L=S:C.sibling=S,C=S);return e&&j.forEach(function(B){return t(v,B)}),a0&&b4(v,N),L}function k(v,b,_,z){if(typeof _=="object"&&_!==null&&_.type===p5&&_.key===null&&(_=_.props.children),typeof _=="object"&&_!==null){switch(_.$$typeof){case W7:e:{for(var L=_.key,C=b;C!==null;){if(C.key===L){if(L=_.type,L===p5){if(C.tag===7){n(v,C.sibling),b=i(C,_.props.children),b.return=v,v=b;break e}}else if(C.elementType===L||typeof L=="object"&&L!==null&&L.$$typeof===z3&&$u(L)===C.type){n(v,C.sibling),b=i(C,_.props),b.ref=Nt(v,C,_),b.return=v,v=b;break e}n(v,C);break}else t(v,C);C=C.sibling}_.type===p5?(b=x4(_.props.children,v.mode,z,_.key),b.return=v,v=b):(z=w8(_.type,_.key,_.props,null,v.mode,z),z.ref=Nt(v,b,_),z.return=v,v=z)}return s(v);case l5:e:{for(C=_.key;b!==null;){if(b.key===C)if(b.tag===4&&b.stateNode.containerInfo===_.containerInfo&&b.stateNode.implementation===_.implementation){n(v,b.sibling),b=i(b,_.children||[]),b.return=v,v=b;break e}else{n(v,b);break}else t(v,b);b=b.sibling}b=di(_,v.mode,z),b.return=v,v=b}return s(v);case z3:return C=_._init,k(v,b,C(_._payload),z)}if(Bt(_))return f(v,b,_,z);if(Et(_))return w(v,b,_,z);o8(v,_)}return typeof _=="string"&&_!==""||typeof _=="number"?(_=""+_,b!==null&&b.tag===6?(n(v,b.sibling),b=i(b,_),b.return=v,v=b):(n(v,b),b=mi(_,v.mode,z),b.return=v,v=b),s(v)):n(v,b)}return k}var S5=Jm(!0),ed=Jm(!1),y6={},Ce=B3(y6),p6=B3(y6),u6=B3(y6);function _4(e){if(e===y6)throw Error(K(174));return e}function Sr(e,t){switch(Q1(u6,t),Q1(p6,e),Q1(Ce,y6),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ki(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=ki(t,e)}n0(Ce),Q1(Ce,t)}function Z5(){n0(Ce),n0(p6),n0(u6)}function td(e){_4(u6.current);var t=_4(Ce.current),n=ki(t,e.type);t!==n&&(Q1(p6,e),Q1(Ce,n))}function Zr(e){p6.current===e&&(n0(Ce),n0(p6))}var c0=B3(0);function V8(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var si=[];function Er(){for(var e=0;en?n:4,e(!0);var a=ci.transition;ci.transition={};try{e(!1),t()}finally{W1=n,ci.transition=a}}function fd(){return U2().memoizedState}function vM(e,t,n){var a=N3(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},vd(e))yd(t,n);else if(n=Xm(e,t,n,a),n!==null){var i=s2();le(n,e,a,i),_d(n,t,a)}}function yM(e,t,n){var a=N3(e),i={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(vd(e))yd(t,i);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=t.lastRenderedReducer,r!==null))try{var s=t.lastRenderedState,c=r(s,n);if(i.hasEagerState=!0,i.eagerState=c,pe(c,s)){var o=t.interleaved;o===null?(i.next=i,$r(t)):(i.next=o.next,o.next=i),t.interleaved=i;return}}catch{}n=Xm(e,t,i,a),n!==null&&(i=s2(),le(n,e,a,i),_d(n,t,a))}}function vd(e){var t=e.alternate;return e===o0||t!==null&&t===o0}function yd(e,t){Xt=q8=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function _d(e,t,n){if((n&4194240)!==0){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,hr(e,n)}}var I8={readContext:W2,useCallback:U0,useContext:U0,useEffect:U0,useImperativeHandle:U0,useInsertionEffect:U0,useLayoutEffect:U0,useMemo:U0,useReducer:U0,useRef:U0,useState:U0,useDebugValue:U0,useDeferredValue:U0,useTransition:U0,useMutableSource:U0,useSyncExternalStore:U0,useId:U0,unstable_isNewReconciler:!1},_M={readContext:W2,useCallback:function(e,t){return xe().memoizedState=[e,t===void 0?null:t],e},useContext:W2,useEffect:Su,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,f8(4194308,4,md.bind(null,t,e),n)},useLayoutEffect:function(e,t){return f8(4194308,4,e,t)},useInsertionEffect:function(e,t){return f8(4,2,e,t)},useMemo:function(e,t){var n=xe();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=xe();return t=n!==void 0?n(t):t,a.memoizedState=a.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},a.queue=e,e=e.dispatch=vM.bind(null,o0,e),[a.memoizedState,e]},useRef:function(e){var t=xe();return e={current:e},t.memoizedState=e},useState:Lu,useDebugValue:Tr,useDeferredValue:function(e){return xe().memoizedState=e},useTransition:function(){var e=Lu(!1),t=e[0];return e=fM.bind(null,e[1]),xe().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=o0,i=xe();if(a0){if(n===void 0)throw Error(K(407));n=n()}else{if(n=t(),V0===null)throw Error(K(349));(C4&30)!==0||id(a,t,n)}i.memoizedState=n;var r={value:n,getSnapshot:t};return i.queue=r,Su(sd.bind(null,a,r,e),[e]),a.flags|=2048,h6(9,rd.bind(null,a,r,n,t),void 0,null),n},useId:function(){var e=xe(),t=V0.identifierPrefix;if(a0){var n=Ge,a=De;n=(a&~(1<<32-oe(a)-1)).toString(32)+n,t=":"+t+"R"+n,n=m6++,0<\/script>",e=e.removeChild(e.firstChild)):typeof a.is=="string"?e=s.createElement(n,{is:a.is}):(e=s.createElement(n),n==="select"&&(s=e,a.multiple?s.multiple=!0:a.size&&(s.size=a.size))):e=s.createElementNS(e,n),e[ke]=t,e[l6]=a,Ld(e,t,!1,!1),t.stateNode=e;e:{switch(s=Ci(n,a),n){case"dialog":t0("cancel",e),t0("close",e),i=a;break;case"iframe":case"object":case"embed":t0("load",e),i=a;break;case"video":case"audio":for(i=0;iF5&&(t.flags|=128,a=!0,Tt(r,!1),t.lanes=4194304)}else{if(!a)if(e=V8(s),e!==null){if(t.flags|=128,a=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Tt(r,!0),r.tail===null&&r.tailMode==="hidden"&&!s.alternate&&!a0)return X0(t),null}else 2*x0()-r.renderingStartTime>F5&&n!==1073741824&&(t.flags|=128,a=!0,Tt(r,!1),t.lanes=4194304);r.isBackwards?(s.sibling=t.child,t.child=s):(n=r.last,n!==null?n.sibling=s:t.child=s,r.last=s)}return r.tail!==null?(t=r.tail,r.rendering=t,r.tail=t.sibling,r.renderingStartTime=x0(),t.sibling=null,n=c0.current,Q1(c0,a?n&1|2:n&1),t):(X0(t),null);case 22:case 23:return Rr(),a=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==a&&(t.flags|=8192),a&&(t.mode&1)!==0?(S2&1073741824)!==0&&(X0(t),t.subtreeFlags&6&&(t.flags|=8192)):X0(t),null;case 24:return null;case 25:return null}throw Error(K(156,t.tag))}function $M(e,t){switch(kr(t),t.tag){case 1:return w2(t.type)&&Z8(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Z5(),n0(_2),n0(Y0),Er(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Zr(t),null;case 13:if(n0(c0),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(K(340));L5()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return n0(c0),null;case 4:return Z5(),null;case 10:return Mr(t.type._context),null;case 22:case 23:return Rr(),null;case 24:return null;default:return null}}var p8=!1,K0=!1,LM=typeof WeakSet=="function"?WeakSet:Set,p1=null;function y5(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(a){b0(e,t,a)}else n.current=null}function Qi(e,t,n){try{n()}catch(a){b0(e,t,a)}}var qu=!1;function SM(e,t){if(Hi=M8,e=Hm(),wr(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var i=a.anchorOffset,r=a.focusNode;a=a.focusOffset;try{n.nodeType,r.nodeType}catch{n=null;break e}var s=0,c=-1,o=-1,l=0,p=0,u=e,m=null;t:for(;;){for(var d;u!==n||i!==0&&u.nodeType!==3||(c=s+i),u!==r||a!==0&&u.nodeType!==3||(o=s+a),u.nodeType===3&&(s+=u.nodeValue.length),(d=u.firstChild)!==null;)m=u,u=d;for(;;){if(u===e)break t;if(m===n&&++l===i&&(c=s),m===r&&++p===a&&(o=s),(d=u.nextSibling)!==null)break;u=m,m=u.parentNode}u=d}n=c===-1||o===-1?null:{start:c,end:o}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ni={focusedElem:e,selectionRange:n},M8=!1,p1=t;p1!==null;)if(t=p1,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,p1=e;else for(;p1!==null;){t=p1;try{var f=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(f!==null){var w=f.memoizedProps,k=f.memoizedState,v=t.stateNode,b=v.getSnapshotBeforeUpdate(t.elementType===t.type?w:re(t.type,w),k);v.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var _=t.stateNode.containerInfo;_.nodeType===1?_.textContent="":_.nodeType===9&&_.documentElement&&_.removeChild(_.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(K(163))}}catch(z){b0(t,t.return,z)}if(e=t.sibling,e!==null){e.return=t.return,p1=e;break}p1=t.return}return f=qu,qu=!1,f}function Kt(e,t,n){var a=t.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var i=a=a.next;do{if((i.tag&e)===e){var r=i.destroy;i.destroy=void 0,r!==void 0&&Qi(t,n,r)}i=i.next}while(i!==a)}}function en(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var a=n.create;n.destroy=a()}n=n.next}while(n!==t)}}function Ji(e){var t=e.ref;if(t!==null){var n=e.stateNode;e.tag,e=n,typeof t=="function"?t(e):t.current=e}}function Ed(e){var t=e.alternate;t!==null&&(e.alternate=null,Ed(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ke],delete t[l6],delete t[qi],delete t[mM],delete t[dM])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Fd(e){return e.tag===5||e.tag===3||e.tag===4}function Iu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Fd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function er(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=S8));else if(a!==4&&(e=e.child,e!==null))for(er(e,t,n),e=e.sibling;e!==null;)er(e,t,n),e=e.sibling}function tr(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(a!==4&&(e=e.child,e!==null))for(tr(e,t,n),e=e.sibling;e!==null;)tr(e,t,n),e=e.sibling}var B0=null,se=!1;function k3(e,t,n){for(n=n.child;n!==null;)jd(e,t,n),n=n.sibling}function jd(e,t,n){if(ze&&typeof ze.onCommitFiberUnmount=="function")try{ze.onCommitFiberUnmount(O8,n)}catch{}switch(n.tag){case 5:K0||y5(n,t);case 6:var a=B0,i=se;B0=null,k3(e,t,n),B0=a,se=i,B0!==null&&(se?(e=B0,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):B0.removeChild(n.stateNode));break;case 18:B0!==null&&(se?(e=B0,n=n.stateNode,e.nodeType===8?ii(e.parentNode,n):e.nodeType===1&&ii(e,n),i6(e)):ii(B0,n.stateNode));break;case 4:a=B0,i=se,B0=n.stateNode.containerInfo,se=!0,k3(e,t,n),B0=a,se=i;break;case 0:case 11:case 14:case 15:if(!K0&&(a=n.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){i=a=a.next;do{var r=i,s=r.destroy;r=r.tag,s!==void 0&&((r&2)!==0||(r&4)!==0)&&Qi(n,t,s),i=i.next}while(i!==a)}k3(e,t,n);break;case 1:if(!K0&&(y5(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(c){b0(n,t,c)}k3(e,t,n);break;case 21:k3(e,t,n);break;case 22:n.mode&1?(K0=(a=K0)||n.memoizedState!==null,k3(e,t,n),K0=a):k3(e,t,n);break;default:k3(e,t,n)}}function Bu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new LM),t.forEach(function(a){var i=qM.bind(null,e,a);n.has(a)||(n.add(a),a.then(i,i))})}}function ie(e,t){var n=t.deletions;if(n!==null)for(var a=0;ai&&(i=s),a&=~r}if(a=i,a=x0()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*EM(a/1960))-a,10e?16:e,L3===null)var a=!1;else{if(e=L3,L3=null,R8=0,(V1&6)!==0)throw Error(K(331));var i=V1;for(V1|=4,p1=e.current;p1!==null;){var r=p1,s=r.child;if((p1.flags&16)!==0){var c=r.deletions;if(c!==null){for(var o=0;ox0()-Br?w4(e,0):Ir|=n),x2(e,t)}function Pd(e,t){t===0&&((e.mode&1)===0?t=1:(t=Y7,Y7<<=1,(Y7&130023424)===0&&(Y7=4194304)));var n=s2();e=Xe(e,t),e!==null&&(b6(e,t,n),x2(e,n))}function VM(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Pd(e,n)}function qM(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(K(314))}a!==null&&a.delete(t),Pd(e,n)}var Rd;Rd=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||_2.current)y2=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return y2=!1,AM(e,t,n);y2=(e.flags&131072)!==0}else y2=!1,a0&&(t.flags&1048576)!==0&&Om(t,j8,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;v8(e,t),e=t.pendingProps;var i=$5(t,Y0.current);C5(t,n),i=jr(null,t,a,e,i,n);var r=Hr();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,w2(a)?(r=!0,E8(t)):r=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Lr(t),i.updater=Q8,t.stateNode=i,i._reactInternals=t,Gi(t,a,e,n),t=Ui(null,t,a,!0,r,n)):(t.tag=0,a0&&r&&xr(t),r2(null,t,i,n),t=t.child),t;case 16:a=t.elementType;e:{switch(v8(e,t),e=t.pendingProps,i=a._init,a=i(a._payload),t.type=a,i=t.tag=BM(a),e=re(a,e),i){case 0:t=Wi(null,t,a,e,n);break e;case 1:t=Nu(null,t,a,e,n);break e;case 11:t=ju(null,t,a,e,n);break e;case 14:t=Hu(null,t,a,re(a.type,e),n);break e}throw Error(K(306,a,""))}return t;case 0:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:re(a,i),Wi(e,t,a,i,n);case 1:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:re(a,i),Nu(e,t,a,i,n);case 3:e:{if(Ad(t),e===null)throw Error(K(387));a=t.pendingProps,r=t.memoizedState,i=r.element,Km(e,t),T8(t,a,null,n);var s=t.memoizedState;if(a=s.element,r.isDehydrated)if(r={element:a,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=r,t.memoizedState=r,t.flags&256){i=E5(Error(K(423)),t),t=Tu(e,t,a,n,i);break e}else if(a!==i){i=E5(Error(K(424)),t),t=Tu(e,t,a,n,i);break e}else for(Z2=F3(t.stateNode.containerInfo.firstChild),E2=t,a0=!0,ce=null,n=ed(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(L5(),a===i){t=Ke(e,t,n);break e}r2(e,t,a,n)}t=t.child}return t;case 5:return td(t),e===null&&Pi(t),a=t.type,i=t.pendingProps,r=e!==null?e.memoizedProps:null,s=i.children,Ti(a,i)?s=null:r!==null&&Ti(a,r)&&(t.flags|=32),Cd(e,t),r2(e,t,s,n),t.child;case 6:return e===null&&Pi(t),null;case 13:return Md(e,t,n);case 4:return Sr(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=S5(t,null,a,n):r2(e,t,a,n),t.child;case 11:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:re(a,i),ju(e,t,a,i,n);case 7:return r2(e,t,t.pendingProps,n),t.child;case 8:return r2(e,t,t.pendingProps.children,n),t.child;case 12:return r2(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,i=t.pendingProps,r=t.memoizedProps,s=i.value,Q1(H8,a._currentValue),a._currentValue=s,r!==null)if(pe(r.value,s)){if(r.children===i.children&&!_2.current){t=Ke(e,t,n);break e}}else for(r=t.child,r!==null&&(r.return=t);r!==null;){var c=r.dependencies;if(c!==null){s=r.child;for(var o=c.firstContext;o!==null;){if(o.context===a){if(r.tag===1){o=Oe(-1,n&-n),o.tag=2;var l=r.updateQueue;if(l!==null){l=l.shared;var p=l.pending;p===null?o.next=o:(o.next=p.next,p.next=o),l.pending=o}}r.lanes|=n,o=r.alternate,o!==null&&(o.lanes|=n),Ri(r.return,n,t),c.lanes|=n;break}o=o.next}}else if(r.tag===10)s=r.type===t.type?null:r.child;else if(r.tag===18){if(s=r.return,s===null)throw Error(K(341));s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),Ri(s,n,t),s=r.sibling}else s=r.child;if(s!==null)s.return=r;else for(s=r;s!==null;){if(s===t){s=null;break}if(r=s.sibling,r!==null){r.return=s.return,s=r;break}s=s.return}r=s}r2(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,a=t.pendingProps.children,C5(t,n),i=W2(i),a=a(i),t.flags|=1,r2(e,t,a,n),t.child;case 14:return a=t.type,i=re(a,t.pendingProps),i=re(a.type,i),Hu(e,t,a,i,n);case 15:return kd(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:re(a,i),v8(e,t),t.tag=1,w2(a)?(e=!0,E8(t)):e=!1,C5(t,n),Qm(t,a,i),Gi(t,a,i,n),Ui(null,t,a,!0,e,n);case 19:return $d(e,t,n);case 22:return zd(e,t,n)}throw Error(K(156,t.tag))};function Dd(e,t){return bm(e,t)}function IM(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function G2(e,t,n,a){return new IM(e,t,n,a)}function Gr(e){return e=e.prototype,!(!e||!e.isReactComponent)}function BM(e){if(typeof e=="function")return Gr(e)?1:0;if(e!=null){if(e=e.$$typeof,e===pr)return 11;if(e===ur)return 14}return 2}function T3(e,t){var n=e.alternate;return n===null?(n=G2(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function w8(e,t,n,a,i,r){var s=2;if(a=e,typeof e=="function")Gr(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case p5:return x4(n.children,i,r,t);case lr:s=8,i|=8;break;case gi:return e=G2(12,n,t,i|2),e.elementType=gi,e.lanes=r,e;case bi:return e=G2(13,n,t,i),e.elementType=bi,e.lanes=r,e;case fi:return e=G2(19,n,t,i),e.elementType=fi,e.lanes=r,e;case Ju:return nn(n,i,r,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Yu:s=10;break e;case Qu:s=9;break e;case pr:s=11;break e;case ur:s=14;break e;case z3:s=16,a=null;break e}throw Error(K(130,e==null?e:typeof e,""))}return t=G2(s,n,t,i),t.elementType=e,t.type=a,t.lanes=r,t}function x4(e,t,n,a){return e=G2(7,e,a,t),e.lanes=n,e}function nn(e,t,n,a){return e=G2(22,e,a,t),e.elementType=Ju,e.lanes=n,e.stateNode={isHidden:!1},e}function mi(e,t,n){return e=G2(6,e,null,t),e.lanes=n,e}function di(e,t,n){return t=G2(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function PM(e,t,n,a,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=K9(0),this.expirationTimes=K9(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=K9(0),this.identifierPrefix=a,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Or(e,t,n,a,i,r,s,c,o){return e=new PM(e,t,n,c,o),t===1?(t=1,r===!0&&(t|=8)):t=0,r=G2(3,null,null,t),e.current=r,r.stateNode=e,r.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Lr(r),e}function RM(e,t,n){var a=3{"use strict";function Xd(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Xd)}catch(e){console.error(e)}}Xd(),Kd.exports=Ud()});var Qd=ye(on=>{"use strict";var UM=g0(),XM=Symbol.for("react.element"),KM=Symbol.for("react.fragment"),YM=Object.prototype.hasOwnProperty,QM=UM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,JM={key:!0,ref:!0,__self:!0,__source:!0};function Yd(e,t,n){var a,i={},r=null,s=null;n!==void 0&&(r=""+n),t.key!==void 0&&(r=""+t.key),t.ref!==void 0&&(s=t.ref);for(a in t)YM.call(t,a)&&!JM.hasOwnProperty(a)&&(i[a]=t[a]);if(e&&e.defaultProps)for(a in t=e.defaultProps,t)i[a]===void 0&&(i[a]=t[a]);return{$$typeof:XM,type:e,key:r,ref:s,props:i,_owner:QM.current}}on.Fragment=KM;on.jsx=Yd;on.jsxs=Yd});var eh=ye((mD,Jd)=>{"use strict";Jd.exports=Qd()});var rE,K3,P6=n1(()=>{rE=Object.freeze(JSON.parse('{"displayName":"TypeScript","name":"typescript","patterns":[{"include":"#directives"},{"include":"#statements"},{"include":"#shebang"}],"repository":{"access-modifier":{"match":"(??\\\\[]|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^yield|[^$._[:alnum:]]yield|^throw|[^$._[:alnum:]]throw|^in|[^$._[:alnum:]]in|^of|[^$._[:alnum:]]of|^typeof|[^$._[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.objectliteral.ts","patterns":[{"include":"#object-member"}]},"array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.ts"},"2":{"name":"punctuation.definition.binding-pattern.array.ts"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.ts"}},"patterns":[{"include":"#binding-element"},{"include":"#punctuation-comma"}]},"array-binding-pattern-const":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.ts"},"2":{"name":"punctuation.definition.binding-pattern.array.ts"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.ts"}},"patterns":[{"include":"#binding-element-const"},{"include":"#punctuation-comma"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"variable.parameter.ts"}},"match":"(?:(?)","name":"meta.arrow.ts"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","beginCaptures":{"1":{"name":"storage.modifier.async.ts"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.arrow.ts","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.ts","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"begin":"(?<=\\\\))\\\\s*(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.return.type.arrow.ts","patterns":[{"include":"#arrow-return-type-body"}]},"arrow-return-type-body":{"patterns":[{"begin":"(?<=:)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"async-modifier":{"match":"(?)","name":"cast.expr.ts"},{"begin":"(??^|]|[^$_[:alnum:]](?:\\\\+\\\\+|--)|[^+]\\\\+|[^-]-)\\\\s*(<)(?!=)(?!\\\\s*$)","beginCaptures":{"1":{"name":"meta.brace.angle.ts"}},"end":"(>)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]},{"begin":"(?<=^)\\\\s*(<)(?=[$_[:alpha:]][$_[:alnum:]]*\\\\s*>)","beginCaptures":{"1":{"name":"meta.brace.angle.ts"}},"end":"(>)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]}]},"class-declaration":{"begin":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.ts"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.ts","patterns":[{"begin":"(<)(reference|amd-dependency|amd-module)","beginCaptures":{"1":{"name":"punctuation.definition.tag.directive.ts"},"2":{"name":"entity.name.tag.directive.ts"}},"end":"/>","endCaptures":{"0":{"name":"punctuation.definition.tag.directive.ts"}},"name":"meta.tag.ts","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"5":{"name":"constant.other.email.link.underline.jsdoc"},"6":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"match":"((@)author)\\\\s+([^*/<>@\\\\s](?:[^*/<>@]|\\\\*[^/])*)(?:\\\\s*(<)([^>\\\\s]+)(>))?"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"begin":"\\\\G(<)caption(>)","beginCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"contentName":"constant.other.description.jsdoc","end":"()caption(>)|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.ts"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)kind)\\\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"begin":"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"captures":{"1":{"name":"punctuation.definition.optional-value.begin.bracket.square.jsdoc"},"2":{"name":"keyword.operator.assignment.jsdoc"},"3":{"name":"source.embedded.ts"},"4":{"name":"punctuation.definition.optional-value.end.bracket.square.jsdoc"},"5":{"name":"invalid.illegal.syntax.jsdoc"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\\\s+((?:[^*@{}\\\\s]|\\\\*[^/])+)"},{"begin":"((@)(?:default(?:value)?|license|version))\\\\s+(([\\"\']))","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"},"4":{"name":"punctuation.definition.string.begin.jsdoc"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\\\b","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"keyword.operator.rest.ts"},"3":{"name":"variable.parameter.ts variable.language.this.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(??}]|\\\\|\\\\||&&|!==|$|((?>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"keyword.operator.assignment.compound.ts"},"3":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"expressionWithoutIdentifiers":{"patterns":[{"include":"#string"},{"include":"#regex"},{"include":"#comment"},{"include":"#function-expression"},{"include":"#class-expression"},{"include":"#arrow-function"},{"include":"#paren-expression-possibly-arrow"},{"include":"#cast"},{"include":"#ternary-expression"},{"include":"#new-expr"},{"include":"#instanceof-expr"},{"include":"#object-literal"},{"include":"#expression-operators"},{"include":"#function-call"},{"include":"#literal"},{"include":"#support-objects"},{"include":"#paren-expression"}]},"field-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.ts variable.object.property.ts"},{"match":"\\\\?","name":"keyword.operator.optional.ts"},{"match":"!","name":"keyword.operator.definiteassignment.ts"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","end":"(?<=\\\\))(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","name":"meta.function-call.ts","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"},{"include":"#paren-expression"}]},{"begin":"(?=(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","end":"(?<=>)(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.ts","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.ts punctuation.accessor.optional.ts"},{"match":"!","name":"meta.function-call.ts keyword.operator.definiteassignment.ts"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"}]},"function-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.constant.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.ts"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"storage.modifier.ts"},"4":{"name":"storage.modifier.async.ts"},"5":{"name":"keyword.operator.new.ts"},"6":{"name":"keyword.generator.asterisk.ts"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"storage.modifier.ts"},"4":{"name":"storage.modifier.async.ts"},"5":{"name":"storage.type.property.ts"},"6":{"name":"keyword.generator.asterisk.ts"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"storage.type.property.ts"},"3":{"name":"keyword.generator.asterisk.ts"}},"end":"(?=[,;}])|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"storage.type.property.ts"},"3":{"name":"keyword.generator.asterisk.ts"}},"end":"(?=[(<])","patterns":[{"include":"#method-declaration-name"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.ts"},{"captures":{"0":{"name":"meta.object-literal.key.ts"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.ts"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.ts"}},"end":"(?=[,}])","name":"meta.object.member.ts","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.ts"},{"captures":{"1":{"name":"keyword.control.as.ts"},"2":{"name":"storage.modifier.ts"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.ts"}},"end":"(?<=\\\\))","patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(?=<\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.ts"}},"end":"(?<=>)","patterns":[{"include":"#type-parameters"}]},{"begin":"(?<=>)\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"include":"#possibly-arrow-return-type"},{"include":"#expression"}]},{"include":"#punctuation-comma"},{"include":"#decl-block"}]},"parameter-array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.ts"},"2":{"name":"punctuation.definition.binding-pattern.array.ts"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.ts"}},"patterns":[{"include":"#parameter-binding-element"},{"include":"#punctuation-comma"}]},"parameter-binding-element":{"patterns":[{"include":"#comment"},{"include":"#string"},{"include":"#numeric-literal"},{"include":"#regex"},{"include":"#parameter-object-binding-pattern"},{"include":"#parameter-array-binding-pattern"},{"include":"#destructuring-parameter-rest"},{"include":"#variable-initializer"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"}},"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"keyword.operator.rest.ts"},"3":{"name":"variable.parameter.ts variable.language.this.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(?])","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression"}]},"paren-expression-possibly-arrow":{"patterns":[{"begin":"(?<=[(,=])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.ts"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"begin":"(?<=[(,=]|=>|^return|[^$._[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)))\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.ts"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"include":"#possibly-arrow-return-type"}]},"paren-expression-possibly-arrow-with-typeparameters":{"patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts"}},"contentName":"meta.arrow.ts meta.return.type.arrow.ts","end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","patterns":[{"include":"#arrow-return-type-body"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.ts"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"keyword.other.ts"}},"name":"string.regexp.ts","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","beginCaptures":{"0":{"name":"punctuation.definition.group.regexp"},"1":{"name":"punctuation.definition.group.no-capture.regexp"},"2":{"name":"variable.other.regexp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.regexp"}},"name":"meta.group.regexp","patterns":[{"include":"#regexp"}]},{"begin":"(\\\\[)(\\\\^)?","beginCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"},"2":{"name":"keyword.operator.negation.regexp"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"}},"name":"constant.other.character-class.set.regexp","patterns":[{"captures":{"1":{"name":"constant.character.numeric.regexp"},"2":{"name":"constant.character.control.regexp"},"3":{"name":"constant.character.escape.backslash.regexp"},"4":{"name":"constant.character.numeric.regexp"},"5":{"name":"constant.character.control.regexp"},"6":{"name":"constant.character.escape.backslash.regexp"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\()|(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$))"},{"captures":{"1":{"name":"support.type.object.module.ts"},"2":{"name":"support.type.object.module.ts"},"3":{"name":"punctuation.accessor.ts"},"4":{"name":"punctuation.accessor.optional.ts"},"5":{"name":"support.type.object.module.ts"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#type-arguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#type-arguments"}]}]},"template-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#template-type-substitution-element"},{"include":"#string-character-escape"}]}]},"template-type-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.ts","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.ts","patterns":[{"include":"#type-function-return-type-core"}]}]},"type-function-return-type-core":{"patterns":[{"include":"#comment"},{"begin":"(?<==>)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"type-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.ts"},"2":{"name":"entity.name.type.ts"},"3":{"name":"keyword.operator.expression.extends.ts"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.ts"}},"patterns":[{"include":"#type-arguments-body"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<)","beginCaptures":{"1":{"name":"entity.name.type.ts"},"2":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts"}},"contentName":"meta.type.parameters.ts","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.ts"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"},"3":{"name":"punctuation.accessor.optional.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#comment"},{"include":"#method-declaration"},{"include":"#indexer-declaration"},{"include":"#indexer-mapped-type-declaration"},{"include":"#field-declaration"},{"include":"#type-annotation"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.ts"}},"end":"(?=[,;}]|$)|(?<=})","patterns":[{"include":"#type"}]},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"},{"include":"#type"}]},"type-operators":{"patterns":[{"include":"#typeof-operator"},{"include":"#type-infer"},{"begin":"([\\\\&|])(?=\\\\s*\\\\{)","beginCaptures":{"0":{"name":"keyword.operator.type.ts"}},"end":"(?<=})","patterns":[{"include":"#type-object"}]},{"begin":"[\\\\&|]","beginCaptures":{"0":{"name":"keyword.operator.type.ts"}},"end":"(?=\\\\S)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.ts"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"keyword.operator.rest.ts"},"3":{"name":"entity.name.function.ts variable.language.this.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(?)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"keyword.operator.rest.ts"},"3":{"name":"variable.parameter.ts variable.language.this.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(??{|}]|(extends\\\\s+)|$|;|^\\\\s*$|^\\\\s*(?:abstract|async|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|var|while)\\\\b)","patterns":[{"include":"#type-arguments"},{"include":"#expression"}]},"undefined-literal":{"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts"}},"end":"(?=$|^|[,;=}]|((?)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts entity.name.function.ts"},"2":{"name":"keyword.operator.definiteassignment.ts"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|^|[]),;}]|((?{sE=Object.freeze(JSON.parse('{"displayName":"Shell","name":"shellscript","patterns":[{"include":"#initial_context"}],"repository":{"alias_statement":{"begin":"[\\\\t ]*+(alias)[\\\\t ]*+((?:((?\\\\\\\\`|]+(?!>))"},{"include":"#normal_context"}]},"arithmetic_double":{"patterns":[{"begin":"\\\\(\\\\(","beginCaptures":{"0":{"name":"punctuation.section.arithmetic.double.shell"}},"end":"\\\\)\\\\s*\\\\)","endCaptures":{"0":{"name":"punctuation.section.arithmetic.double.shell"}},"name":"meta.arithmetic.shell","patterns":[{"include":"#math"},{"include":"#string"}]}]},"arithmetic_no_dollar":{"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.arithmetic.single.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arithmetic.single.shell"}},"name":"meta.arithmetic.shell","patterns":[{"include":"#math"},{"include":"#string"}]}]},"array_access_inline":{"captures":{"1":{"name":"punctuation.section.array.shell"},"2":{"patterns":[{"include":"#special_expansion"},{"include":"#string"},{"include":"#variable"}]},"3":{"name":"punctuation.section.array.shell"}},"match":"(\\\\[)([^]\\\\[]+)(])"},"array_value":{"begin":"[\\\\t ]*+((?\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?:((?<=^|[\\\\t \\\\&;])(?:readonly|declare|typeset|export|local)(?=[\\\\t \\\\&;]|$))|((?![\\"\']|\\\\\\\\\\\\n?$)[^\\\\t\\\\n\\\\r !\\"\'<>]+?))(?:(?=[\\\\t ])|(?=[\\\\n\\\\&);`{|}]|[\\\\t ]*#|])(?`{|]+)"},{"begin":"(?:\\\\G|(?\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?!\\\\\\\\\\\\n?$)","beginCaptures":{},"end":"(?=[\\\\n\\\\&);`{|}]|[\\\\t ]*#|])(?]|&&|\\\\|\\\\|","name":"keyword.operator.logical.shell"},{"match":"(?[=>]?|==|!=|^|\\\\|{1,2}|&{1,2}|[,:=?]|[-%\\\\&*+/^|]=|<<=|>>=","name":"keyword.operator.arithmetic.shell"},{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.shell"},{"match":";","name":"punctuation.separator.semicolon.range"},{"match":"0\\\\d+","name":"constant.numeric.octal.shell"},{"match":"\\\\d{1,2}#[0-9@-Z_a-z]+","name":"constant.numeric.other.shell"},{"match":"\\\\d+","name":"constant.numeric.integer.shell"},{"match":"(?[=>]?|==|!=|^|\\\\|{1,2}|&{1,2}|[,:=?]|[-%\\\\&*+/^|]=|<<=|>>=","name":"keyword.operator.arithmetic.shell"},{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.shell"},{"match":"0\\\\d+","name":"constant.numeric.octal.shell"},{"match":"\\\\d{1,2}#[0-9@-Z_a-z]+","name":"constant.numeric.other.shell"},{"match":"\\\\d+","name":"constant.numeric.integer.shell"}]},"misc_ranges":{"patterns":[{"include":"#logical_expression_single"},{"include":"#logical_expression_double"},{"include":"#subshell_dollar"},{"begin":"(?\\\\[{|]|$|[\\\\t ;]))","beginCaptures":{"1":{"name":"string.unquoted.argument.shell constant.other.option.dash.shell"},"2":{"name":"string.unquoted.argument.shell constant.other.option.shell"}},"contentName":"string.unquoted.argument constant.other.option","end":"(?=[\\\\t ])|(?=[\\\\n\\\\&);`{|}]|[\\\\t ]*#|])(?>?)[\\\\t ]*+([^\\\\t\\\\n \\"$\\\\&-);<>\\\\\\\\`|]+)"},"redirect_number":{"captures":{"1":{"name":"keyword.operator.redirect.stdout.shell"},"2":{"name":"keyword.operator.redirect.stderr.shell"},"3":{"name":"keyword.operator.redirect.$3.shell"}},"match":"(?<=[\\\\t ])(?:(1)|(2)|(\\\\d+))(?=>)"},"redirection":{"patterns":[{"begin":"[<>]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.interpolated.process-substitution.shell","patterns":[{"include":"#initial_context"}]},{"match":"(?])(&>|\\\\d*>&\\\\d*|\\\\d*(>>|[<>])|\\\\d*<&|\\\\d*<>)(?![<>])","name":"keyword.operator.redirect.shell"}]},"regex_comparison":{"match":"=~","name":"keyword.operator.logical.regex.shell"},"regexp":{"patterns":[{"match":".+"}]},"simple_options":{"captures":{"0":{"patterns":[{"captures":{"1":{"name":"string.unquoted.argument.shell constant.other.option.dash.shell"},"2":{"name":"string.unquoted.argument.shell constant.other.option.shell"}},"match":"[\\\\t ]++(-)(\\\\w+)"}]}},"match":"(?:[\\\\t ]++-\\\\w+)*"},"simple_unquoted":{"match":"[^\\\\t\\\\n \\"$\\\\&-);<>\\\\\\\\`|]","name":"string.unquoted.shell"},"special_expansion":{"match":"!|:[-=?]?|[*@]|##?|%%|[%/]","name":"keyword.operator.expansion.shell"},"start_of_command":{"match":"[\\\\t ]*+(?![\\\\n!#\\\\&()<>\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?!\\\\\\\\\\\\n?$)"},"string":{"patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.shell"},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.single.shell"},{"begin":"\\\\$?\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.double.shell","patterns":[{"match":"\\\\\\\\[\\\\n\\"$\\\\\\\\`]","name":"constant.character.escape.shell"},{"include":"#variable"},{"include":"#interpolation"}]},{"begin":"\\\\$\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.single.dollar.shell","patterns":[{"match":"\\\\\\\\[\'\\\\\\\\abefnrtv]","name":"constant.character.escape.ansi-c.shell"},{"match":"\\\\\\\\[0-9]{3}\\"","name":"constant.character.escape.octal.shell"},{"match":"\\\\\\\\x\\\\h{2}\\"","name":"constant.character.escape.hex.shell"},{"match":"\\\\\\\\c.\\"","name":"constant.character.escape.control-char.shell"}]}]},"subshell_dollar":{"patterns":[{"begin":"\\\\$\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.subshell.single.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.subshell.single.shell"}},"name":"meta.scope.subshell","patterns":[{"include":"#parenthese"},{"include":"#initial_context"}]}]},"support":{"patterns":[{"match":"(?<=^|[\\\\&;\\\\s])[.:](?=[\\\\&;\\\\s]|$)","name":"support.function.builtin.shell"}]},"typical_statements":{"patterns":[{"include":"#assignment_statement"},{"include":"#case_statement"},{"include":"#for_statement"},{"include":"#while_statement"},{"include":"#function_definition"},{"include":"#command_statement"},{"include":"#line_continuation"},{"include":"#arithmetic_double"},{"include":"#normal_context"}]},"variable":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.all.shell"},"2":{"name":"variable.parameter.positional.all.shell"}},"match":"(\\\\$)(@(?!\\\\w))"},{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.shell"},"2":{"name":"variable.parameter.positional.shell"}},"match":"(\\\\$)([0-9](?!\\\\w))"},{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.language.special.shell"},"2":{"name":"variable.language.special.shell"}},"match":"(\\\\$)([-!#$*0?_](?!\\\\w))"},{"begin":"(\\\\$)(\\\\{)[\\\\t ]*+(?=\\\\d)","beginCaptures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.shell"},"2":{"name":"punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell"}},"contentName":"meta.parameter-expansion","end":"}","endCaptures":{"0":{"name":"punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell"}},"patterns":[{"include":"#special_expansion"},{"include":"#array_access_inline"},{"match":"[0-9]+","name":"variable.parameter.positional.shell"},{"match":"(?{cE=Object.freeze(JSON.parse('{"displayName":"JSON","name":"json","patterns":[{"include":"#value"}],"repository":{"array":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.array.begin.json"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.array.end.json"}},"name":"meta.structure.array.json","patterns":[{"include":"#value"},{"match":",","name":"punctuation.separator.array.json"},{"match":"[^]\\\\s]","name":"invalid.illegal.expected-array-separator.json"}]},"comments":{"patterns":[{"begin":"/\\\\*\\\\*(?!/)","captures":{"0":{"name":"punctuation.definition.comment.json"}},"end":"\\\\*/","name":"comment.block.documentation.json"},{"begin":"/\\\\*","captures":{"0":{"name":"punctuation.definition.comment.json"}},"end":"\\\\*/","name":"comment.block.json"},{"captures":{"1":{"name":"punctuation.definition.comment.json"}},"match":"(//).*$\\\\n?","name":"comment.line.double-slash.js"}]},"constant":{"match":"\\\\b(?:true|false|null)\\\\b","name":"constant.language.json"},"number":{"match":"-?(?:0|[1-9]\\\\d*)(?:(?:\\\\.\\\\d+)?(?:[Ee][-+]?\\\\d+)?)?","name":"constant.numeric.json"},"object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.dictionary.begin.json"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.dictionary.end.json"}},"name":"meta.structure.dictionary.json","patterns":[{"include":"#objectkey"},{"include":"#comments"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.dictionary.key-value.json"}},"end":"(,)|(?=})","endCaptures":{"1":{"name":"punctuation.separator.dictionary.pair.json"}},"name":"meta.structure.dictionary.value.json","patterns":[{"include":"#value"},{"match":"[^,\\\\s]","name":"invalid.illegal.expected-dictionary-separator.json"}]},{"match":"[^}\\\\s]","name":"invalid.illegal.expected-dictionary-separator.json"}]},"objectkey":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.support.type.property-name.begin.json"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.support.type.property-name.end.json"}},"name":"string.json support.type.property-name.json","patterns":[{"include":"#stringcontent"}]},"string":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.json"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.json"}},"name":"string.quoted.double.json","patterns":[{"include":"#stringcontent"}]},"stringcontent":{"patterns":[{"match":"\\\\\\\\(?:[\\"/\\\\\\\\bfnrt]|u\\\\h{4})","name":"constant.character.escape.json"},{"match":"\\\\\\\\.","name":"invalid.illegal.unrecognized-string-escape.json"}]},"value":{"patterns":[{"include":"#constant"},{"include":"#number"},{"include":"#string"},{"include":"#array"},{"include":"#object"},{"include":"#comments"}]}},"scopeName":"source.json"}')),Q3=[cE]});var _v=ye((oX,yv)=>{"use strict";var J3=[[{color:"0, 0, 0",class:"ansi-black"},{color:"187, 0, 0",class:"ansi-red"},{color:"0, 187, 0",class:"ansi-green"},{color:"187, 187, 0",class:"ansi-yellow"},{color:"0, 0, 187",class:"ansi-blue"},{color:"187, 0, 187",class:"ansi-magenta"},{color:"0, 187, 187",class:"ansi-cyan"},{color:"255,255,255",class:"ansi-white"}],[{color:"85, 85, 85",class:"ansi-bright-black"},{color:"255, 85, 85",class:"ansi-bright-red"},{color:"0, 255, 0",class:"ansi-bright-green"},{color:"255, 255, 85",class:"ansi-bright-yellow"},{color:"85, 85, 255",class:"ansi-bright-blue"},{color:"255, 85, 255",class:"ansi-bright-magenta"},{color:"85, 255, 255",class:"ansi-bright-cyan"},{color:"255, 255, 255",class:"ansi-bright-white"}]],pE=/(https?:\/\/(?:[A-Za-z0-9#;/?:@=+$',_.!~*()[\]-]|&|%[A-Fa-f0-9]{2})+)/gm,Xs=class e{static escapeForHtml(t){return new e().escapeForHtml(t)}static linkify(t){return new e().linkify(t)}static ansiToHtml(t,n){return new e().ansiToHtml(t,n)}static ansiToJson(t,n){return new e().ansiToJson(t,n)}static ansiToText(t){return new e().ansiToText(t)}constructor(){this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0,this.decorations=[]}setupPalette(){this.PALETTE_COLORS=[];for(let c=0;c<2;++c)for(let o=0;o<8;++o)this.PALETTE_COLORS.push(J3[c][o].color);let t=[0,95,135,175,215,255],n=(c,o,l)=>t[c]+", "+t[o]+", "+t[l],a,i,r;for(let c=0;c<6;++c)for(let o=0;o<6;++o)for(let l=0;l<6;++l)this.PALETTE_COLORS.push(n(c,o,l));let s=8;for(let c=0;c<24;++c,s+=10)this.PALETTE_COLORS.push(s+", "+s+", "+s)}escapeForHtml(t){return t.replace(/[&<>\"]/gm,n=>n=="&"?"&":n=='"'?""":n=="<"?"<":n==">"?">":"")}linkify(t){return t.replace(pE,n=>'').concat(n,""))}ansiToHtml(t,n){return this.process(t,n,!0)}ansiToJson(t,n){return n=n||{},n.json=!0,n.clearLine=!1,this.process(t,n,!0)}ansiToText(t){return this.process(t,{},!1)}process(t,n,a){let i=this,r=t.split(/\033\[/),s=r.shift();n==null&&(n={}),n.clearLine=/\r/.test(t);let c=r.map(o=>this.processChunk(o,n,a));if(n&&n.json){let o=i.processChunkJson("");return o.content=s,o.clearLine=n.clearLine,c.unshift(o),n.remove_empty&&(c=c.filter(l=>!l.isEmpty())),c}else c.unshift(s);return c.join("")}processChunkJson(t,n,a){n=typeof n>"u"?{}:n;let i=n.use_classes=typeof n.use_classes<"u"&&n.use_classes,r=n.key=i?"class":"color",s={content:t,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,isInverted:!1,clearLine:n.clearLine,decoration:null,decorations:[],was_processed:!1,isEmpty:()=>!s.content},c=t.match(/^([!\x3c-\x3f]*)([\d;]*)([\x20-\x2c]*[\x40-\x7e])([\s\S]*)/m);if(!c)return s;let o=s.content=c[4],l=c[2].split(";");if(c[1]!==""||c[3]!=="m"||!a)return s;let p=this;for(;l.length>0;){let u=l.shift(),m=parseInt(u);if(isNaN(m)||m===0)p.fg=p.bg=null,p.decorations=[];else if(m===1)p.decorations.push("bold");else if(m===2)p.decorations.push("dim");else if(m===3)p.decorations.push("italic");else if(m===4)p.decorations.push("underline");else if(m===5)p.decorations.push("blink");else if(m===7)p.decorations.push("reverse");else if(m===8)p.decorations.push("hidden");else if(m===9)p.decorations.push("strikethrough");else if(m===21)p.removeDecoration("bold");else if(m===22)p.removeDecoration("bold"),p.removeDecoration("dim");else if(m===23)p.removeDecoration("italic");else if(m===24)p.removeDecoration("underline");else if(m===25)p.removeDecoration("blink");else if(m===27)p.removeDecoration("reverse");else if(m===28)p.removeDecoration("hidden");else if(m===29)p.removeDecoration("strikethrough");else if(m===39)p.fg=null;else if(m===49)p.bg=null;else if(m>=30&&m<38)p.fg=J3[0][m%10][r];else if(m>=90&&m<98)p.fg=J3[1][m%10][r];else if(m>=40&&m<48)p.bg=J3[0][m%10][r];else if(m>=100&&m<108)p.bg=J3[1][m%10][r];else if(m===38||m===48){let d=m===38;if(l.length>=1){let f=l.shift();if(f==="5"&&l.length>=1){let w=parseInt(l.shift());if(w>=0&&w<=255)if(!i)this.PALETTE_COLORS||p.setupPalette(),d?p.fg=this.PALETTE_COLORS[w]:p.bg=this.PALETTE_COLORS[w];else{let k=w>=16?"ansi-palette-"+w:J3[w>7?1:0][w%8].class;d?p.fg=k:p.bg=k}}else if(f==="2"&&l.length>=3){let w=parseInt(l.shift()),k=parseInt(l.shift()),v=parseInt(l.shift());if(w>=0&&w<=255&&k>=0&&k<=255&&v>=0&&v<=255){let b=w+", "+k+", "+v;i?d?(p.fg="ansi-truecolor",p.fg_truecolor=b):(p.bg="ansi-truecolor",p.bg_truecolor=b):d?p.fg=b:p.bg=b}}}}}if(p.fg===null&&p.bg===null&&p.decorations.length===0)return s;{let u=[],m=[],d={};return s.fg=p.fg,s.bg=p.bg,s.fg_truecolor=p.fg_truecolor,s.bg_truecolor=p.bg_truecolor,s.decorations=p.decorations,s.decoration=p.decorations.slice(-1).pop()||null,s.was_processed=!0,s}}processChunk(t,n,a){n=n||{};let i=this.processChunkJson(t,n,a),r=n.use_classes;if(i.decorations=i.decorations.filter(u=>{if(u==="reverse"){i.fg||(i.fg=J3[0][7][r?"class":"color"]),i.bg||(i.bg=J3[0][0][r?"class":"color"]);let m=i.fg;i.fg=i.bg,i.bg=m;let d=i.fg_truecolor;return i.fg_truecolor=i.bg_truecolor,i.bg_truecolor=d,i.isInverted=!0,!1}return!0}),n.json)return i;if(i.isEmpty())return"";if(!i.was_processed)return i.content;let s=[],c=[],o=[],l={},p=u=>{let m=[],d;for(d in u)u.hasOwnProperty(d)&&m.push("data-"+d+'="'+this.escapeForHtml(u[d])+'"');return m.length>0?" "+m.join(" "):""};return i.isInverted&&(l["ansi-is-inverted"]="true"),i.fg&&(r?(s.push(i.fg+"-fg"),i.fg_truecolor!==null&&(l["ansi-truecolor-fg"]=i.fg_truecolor,i.fg_truecolor=null)):s.push("color:rgb("+i.fg+")")),i.bg&&(r?(s.push(i.bg+"-bg"),i.bg_truecolor!==null&&(l["ansi-truecolor-bg"]=i.bg_truecolor,i.bg_truecolor=null)):s.push("background-color:rgb("+i.bg+")")),i.decorations.forEach(u=>{if(r){c.push("ansi-"+u);return}u==="bold"?c.push("font-weight:bold"):u==="dim"?c.push("opacity:0.5"):u==="italic"?c.push("font-style:italic"):u==="hidden"?c.push("visibility:hidden"):u==="strikethrough"?o.push("line-through"):o.push(u)}),o.length&&c.push("text-decoration:"+o.join(" ")),r?'"+i.content+"":'"+i.content+""}removeDecoration(t){let n=this.decorations.indexOf(t);n>=0&&this.decorations.splice(n,1)}};yv.exports=Xs});var P_={};u1(P_,{default:()=>p7});var pT,p7,qa=n1(()=>{pT=Object.freeze(JSON.parse('{"displayName":"Python","name":"python","patterns":[{"include":"#statement"},{"include":"#expression"}],"repository":{"annotated-parameter":{"begin":"\\\\b([_[:alpha:]]\\\\w*)\\\\s*(:)","beginCaptures":{"1":{"name":"variable.parameter.function.language.python"},"2":{"name":"punctuation.separator.annotation.python"}},"end":"(,)|(?=\\\\))","endCaptures":{"1":{"name":"punctuation.separator.parameters.python"}},"patterns":[{"include":"#expression"},{"match":"=(?!=)","name":"keyword.operator.assignment.python"}]},"assignment-operator":{"match":"<<=|>>=|//=|\\\\*\\\\*=|\\\\+=|-=|/=|@=|\\\\*=|%=|~=|\\\\^=|&=|\\\\|=|=(?!=)","name":"keyword.operator.assignment.python"},"backticks":{"begin":"`","end":"`|(?))","name":"comment.typehint.punctuation.notation.python"},{"match":"([_[:alpha:]]\\\\w*)","name":"comment.typehint.variable.notation.python"}]},{"include":"#comments-base"}]},"comments-base":{"begin":"(#)","beginCaptures":{"1":{"name":"punctuation.definition.comment.python"}},"end":"$()","name":"comment.line.number-sign.python","patterns":[{"include":"#codetags"}]},"comments-string-double-three":{"begin":"(#)","beginCaptures":{"1":{"name":"punctuation.definition.comment.python"}},"end":"($|(?=\\"\\"\\"))","name":"comment.line.number-sign.python","patterns":[{"include":"#codetags"}]},"comments-string-single-three":{"begin":"(#)","beginCaptures":{"1":{"name":"punctuation.definition.comment.python"}},"end":"($|(?=\'\'\'))","name":"comment.line.number-sign.python","patterns":[{"include":"#codetags"}]},"curly-braces":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.dict.begin.python"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.dict.end.python"}},"patterns":[{"match":":","name":"punctuation.separator.dict.python"},{"include":"#expression"}]},"decorator":{"begin":"^\\\\s*((@))\\\\s*(?=[_[:alpha:]]\\\\w*)","beginCaptures":{"1":{"name":"entity.name.function.decorator.python"},"2":{"name":"punctuation.definition.decorator.python"}},"end":"(\\\\))(.*?)(?=\\\\s*(?:#|$))|(?=[\\\\n#])","endCaptures":{"1":{"name":"punctuation.definition.arguments.end.python"},"2":{"name":"invalid.illegal.decorator.python"}},"name":"meta.function.decorator.python","patterns":[{"include":"#decorator-name"},{"include":"#function-arguments"}]},"decorator-name":{"patterns":[{"include":"#builtin-callables"},{"include":"#illegal-object-name"},{"captures":{"2":{"name":"punctuation.separator.period.python"}},"match":"([_[:alpha:]]\\\\w*)|(\\\\.)","name":"entity.name.function.decorator.python"},{"include":"#line-continuation"},{"captures":{"1":{"name":"invalid.illegal.decorator.python"}},"match":"\\\\s*([^#(.\\\\\\\\_[:alpha:]\\\\s].*?)(?=#|$)","name":"invalid.illegal.decorator.python"}]},"docstring":{"patterns":[{"begin":"(\'\'\'|\\"\\"\\")","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\1)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python"}},"name":"string.quoted.docstring.multi.python","patterns":[{"include":"#docstring-prompt"},{"include":"#codetags"},{"include":"#docstring-guts-unicode"}]},{"begin":"([Rr])(\'\'\'|\\"\\"\\")","beginCaptures":{"1":{"name":"storage.type.string.python"},"2":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\2)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python"}},"name":"string.quoted.docstring.raw.multi.python","patterns":[{"include":"#string-consume-escape"},{"include":"#docstring-prompt"},{"include":"#codetags"}]},{"begin":"([\\"\'])","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\1)|(\\\\n)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python"},"2":{"name":"invalid.illegal.newline.python"}},"name":"string.quoted.docstring.single.python","patterns":[{"include":"#codetags"},{"include":"#docstring-guts-unicode"}]},{"begin":"([Rr])([\\"\'])","beginCaptures":{"1":{"name":"storage.type.string.python"},"2":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\2)|(\\\\n)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python"},"2":{"name":"invalid.illegal.newline.python"}},"name":"string.quoted.docstring.raw.single.python","patterns":[{"include":"#string-consume-escape"},{"include":"#codetags"}]}]},"docstring-guts-unicode":{"patterns":[{"include":"#escape-sequence-unicode"},{"include":"#escape-sequence"},{"include":"#string-line-continuation"}]},"docstring-prompt":{"captures":{"1":{"name":"keyword.control.flow.python"}},"match":"(?:^|\\\\G)\\\\s*((?:>>>|\\\\.\\\\.\\\\.)\\\\s)(?=\\\\s*\\\\S)"},"docstring-statement":{"begin":"^(?=\\\\s*[Rr]?(\'\'\'|\\"\\"\\"|[\\"\']))","end":"((?<=\\\\1)|^)(?!\\\\s*[Rr]?(\'\'\'|\\"\\"\\"|[\\"\']))","patterns":[{"include":"#docstring"}]},"double-one-regexp-character-set":{"patterns":[{"match":"\\\\[\\\\^?](?!.*?])"},{"begin":"(\\\\[)(\\\\^)?(])?","beginCaptures":{"1":{"name":"punctuation.character.set.begin.regexp constant.other.set.regexp"},"2":{"name":"keyword.operator.negation.regexp"},"3":{"name":"constant.character.set.regexp"}},"end":"(]|(?=\\"))|((?=(?)","beginCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"},"2":{"name":"entity.name.tag.named.group.regexp"}},"end":"(\\\\)|(?=\\"))|((?=(?)","beginCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"},"2":{"name":"entity.name.tag.named.group.regexp"}},"end":"(\\\\)|(?=\\"\\"\\"))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"name":"meta.named.regexp","patterns":[{"include":"#double-three-regexp-expression"},{"include":"#comments-string-double-three"}]},"double-three-regexp-parentheses":{"begin":"\\\\(","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"}},"end":"(\\\\)|(?=\\"\\"\\"))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#double-three-regexp-expression"},{"include":"#comments-string-double-three"}]},"double-three-regexp-parentheses-non-capturing":{"begin":"\\\\(\\\\?:","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"}},"end":"(\\\\)|(?=\\"\\"\\"))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#double-three-regexp-expression"},{"include":"#comments-string-double-three"}]},"ellipsis":{"match":"\\\\.\\\\.\\\\.","name":"constant.other.ellipsis.python"},"escape-sequence":{"match":"\\\\\\\\(x\\\\h{2}|[0-7]{1,3}|[\\"\'\\\\\\\\abfnrtv])","name":"constant.character.escape.python"},"escape-sequence-unicode":{"patterns":[{"match":"\\\\\\\\(u\\\\h{4}|U\\\\h{8}|N\\\\{[\\\\w\\\\s]+?})","name":"constant.character.escape.python"}]},"expression":{"patterns":[{"include":"#expression-base"},{"include":"#member-access"},{"match":"\\\\b([_[:alpha:]]\\\\w*)\\\\b"}]},"expression-bare":{"patterns":[{"include":"#backticks"},{"include":"#illegal-anno"},{"include":"#literal"},{"include":"#regexp"},{"include":"#string"},{"include":"#lambda"},{"include":"#generator"},{"include":"#illegal-operator"},{"include":"#operator"},{"include":"#curly-braces"},{"include":"#item-access"},{"include":"#list"},{"include":"#odd-function-call"},{"include":"#round-braces"},{"include":"#function-call"},{"include":"#builtin-functions"},{"include":"#builtin-types"},{"include":"#builtin-exceptions"},{"include":"#magic-names"},{"include":"#special-names"},{"include":"#illegal-names"},{"include":"#special-variables"},{"include":"#ellipsis"},{"include":"#punctuation"},{"include":"#line-continuation"}]},"expression-base":{"patterns":[{"include":"#comments"},{"include":"#expression-bare"},{"include":"#line-continuation"}]},"f-expression":{"patterns":[{"include":"#expression-bare"},{"include":"#member-access"},{"match":"\\\\b([_[:alpha:]]\\\\w*)\\\\b"}]},"fregexp-base-expression":{"patterns":[{"include":"#fregexp-quantifier"},{"include":"#fstring-formatting-braces"},{"match":"\\\\{.*?}"},{"include":"#regexp-base-common"}]},"fregexp-quantifier":{"match":"\\\\{\\\\{(\\\\d+|\\\\d+,(\\\\d+)?|,\\\\d+)}}","name":"keyword.operator.quantifier.regexp"},"fstring-fnorm-quoted-multi-line":{"begin":"\\\\b([Ff])([BUbu])?(\'\'\'|\\"\\"\\")","beginCaptures":{"1":{"name":"string.interpolated.python string.quoted.multi.python storage.type.string.python"},"2":{"name":"invalid.illegal.prefix.python"},"3":{"name":"punctuation.definition.string.begin.python string.interpolated.python string.quoted.multi.python"}},"end":"(\\\\3)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python string.interpolated.python string.quoted.multi.python"},"2":{"name":"invalid.illegal.newline.python"}},"name":"meta.fstring.python","patterns":[{"include":"#fstring-guts"},{"include":"#fstring-illegal-multi-brace"},{"include":"#fstring-multi-brace"},{"include":"#fstring-multi-core"}]},"fstring-fnorm-quoted-single-line":{"begin":"\\\\b([Ff])([BUbu])?(([\\"\']))","beginCaptures":{"1":{"name":"string.interpolated.python string.quoted.single.python storage.type.string.python"},"2":{"name":"invalid.illegal.prefix.python"},"3":{"name":"punctuation.definition.string.begin.python string.interpolated.python string.quoted.single.python"}},"end":"(\\\\3)|((?^]?[- +]?#?\\\\d*,?(\\\\.\\\\d+)?[%EFGXb-gnosx]?)(?=})"},{"include":"#fstring-terminator-multi-tail"}]},"fstring-terminator-multi-tail":{"begin":"(=?(?:![ars])?)(:)(?=.*?\\\\{)","beginCaptures":{"1":{"name":"storage.type.format.python"},"2":{"name":"storage.type.format.python"}},"end":"(?=})","patterns":[{"include":"#fstring-illegal-multi-brace"},{"include":"#fstring-multi-brace"},{"match":"([%EFGXb-gnosx])(?=})","name":"storage.type.format.python"},{"match":"(\\\\.\\\\d+)","name":"storage.type.format.python"},{"match":"(,)","name":"storage.type.format.python"},{"match":"(\\\\d+)","name":"storage.type.format.python"},{"match":"(#)","name":"storage.type.format.python"},{"match":"([- +])","name":"storage.type.format.python"},{"match":"([<=>^])","name":"storage.type.format.python"},{"match":"(\\\\w)","name":"storage.type.format.python"}]},"fstring-terminator-single":{"patterns":[{"match":"(=(![ars])?)(?=})","name":"storage.type.format.python"},{"match":"(=?![ars])(?=})","name":"storage.type.format.python"},{"captures":{"1":{"name":"storage.type.format.python"},"2":{"name":"storage.type.format.python"}},"match":"(=?(?:![ars])?)(:\\\\w?[<=>^]?[- +]?#?\\\\d*,?(\\\\.\\\\d+)?[%EFGXb-gnosx]?)(?=})"},{"include":"#fstring-terminator-single-tail"}]},"fstring-terminator-single-tail":{"begin":"(=?(?:![ars])?)(:)(?=.*?\\\\{)","beginCaptures":{"1":{"name":"storage.type.format.python"},"2":{"name":"storage.type.format.python"}},"end":"(?=})|(?=\\\\n)","patterns":[{"include":"#fstring-illegal-single-brace"},{"include":"#fstring-single-brace"},{"match":"([%EFGXb-gnosx])(?=})","name":"storage.type.format.python"},{"match":"(\\\\.\\\\d+)","name":"storage.type.format.python"},{"match":"(,)","name":"storage.type.format.python"},{"match":"(\\\\d+)","name":"storage.type.format.python"},{"match":"(#)","name":"storage.type.format.python"},{"match":"([- +])","name":"storage.type.format.python"},{"match":"([<=>^])","name":"storage.type.format.python"},{"match":"(\\\\w)","name":"storage.type.format.python"}]},"function-arguments":{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.python"}},"contentName":"meta.function-call.arguments.python","end":"(?=\\\\))(?!\\\\)\\\\s*\\\\()","patterns":[{"match":"(,)","name":"punctuation.separator.arguments.python"},{"captures":{"1":{"name":"keyword.operator.unpacking.arguments.python"}},"match":"(?:(?<=[(,])|^)\\\\s*(\\\\*{1,2})"},{"include":"#lambda-incomplete"},{"include":"#illegal-names"},{"captures":{"1":{"name":"variable.parameter.function-call.python"},"2":{"name":"keyword.operator.assignment.python"}},"match":"\\\\b([_[:alpha:]]\\\\w*)\\\\s*(=)(?!=)"},{"match":"=(?!=)","name":"keyword.operator.assignment.python"},{"include":"#expression"},{"captures":{"1":{"name":"punctuation.definition.arguments.end.python"},"2":{"name":"punctuation.definition.arguments.begin.python"}},"match":"\\\\s*(\\\\))\\\\s*(\\\\()"}]},"function-call":{"begin":"\\\\b(?=([_[:alpha:]]\\\\w*)\\\\s*(\\\\())","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.definition.arguments.end.python"}},"name":"meta.function-call.python","patterns":[{"include":"#special-variables"},{"include":"#function-name"},{"include":"#function-arguments"}]},"function-declaration":{"begin":"\\\\s*(?:\\\\b(async)\\\\s+)?\\\\b(def)\\\\s+(?=[_[:alpha:]]\\\\p{word}*\\\\s*\\\\()","beginCaptures":{"1":{"name":"storage.type.function.async.python"},"2":{"name":"storage.type.function.python"}},"end":"(:|(?=[\\\\n\\"#\']))","endCaptures":{"1":{"name":"punctuation.section.function.begin.python"}},"name":"meta.function.python","patterns":[{"include":"#function-def-name"},{"include":"#parameters"},{"include":"#line-continuation"},{"include":"#return-annotation"}]},"function-def-name":{"patterns":[{"include":"#illegal-object-name"},{"include":"#builtin-possible-callables"},{"match":"\\\\b([_[:alpha:]]\\\\w*)\\\\b","name":"entity.name.function.python"}]},"function-name":{"patterns":[{"include":"#builtin-possible-callables"},{"match":"\\\\b([_[:alpha:]]\\\\w*)\\\\b","name":"meta.function-call.generic.python"}]},"generator":{"begin":"\\\\bfor\\\\b","beginCaptures":{"0":{"name":"keyword.control.flow.python"}},"end":"\\\\bin\\\\b","endCaptures":{"0":{"name":"keyword.control.flow.python"}},"patterns":[{"include":"#expression"}]},"illegal-anno":{"match":"->","name":"invalid.illegal.annotation.python"},"illegal-names":{"captures":{"1":{"name":"keyword.control.flow.python"},"2":{"name":"keyword.control.import.python"}},"match":"\\\\b(?:(and|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|in|is|(?<=\\\\.)lambda|lambda(?=\\\\s*[.=])|nonlocal|not|or|pass|raise|return|try|while|with|yield)|(as|import))\\\\b"},"illegal-object-name":{"match":"\\\\b(True|False|None)\\\\b","name":"keyword.illegal.name.python"},"illegal-operator":{"patterns":[{"match":"&&|\\\\|\\\\||--|\\\\+\\\\+","name":"invalid.illegal.operator.python"},{"match":"[$?]","name":"invalid.illegal.operator.python"},{"match":"!\\\\b","name":"invalid.illegal.operator.python"}]},"import":{"patterns":[{"begin":"\\\\b(?>|[\\\\&^|~])|(\\\\*\\\\*|[-%*+]|//|[/@])|(!=|==|>=|<=|[<>])|(:=)"},"parameter-special":{"captures":{"1":{"name":"variable.parameter.function.language.python"},"2":{"name":"variable.parameter.function.language.special.self.python"},"3":{"name":"variable.parameter.function.language.special.cls.python"},"4":{"name":"punctuation.separator.parameters.python"}},"match":"\\\\b((self)|(cls))\\\\b\\\\s*(?:(,)|(?=\\\\)))"},"parameters":{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.parameters.begin.python"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.definition.parameters.end.python"}},"name":"meta.function.parameters.python","patterns":[{"match":"/","name":"keyword.operator.positional.parameter.python"},{"match":"(\\\\*\\\\*?)","name":"keyword.operator.unpacking.parameter.python"},{"include":"#lambda-incomplete"},{"include":"#illegal-names"},{"include":"#illegal-object-name"},{"include":"#parameter-special"},{"captures":{"1":{"name":"variable.parameter.function.language.python"},"2":{"name":"punctuation.separator.parameters.python"}},"match":"([_[:alpha:]]\\\\w*)\\\\s*(?:(,)|(?=[\\\\n#)=]))"},{"include":"#comments"},{"include":"#loose-default"},{"include":"#annotated-parameter"}]},"punctuation":{"patterns":[{"match":":","name":"punctuation.separator.colon.python"},{"match":",","name":"punctuation.separator.element.python"}]},"regexp":{"patterns":[{"include":"#regexp-single-three-line"},{"include":"#regexp-double-three-line"},{"include":"#regexp-single-one-line"},{"include":"#regexp-double-one-line"}]},"regexp-backreference":{"captures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.begin.regexp"},"2":{"name":"entity.name.tag.named.backreference.regexp"},"3":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.end.regexp"}},"match":"(\\\\()(\\\\?P=\\\\w+(?:\\\\s+\\\\p{alnum}+)?)(\\\\))","name":"meta.backreference.named.regexp"},"regexp-backreference-number":{"captures":{"1":{"name":"entity.name.tag.backreference.regexp"}},"match":"(\\\\\\\\[1-9]\\\\d?)","name":"meta.backreference.regexp"},"regexp-base-common":{"patterns":[{"match":"\\\\.","name":"support.other.match.any.regexp"},{"match":"\\\\^","name":"support.other.match.begin.regexp"},{"match":"\\\\$","name":"support.other.match.end.regexp"},{"match":"[*+?]\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.disjunction.regexp"},{"include":"#regexp-escape-sequence"}]},"regexp-base-expression":{"patterns":[{"include":"#regexp-quantifier"},{"include":"#regexp-base-common"}]},"regexp-charecter-set-escapes":{"patterns":[{"match":"\\\\\\\\[\\\\\\\\abfnrtv]","name":"constant.character.escape.regexp"},{"include":"#regexp-escape-special"},{"match":"\\\\\\\\([0-7]{1,3})","name":"constant.character.escape.regexp"},{"include":"#regexp-escape-character"},{"include":"#regexp-escape-unicode"},{"include":"#regexp-escape-catchall"}]},"regexp-double-one-line":{"begin":"\\\\b(([Uu]r)|([Bb]r)|(r[Bb]?))(\\")","beginCaptures":{"2":{"name":"invalid.deprecated.prefix.python"},"3":{"name":"storage.type.string.python"},"4":{"name":"storage.type.string.python"},"5":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\")|(?)","beginCaptures":{"1":{"name":"punctuation.separator.annotation.result.python"}},"end":"(?=:)","patterns":[{"include":"#expression"}]},"round-braces":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.begin.python"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.end.python"}},"patterns":[{"include":"#expression"}]},"semicolon":{"patterns":[{"match":";$","name":"invalid.deprecated.semicolon.python"}]},"single-one-regexp-character-set":{"patterns":[{"match":"\\\\[\\\\^?](?!.*?])"},{"begin":"(\\\\[)(\\\\^)?(])?","beginCaptures":{"1":{"name":"punctuation.character.set.begin.regexp constant.other.set.regexp"},"2":{"name":"keyword.operator.negation.regexp"},"3":{"name":"constant.character.set.regexp"}},"end":"(]|(?=\'))|((?=(?)","beginCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"},"2":{"name":"entity.name.tag.named.group.regexp"}},"end":"(\\\\)|(?=\'))|((?=(?)","beginCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"},"2":{"name":"entity.name.tag.named.group.regexp"}},"end":"(\\\\)|(?=\'\'\'))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"name":"meta.named.regexp","patterns":[{"include":"#single-three-regexp-expression"},{"include":"#comments-string-single-three"}]},"single-three-regexp-parentheses":{"begin":"\\\\(","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"}},"end":"(\\\\)|(?=\'\'\'))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#single-three-regexp-expression"},{"include":"#comments-string-single-three"}]},"single-three-regexp-parentheses-non-capturing":{"begin":"\\\\(\\\\?:","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"}},"end":"(\\\\)|(?=\'\'\'))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#single-three-regexp-expression"},{"include":"#comments-string-single-three"}]},"special-names":{"match":"\\\\b(_*\\\\p{upper}[_\\\\d]*\\\\p{upper})[[:upper:]\\\\d]*(_\\\\w*)?\\\\b","name":"constant.other.caps.python"},"special-variables":{"captures":{"1":{"name":"variable.language.special.self.python"},"2":{"name":"variable.language.special.cls.python"}},"match":"\\\\b(?^]?[- +]?#?\\\\d*,?(\\\\.\\\\d+)?[%EFGXb-gnosx]?)?})","name":"meta.format.brace.python"},{"captures":{"1":{"name":"constant.character.format.placeholder.other.python"},"3":{"name":"storage.type.format.python"},"4":{"name":"storage.type.format.python"}},"match":"(\\\\{\\\\w*(\\\\.[_[:alpha:]]\\\\w*|\\\\[[^]\\"\']+])*(![ars])?(:)[^\\\\n\\"\'{}]*(?:\\\\{[^\\\\n\\"\'}]*?}[^\\\\n\\"\'{}]*)*})","name":"meta.format.brace.python"}]},"string-consume-escape":{"match":"\\\\\\\\[\\\\n\\"\'\\\\\\\\]"},"string-entity":{"patterns":[{"include":"#escape-sequence"},{"include":"#string-line-continuation"},{"include":"#string-formatting"}]},"string-formatting":{"captures":{"1":{"name":"constant.character.format.placeholder.other.python"}},"match":"(%(\\\\([\\\\w\\\\s]*\\\\))?[- #+0]*(\\\\d+|\\\\*)?(\\\\.(\\\\d+|\\\\*))?([Lhl])?[%EFGXa-giorsux])","name":"meta.format.percent.python"},"string-line-continuation":{"match":"\\\\\\\\$","name":"constant.language.python"},"string-multi-bad-brace1-formatting-raw":{"begin":"(?=\\\\{%(.*?(?!\'\'\'|\\"\\"\\"))%})","end":"(?=\'\'\'|\\"\\"\\")","patterns":[{"include":"#string-consume-escape"}]},"string-multi-bad-brace1-formatting-unicode":{"begin":"(?=\\\\{%(.*?(?!\'\'\'|\\"\\"\\"))%})","end":"(?=\'\'\'|\\"\\"\\")","patterns":[{"include":"#escape-sequence-unicode"},{"include":"#escape-sequence"},{"include":"#string-line-continuation"}]},"string-multi-bad-brace2-formatting-raw":{"begin":"(?!\\\\{\\\\{)(?=\\\\{(\\\\w*?(?!\'\'\'|\\"\\"\\")[^!.:\\\\[}\\\\w]).*?(?!\'\'\'|\\"\\"\\")})","end":"(?=\'\'\'|\\"\\"\\")","patterns":[{"include":"#string-consume-escape"},{"include":"#string-formatting"}]},"string-multi-bad-brace2-formatting-unicode":{"begin":"(?!\\\\{\\\\{)(?=\\\\{(\\\\w*?(?!\'\'\'|\\"\\"\\")[^!.:\\\\[}\\\\w]).*?(?!\'\'\'|\\"\\"\\")})","end":"(?=\'\'\'|\\"\\"\\")","patterns":[{"include":"#escape-sequence-unicode"},{"include":"#string-entity"}]},"string-quoted-multi-line":{"begin":"(?:\\\\b([Rr])(?=[Uu]))?([Uu])?(\'\'\'|\\"\\"\\")","beginCaptures":{"1":{"name":"invalid.illegal.prefix.python"},"2":{"name":"storage.type.string.python"},"3":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\3)","endCaptures":{"1":{"name":"punctuation.definition.string.end.python"},"2":{"name":"invalid.illegal.newline.python"}},"name":"string.quoted.multi.python","patterns":[{"include":"#string-multi-bad-brace1-formatting-unicode"},{"include":"#string-multi-bad-brace2-formatting-unicode"},{"include":"#string-unicode-guts"}]},"string-quoted-single-line":{"begin":"(?:\\\\b([Rr])(?=[Uu]))?([Uu])?(([\\"\']))","beginCaptures":{"1":{"name":"invalid.illegal.prefix.python"},"2":{"name":"storage.type.string.python"},"3":{"name":"punctuation.definition.string.begin.python"}},"end":"(\\\\3)|((?{uT=Object.freeze(JSON.parse('{"displayName":"JavaScript","name":"javascript","patterns":[{"include":"#directives"},{"include":"#statements"},{"include":"#shebang"}],"repository":{"access-modifier":{"match":"(??\\\\[]|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^yield|[^$._[:alnum:]]yield|^throw|[^$._[:alnum:]]throw|^in|[^$._[:alnum:]]in|^of|[^$._[:alnum:]]of|^typeof|[^$._[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.definition.block.js"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.js"}},"name":"meta.objectliteral.js","patterns":[{"include":"#object-member"}]},"array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js"},"2":{"name":"punctuation.definition.binding-pattern.array.js"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js"}},"patterns":[{"include":"#binding-element"},{"include":"#punctuation-comma"}]},"array-binding-pattern-const":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js"},"2":{"name":"punctuation.definition.binding-pattern.array.js"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js"}},"patterns":[{"include":"#binding-element-const"},{"include":"#punctuation-comma"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.js"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.js"}},"name":"meta.array.literal.js","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.js"},"2":{"name":"variable.parameter.js"}},"match":"(?:(?)","name":"meta.arrow.js"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","beginCaptures":{"1":{"name":"storage.modifier.async.js"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.arrow.js","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.js"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.js","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"begin":"(?<=\\\\))\\\\s*(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.return.type.arrow.js","patterns":[{"include":"#arrow-return-type-body"}]},"arrow-return-type-body":{"patterns":[{"begin":"(?<=:)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"async-modifier":{"match":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.js"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.js","patterns":[{"begin":"(<)(reference|amd-dependency|amd-module)","beginCaptures":{"1":{"name":"punctuation.definition.tag.directive.js"},"2":{"name":"entity.name.tag.directive.js"}},"end":"/>","endCaptures":{"0":{"name":"punctuation.definition.tag.directive.js"}},"name":"meta.tag.js","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.js"},{"match":"=","name":"keyword.operator.assignment.js"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"5":{"name":"constant.other.email.link.underline.jsdoc"},"6":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"match":"((@)author)\\\\s+([^*/<>@\\\\s](?:[^*/<>@]|\\\\*[^/])*)(?:\\\\s*(<)([^>\\\\s]+)(>))?"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"begin":"\\\\G(<)caption(>)","beginCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"contentName":"constant.other.description.jsdoc","end":"()caption(>)|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.js"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)kind)\\\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"begin":"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"captures":{"1":{"name":"punctuation.definition.optional-value.begin.bracket.square.jsdoc"},"2":{"name":"keyword.operator.assignment.jsdoc"},"3":{"name":"source.embedded.js"},"4":{"name":"punctuation.definition.optional-value.end.bracket.square.jsdoc"},"5":{"name":"invalid.illegal.syntax.jsdoc"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\\\s+((?:[^*@{}\\\\s]|\\\\*[^/])+)"},{"begin":"((@)(?:default(?:value)?|license|version))\\\\s+(([\\"\']))","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"},"4":{"name":"punctuation.definition.string.begin.jsdoc"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\\\b","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.js"},"2":{"name":"keyword.operator.rest.js"},"3":{"name":"variable.parameter.js variable.language.this.js"},"4":{"name":"variable.parameter.js"},"5":{"name":"keyword.operator.optional.js"}},"match":"(?:(??}]|\\\\|\\\\||&&|!==|$|((?>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.js"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.js"},{"match":"[!=]==?","name":"keyword.operator.comparison.js"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.js"},{"captures":{"1":{"name":"keyword.operator.logical.js"},"2":{"name":"keyword.operator.assignment.compound.js"},"3":{"name":"keyword.operator.arithmetic.js"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","name":"keyword.operator.logical.js"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.js"},{"match":"=","name":"keyword.operator.assignment.js"},{"match":"--","name":"keyword.operator.decrement.js"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.js"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.js"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.js"},"2":{"name":"keyword.operator.arithmetic.js"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.js"},"2":{"name":"keyword.operator.arithmetic.js"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"expressionWithoutIdentifiers":{"patterns":[{"include":"#jsx"},{"include":"#string"},{"include":"#regex"},{"include":"#comment"},{"include":"#function-expression"},{"include":"#class-expression"},{"include":"#arrow-function"},{"include":"#paren-expression-possibly-arrow"},{"include":"#cast"},{"include":"#ternary-expression"},{"include":"#new-expr"},{"include":"#instanceof-expr"},{"include":"#object-literal"},{"include":"#expression-operators"},{"include":"#function-call"},{"include":"#literal"},{"include":"#support-objects"},{"include":"#paren-expression"}]},"field-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.js variable.object.property.js"},{"match":"\\\\?","name":"keyword.operator.optional.js"},{"match":"!","name":"keyword.operator.definiteassignment.js"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","end":"(?<=\\\\))(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","name":"meta.function-call.js","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"},{"include":"#paren-expression"}]},{"begin":"(?=(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","end":"(?<=>)(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.js","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.js punctuation.accessor.optional.js"},{"match":"!","name":"meta.function-call.js keyword.operator.definiteassignment.js"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.js"}]},"function-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.js"},"2":{"name":"punctuation.accessor.optional.js"},"3":{"name":"variable.other.constant.property.js"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.js"},"2":{"name":"punctuation.accessor.optional.js"},"3":{"name":"variable.other.property.js"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.js"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.js"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?))","end":"(/>)|()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.js"},"2":{"name":"punctuation.definition.tag.begin.js"},"3":{"name":"entity.name.tag.namespace.js"},"4":{"name":"punctuation.separator.namespace.js"},"5":{"name":"entity.name.tag.js"},"6":{"name":"support.class.component.js"},"7":{"name":"punctuation.definition.tag.end.js"}},"name":"meta.tag.js","patterns":[{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.js"},"2":{"name":"entity.name.tag.namespace.js"},"3":{"name":"punctuation.separator.namespace.js"},"4":{"name":"entity.name.tag.js"},"5":{"name":"support.class.component.js"}},"end":"(?=/?>)","patterns":[{"include":"#comment"},{"include":"#type-arguments"},{"include":"#jsx-tag-attributes"}]},{"begin":"(>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.end.js"}},"contentName":"meta.jsx.children.js","end":"(?=)","patterns":[{"include":"#jsx-children"}]}]},"jsx-tag-attribute-assignment":{"match":"=(?=\\\\s*(?:[\\"\'{]|/\\\\*|//|\\\\n))","name":"keyword.operator.assignment.js"},"jsx-tag-attribute-name":{"captures":{"1":{"name":"entity.other.attribute-name.namespace.js"},"2":{"name":"punctuation.separator.namespace.js"},"3":{"name":"entity.other.attribute-name.js"}},"match":"\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(:))?([$_[:alpha:]][-$_[:alnum:]]*)(?=[=\\\\s]|/?>|/\\\\*|//)"},"jsx-tag-attributes":{"begin":"\\\\s+","end":"(?=/?>)","name":"meta.tag.attributes.js","patterns":[{"include":"#comment"},{"include":"#jsx-tag-attribute-name"},{"include":"#jsx-tag-attribute-assignment"},{"include":"#jsx-string-double-quoted"},{"include":"#jsx-string-single-quoted"},{"include":"#jsx-evaluated-code"},{"include":"#jsx-tag-attributes-illegal"}]},"jsx-tag-attributes-illegal":{"match":"\\\\S+","name":"invalid.illegal.attribute.js"},"jsx-tag-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?!<\\\\s*[$_[:alpha:]][$_[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,))(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag"}]},"jsx-tag-without-attributes":{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.js"},"2":{"name":"entity.name.tag.namespace.js"},"3":{"name":"punctuation.separator.namespace.js"},"4":{"name":"entity.name.tag.js"},"5":{"name":"support.class.component.js"},"6":{"name":"punctuation.definition.tag.end.js"}},"contentName":"meta.jsx.children.js","end":"()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.begin.js"},"2":{"name":"entity.name.tag.namespace.js"},"3":{"name":"punctuation.separator.namespace.js"},"4":{"name":"entity.name.tag.js"},"5":{"name":"support.class.component.js"},"6":{"name":"punctuation.definition.tag.end.js"}},"name":"meta.tag.without-attributes.js","patterns":[{"include":"#jsx-children"}]},"jsx-tag-without-attributes-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag-without-attributes"}]},"label":{"patterns":[{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)","beginCaptures":{"1":{"name":"entity.name.label.js"},"2":{"name":"punctuation.separator.label.js"}},"end":"(?<=})","patterns":[{"include":"#decl-block"}]},{"captures":{"1":{"name":"entity.name.label.js"},"2":{"name":"punctuation.separator.label.js"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)"}]},"literal":{"patterns":[{"include":"#numeric-literal"},{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#undefined-literal"},{"include":"#numericConstant-literal"},{"include":"#array-literal"},{"include":"#this-literal"},{"include":"#super-literal"}]},"method-declaration":{"patterns":[{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.js"},"2":{"name":"storage.modifier.js"},"3":{"name":"storage.modifier.js"},"4":{"name":"storage.modifier.async.js"},"5":{"name":"keyword.operator.new.js"},"6":{"name":"keyword.generator.asterisk.js"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.js","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.js"},"2":{"name":"storage.modifier.js"},"3":{"name":"storage.modifier.js"},"4":{"name":"storage.modifier.async.js"},"5":{"name":"storage.type.property.js"},"6":{"name":"keyword.generator.asterisk.js"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.js","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.js"},"2":{"name":"storage.type.property.js"},"3":{"name":"keyword.generator.asterisk.js"}},"end":"(?=[,;}])|(?<=})","name":"meta.method.declaration.js","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.js"},"2":{"name":"storage.type.property.js"},"3":{"name":"keyword.generator.asterisk.js"}},"end":"(?=[(<])","patterns":[{"include":"#method-declaration-name"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.js meta.object-literal.key.js","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.js meta.object-literal.key.js","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.js"},{"captures":{"0":{"name":"meta.object-literal.key.js"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.js"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.js"}},"end":"(?=[,}])","name":"meta.object.member.js","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.js"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.js"},{"captures":{"1":{"name":"keyword.control.as.js"},"2":{"name":"storage.modifier.js"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js"}},"end":"(?<=\\\\))","patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js"},"2":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(?=<\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.js"}},"end":"(?<=>)","patterns":[{"include":"#type-parameters"}]},{"begin":"(?<=>)\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"include":"#possibly-arrow-return-type"},{"include":"#expression"}]},{"include":"#punctuation-comma"},{"include":"#decl-block"}]},"parameter-array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js"},"2":{"name":"punctuation.definition.binding-pattern.array.js"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js"}},"patterns":[{"include":"#parameter-binding-element"},{"include":"#punctuation-comma"}]},"parameter-binding-element":{"patterns":[{"include":"#comment"},{"include":"#string"},{"include":"#numeric-literal"},{"include":"#regex"},{"include":"#parameter-object-binding-pattern"},{"include":"#parameter-array-binding-pattern"},{"include":"#destructuring-parameter-rest"},{"include":"#variable-initializer"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.js"}},"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.js"},"2":{"name":"keyword.operator.rest.js"},"3":{"name":"variable.parameter.js variable.language.this.js"},"4":{"name":"variable.parameter.js"},"5":{"name":"keyword.operator.optional.js"}},"match":"(?:(?])","name":"meta.type.annotation.js","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"patterns":[{"include":"#expression"}]},"paren-expression-possibly-arrow":{"patterns":[{"begin":"(?<=[(,=])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"begin":"(?<=[(,=]|=>|^return|[^$._[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)))\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.js"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"include":"#possibly-arrow-return-type"}]},"paren-expression-possibly-arrow-with-typeparameters":{"patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js"}},"contentName":"meta.arrow.js meta.return.type.arrow.js","end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","patterns":[{"include":"#arrow-return-type-body"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.js"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.js"},"2":{"name":"keyword.other.js"}},"name":"string.regexp.js","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","beginCaptures":{"0":{"name":"punctuation.definition.group.regexp"},"1":{"name":"punctuation.definition.group.no-capture.regexp"},"2":{"name":"variable.other.regexp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.regexp"}},"name":"meta.group.regexp","patterns":[{"include":"#regexp"}]},{"begin":"(\\\\[)(\\\\^)?","beginCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"},"2":{"name":"keyword.operator.negation.regexp"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"}},"name":"constant.other.character-class.set.regexp","patterns":[{"captures":{"1":{"name":"constant.character.numeric.regexp"},"2":{"name":"constant.character.control.regexp"},"3":{"name":"constant.character.escape.backslash.regexp"},"4":{"name":"constant.character.numeric.regexp"},"5":{"name":"constant.character.control.regexp"},"6":{"name":"constant.character.escape.backslash.regexp"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js"}},"end":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\()|(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$))"},{"captures":{"1":{"name":"support.type.object.module.js"},"2":{"name":"support.type.object.module.js"},"3":{"name":"punctuation.accessor.js"},"4":{"name":"punctuation.accessor.optional.js"},"5":{"name":"support.type.object.module.js"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.js"}]},{"include":"#type-arguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.js"}},"end":"(?=`)","patterns":[{"include":"#type-arguments"}]}]},"template-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.js"}},"contentName":"meta.embedded.line.js","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.js"}},"name":"meta.template.expression.js","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.js"},"2":{"name":"string.template.js punctuation.definition.string.template.begin.js"}},"contentName":"string.template.js","end":"`","endCaptures":{"0":{"name":"string.template.js punctuation.definition.string.template.end.js"}},"patterns":[{"include":"#template-type-substitution-element"},{"include":"#string-character-escape"}]}]},"template-type-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.js"}},"contentName":"meta.embedded.line.js","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.js"}},"name":"meta.template.expression.js","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.js"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.js"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.js","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.js","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.js"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.js"}},"name":"meta.type.parameters.js","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.js"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.js","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.js"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.js","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.js"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.js","patterns":[{"include":"#type-function-return-type-core"}]}]},"type-function-return-type-core":{"patterns":[{"include":"#comment"},{"begin":"(?<==>)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"type-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.js"},"2":{"name":"entity.name.type.js"},"3":{"name":"keyword.operator.expression.extends.js"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.js punctuation.definition.typeparameters.end.js"}},"patterns":[{"include":"#type-arguments-body"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<)","beginCaptures":{"1":{"name":"entity.name.type.js"},"2":{"name":"meta.type.parameters.js punctuation.definition.typeparameters.begin.js"}},"contentName":"meta.type.parameters.js","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.js punctuation.definition.typeparameters.end.js"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.js"},"2":{"name":"punctuation.accessor.js"},"3":{"name":"punctuation.accessor.optional.js"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.js"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.js"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.js"}},"name":"meta.object.type.js","patterns":[{"include":"#comment"},{"include":"#method-declaration"},{"include":"#indexer-declaration"},{"include":"#indexer-mapped-type-declaration"},{"include":"#field-declaration"},{"include":"#type-annotation"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.js"}},"end":"(?=[,;}]|$)|(?<=})","patterns":[{"include":"#type"}]},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"},{"include":"#type"}]},"type-operators":{"patterns":[{"include":"#typeof-operator"},{"include":"#type-infer"},{"begin":"([\\\\&|])(?=\\\\s*\\\\{)","beginCaptures":{"0":{"name":"keyword.operator.type.js"}},"end":"(?<=})","patterns":[{"include":"#type-object"}]},{"begin":"[\\\\&|]","beginCaptures":{"0":{"name":"keyword.operator.type.js"}},"end":"(?=\\\\S)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.js"}},"name":"meta.type.parameters.js","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.js"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js"}},"name":"meta.type.paren.cover.js","patterns":[{"captures":{"1":{"name":"storage.modifier.js"},"2":{"name":"keyword.operator.rest.js"},"3":{"name":"entity.name.function.js variable.language.this.js"},"4":{"name":"entity.name.function.js"},"5":{"name":"keyword.operator.optional.js"}},"match":"(?:(?)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))))"},{"captures":{"1":{"name":"storage.modifier.js"},"2":{"name":"keyword.operator.rest.js"},"3":{"name":"variable.parameter.js variable.language.this.js"},"4":{"name":"variable.parameter.js"},"5":{"name":"keyword.operator.optional.js"}},"match":"(?:(??{|}]|(extends\\\\s+)|$|;|^\\\\s*$|^\\\\s*(?:abstract|async|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|var|while)\\\\b)","patterns":[{"include":"#type-arguments"},{"include":"#expression"}]},"undefined-literal":{"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.js variable.other.constant.js entity.name.function.js"}},"end":"(?=$|^|[,;=}]|((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.js entity.name.function.js"},"2":{"name":"keyword.operator.definiteassignment.js"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.js"}},"end":"(?=$|^|[]),;}]|((?G0});var mT,G0,Ve=n1(()=>{mT=Object.freeze(JSON.parse('{"displayName":"CSS","name":"css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#combinator-invalid"},{"include":"#selector"},{"include":"#at-rules"},{"include":"#rule-list"}],"repository":{"arithmetic-operators":{"match":"[*/]|(?<=\\\\s|^)[-+](?=\\\\s|$)","name":"keyword.operator.arithmetic.css"},"at-rules":{"patterns":[{"begin":"\\\\A\\\\uFEFF?(?i:(?=\\\\s*@charset\\\\b))","end":";|(?=$)","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.charset.css","patterns":[{"captures":{"1":{"name":"invalid.illegal.not-lowercase.charset.css"},"2":{"name":"invalid.illegal.leading-whitespace.charset.css"},"3":{"name":"invalid.illegal.no-whitespace.charset.css"},"4":{"name":"invalid.illegal.whitespace.charset.css"},"5":{"name":"invalid.illegal.not-double-quoted.charset.css"},"6":{"name":"invalid.illegal.unclosed-string.charset.css"},"7":{"name":"invalid.illegal.unexpected-characters.charset.css"}},"match":"\\\\G((?!@charset)@\\\\w+)|\\\\G(\\\\s+)|(@charset\\\\S[^;]*)|(?<=@charset)( {2,}|\\\\t+)|(?<=@charset )([^\\";]+)|(\\"[^\\"]+)$|(?<=\\")([^;]+)"},{"captures":{"1":{"name":"keyword.control.at-rule.charset.css"},"2":{"name":"punctuation.definition.keyword.css"}},"match":"((@)charset)(?=\\\\s)"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"\\"|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.double.css","patterns":[{"begin":"(?:\\\\G|^)(?=[^\\"]+$)","end":"$","name":"invalid.illegal.unclosed.string.css"}]}]},{"begin":"(?i)((@)import)(?:\\\\s+|$|(?=[\\"\']|/\\\\*))","beginCaptures":{"1":{"name":"keyword.control.at-rule.import.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":";","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.import.css","patterns":[{"begin":"\\\\G\\\\s*(?=/\\\\*)","end":"(?<=\\\\*/)\\\\s*","patterns":[{"include":"#comment-block"}]},{"include":"#string"},{"include":"#url"},{"match":"\\\\s+"},{"include":"#layer-import"},{"include":"#media-query-list"}]},{"begin":"(?i)((@)font-face)(?=\\\\s*|\\\\{|/\\\\*|$)","beginCaptures":{"1":{"name":"keyword.control.at-rule.font-face.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":"(?!\\\\G)","name":"meta.at-rule.font-face.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list"}]},{"begin":"(?i)(@)page(?=[:{\\\\s]|/\\\\*|$)","captures":{"0":{"name":"keyword.control.at-rule.page.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*($|[:;{]))","name":"meta.at-rule.page.css","patterns":[{"include":"#rule-list"}]},{"begin":"(?i)(?=@media([(\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)media","beginCaptures":{"0":{"name":"keyword.control.at-rule.media.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.media.header.css","patterns":[{"include":"#media-query-list"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.media.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.media.end.bracket.curly.css"}},"name":"meta.at-rule.media.body.css","patterns":[{"include":"#rule-list-innards"},{"include":"$self"}]}]},{"begin":"(?i)(?=@counter-style([\\"\';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)counter-style","beginCaptures":{"0":{"name":"keyword.control.at-rule.counter-style.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*\\\\{)","name":"meta.at-rule.counter-style.header.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"captures":{"0":{"patterns":[{"include":"#escapes"}]}},"match":"[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.parameter.style-name.css"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.property-list.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.property-list.end.bracket.curly.css"}},"name":"meta.at-rule.counter-style.body.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list-innards"}]}]},{"begin":"(?i)(?=@document([\\"\';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)document","beginCaptures":{"0":{"name":"keyword.control.at-rule.document.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.document.header.css","patterns":[{"begin":"(?i)(?>>","name":"invalid.deprecated.combinator.css"},"combinators":{"patterns":[{"include":"#combinator-invalid"},{"match":">>|[+>~]","name":"keyword.operator.combinator.css"}]},"commas":{"match":",","name":"punctuation.separator.list.comma.css"},"comment-block":{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.css"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.css"}},"name":"comment.block.css"},"escapes":{"patterns":[{"match":"\\\\\\\\\\\\h{1,6}","name":"constant.character.escape.codepoint.css"},{"begin":"\\\\\\\\$\\\\s*","end":"^(?]|/\\\\*)"},"media-query":{"begin":"\\\\G","end":"(?=\\\\s*[;{])","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#media-types"},{"match":"(?i)(?<=\\\\s|^|,|\\\\*/)(only|not)(?=[{\\\\s]|/\\\\*|$)","name":"keyword.operator.logical.$1.media.css"},{"match":"(?i)(?<=\\\\s|^|\\\\*/|\\\\))and(?=\\\\s|/\\\\*|$)","name":"keyword.operator.logical.and.media.css"},{"match":",(?:(?:\\\\s*,)+|(?=\\\\s*[);{]))","name":"invalid.illegal.comma.css"},{"include":"#commas"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.css"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.css"}},"patterns":[{"include":"#media-features"},{"include":"#media-feature-keywords"},{"match":":","name":"punctuation.separator.key-value.css"},{"match":">=|<=|[<=>]","name":"keyword.operator.comparison.css"},{"captures":{"1":{"name":"constant.numeric.css"},"2":{"name":"keyword.operator.arithmetic.css"},"3":{"name":"constant.numeric.css"}},"match":"(\\\\d+)\\\\s*(/)\\\\s*(\\\\d+)","name":"meta.ratio.css"},{"include":"#numeric-values"},{"include":"#comment-block"},{"include":"#functions"}]}]},"media-query-list":{"begin":"(?=\\\\s*[^;{])","end":"(?=\\\\s*[;{])","patterns":[{"include":"#media-query"}]},"media-types":{"captures":{"1":{"name":"support.constant.media.css"},"2":{"name":"invalid.deprecated.constant.media.css"}},"match":"(?i)(?<=^|[,\\\\s]|\\\\*/)(?:(all|print|screen|speech)|(aural|braille|embossed|handheld|projection|tty|tv))(?=$|[,;{\\\\s]|/\\\\*)"},"numeric-values":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.constant.css"}},"match":"(#)(?:\\\\h{3,4}|\\\\h{6}|\\\\h{8})\\\\b","name":"constant.other.color.rgb-value.hex.css"},{"captures":{"1":{"name":"keyword.other.unit.percentage.css"},"2":{"name":"keyword.other.unit.${2:/downcase}.css"}},"match":"(?i)(?A-\\\\[a-z|~[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.)|[#.](?:[-\\\\w]|\\\\\\\\(?:\\\\h{1,6}|.))|::??[-A-Za-z])(?![-\\\\w]*:+\\\\s|[^{]*;|[^{]*}|[^:]+(::):+)","end":"(?=\\\\s*(?:[)/@{]|$))","name":"meta.selector.css","patterns":[{"include":"#selector-innards"}]},"selector-innards":{"patterns":[{"include":"#comment-block"},{"include":"#commas"},{"include":"#escapes"},{"include":"#combinators"},{"captures":{"1":{"name":"entity.other.namespace-prefix.css"},"2":{"name":"punctuation.separator.css"}},"match":"(?:^|(?<=[(,;}\\\\s]))(?![-*\\\\w]+\\\\|(?![-#\\\\&*.:A-\\\\[_a-z[^\\\\x00-\\\\x7F]]))([-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*|\\\\*)?(\\\\|)"},{"include":"#tag-names"},{"match":"&","name":"entity.name.tag.nesting.css"},{"match":"\\\\*","name":"entity.name.tag.wildcard.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"patterns":[{"include":"#escapes"}]}},"match":"(?\\\\[{|~\\\\s]|/\\\\*)|(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*(?:[]!\\"%\'(*;@^`|}]|/(?!\\\\*)|&(?=[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]))+)(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*)","name":"invalid.illegal.bad-identifier.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"patterns":[{"include":"#escapes"}]}},"match":"(\\\\.)((?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)(?=$|[#\\\\&)+,.:>\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"patterns":[{"include":"#escapes"}]}},"match":"(#)(-?(?![0-9])(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)(?=$|[#\\\\&)+,.:>\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.id.css"},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.entity.begin.bracket.square.css"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.entity.end.bracket.square.css"}},"name":"meta.attribute-selector.css","patterns":[{"include":"#comment-block"},{"include":"#string"},{"captures":{"1":{"name":"storage.modifier.ignore-case.css"}},"match":"(?<=[\\"\'\\\\s]|^|\\\\*/)\\\\s*([Ii])\\\\s*(?=[]\\\\s]|/\\\\*|$)"},{"captures":{"1":{"name":"string.unquoted.attribute-value.css","patterns":[{"include":"#escapes"}]}},"match":"(?<==)\\\\s*((?!/\\\\*)(?:[^]\\"\'\\\\\\\\\\\\s]|\\\\\\\\.)+)"},{"include":"#escapes"},{"match":"[$*^|~]?=","name":"keyword.operator.pattern.css"},{"match":"\\\\|","name":"punctuation.separator.css"},{"captures":{"1":{"name":"entity.other.namespace-prefix.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?:[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+|\\\\*)(?=\\\\|(?![=\\\\s]|$|])(?:-?(?!\\\\d)|[-\\\\\\\\\\\\w[^\\\\x00-\\\\x7F]]))"},{"captures":{"1":{"name":"entity.other.attribute-name.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?>[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)\\\\s*(?=[]$*=^|~]|/\\\\*)"}]},{"include":"#pseudo-classes"},{"include":"#pseudo-elements"},{"include":"#functional-pseudo-classes"},{"match":"(?\\\\[{|~\\\\s]|/\\\\*|$)","name":"entity.name.tag.css"},"unicode-range":{"captures":{"0":{"name":"constant.other.unicode-range.css"},"1":{"name":"punctuation.separator.dash.unicode-range.css"}},"match":"(?I2});var dT,I2,u4=n1(()=>{ee();Ve();dT=Object.freeze(JSON.parse('{"displayName":"HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"html","patterns":[{"include":"#xml-processing"},{"include":"#comment"},{"include":"#doctype"},{"include":"#cdata"},{"include":"#tags-valid"},{"include":"#tags-invalid"},{"include":"#entities"}],"repository":{"attribute":{"patterns":[{"begin":"(s(hape|cope|t(ep|art)|ize(s)?|p(ellcheck|an)|elected|lot|andbox|rc(set|doc|lang)?)|h(ttp-equiv|i(dden|gh)|e(ight|aders)|ref(lang)?)|n(o(nce|validate|module)|ame)|c(h(ecked|arset)|ite|o(nt(ent(editable)?|rols)|ords|l(s(pan)?|or))|lass|rossorigin)|t(ype(mustmatch)?|itle|a(rget|bindex)|ranslate)|i(s(map)?|n(tegrity|putmode)|tem(scope|type|id|prop|ref)|d)|op(timum|en)|d(i(sabled|r(name)?)|ownload|e(coding|f(er|ault))|at(etime|a)|raggable)|usemap|p(ing|oster|la(ysinline|ceholder)|attern|reload)|enctype|value|kind|for(m(novalidate|target|enctype|action|method)?)?|w(idth|rap)|l(ist|o(op|w)|a(ng|bel))|a(s(ync)?|c(ce(sskey|pt(-charset)?)|tion)|uto(c(omplete|apitalize)|play|focus)|l(t|low(usermedia|paymentrequest|fullscreen))|bbr)|r(ows(pan)?|e(versed|quired|ferrerpolicy|l|adonly))|m(in(length)?|u(ted|ltiple)|e(thod|dia)|a(nifest|x(length)?)))(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"style(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.style.html","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"punctuation.separator.key-value.html"}},"end":"(?<=[^=\\\\s])(?!\\\\s*=)|(?=/?>)","patterns":[{"begin":"(?=[^/<=>`\\\\s]|/(?!>))","end":"(?!\\\\G)","name":"meta.embedded.line.css","patterns":[{"captures":{"0":{"name":"source.css"}},"match":"([^\\"\'/<=>`\\\\s]|/(?!>))+","name":"string.unquoted.html"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"contentName":"source.css","end":"(\\")","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"},"1":{"name":"source.css"}},"name":"string.quoted.double.html","patterns":[{"include":"#entities"}]},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"contentName":"source.css","end":"(\')","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"},"1":{"name":"source.css"}},"name":"string.quoted.single.html","patterns":[{"include":"#entities"}]}]},{"match":"=","name":"invalid.illegal.unexpected-equals-sign.html"}]}]},{"begin":"on(s(croll|t(orage|alled)|u(spend|bmit)|e(curitypolicyviolation|ek(ing|ed)|lect))|hashchange|c(hange|o(ntextmenu|py)|u(t|echange)|l(ick|ose)|an(cel|play(through)?))|t(imeupdate|oggle)|in(put|valid)|o((?:n|ff)line)|d(urationchange|r(op|ag(start|over|e(n(ter|d)|xit)|leave)?)|blclick)|un(handledrejection|load)|p(opstate|lay(ing)?|a(ste|use|ge(show|hide))|rogress)|e(nded|rror|mptied)|volumechange|key(down|up|press)|focus|w(heel|aiting)|l(oad(start|e(nd|d((?:|meta)data)))?|anguagechange)|a(uxclick|fterprint|bort)|r(e(s(ize|et)|jectionhandled)|atechange)|m(ouse(o(ut|ver)|down|up|enter|leave|move)|essage(error)?)|b(efore(unload|print)|lur))(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.event-handler.$1.html","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"punctuation.separator.key-value.html"}},"end":"(?<=[^=\\\\s])(?!\\\\s*=)|(?=/?>)","patterns":[{"begin":"(?=[^/<=>`\\\\s]|/(?!>))","end":"(?!\\\\G)","name":"meta.embedded.line.js","patterns":[{"captures":{"0":{"name":"source.js"},"1":{"patterns":[{"include":"source.js"}]}},"match":"(([^\\"\'/<=>`\\\\s]|/(?!>))+)","name":"string.unquoted.html"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"contentName":"source.js","end":"(\\")","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"},"1":{"name":"source.js"}},"name":"string.quoted.double.html","patterns":[{"captures":{"0":{"patterns":[{"include":"source.js"}]}},"match":"([^\\\\n\\"/]|/(?![*/]))+"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"(?=\\")|\\\\n","name":"comment.line.double-slash.js"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.js"}},"end":"(?=\\")|\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.js"}},"name":"comment.block.js"}]},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"contentName":"source.js","end":"(\')","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"},"1":{"name":"source.js"}},"name":"string.quoted.single.html","patterns":[{"captures":{"0":{"patterns":[{"include":"source.js"}]}},"match":"([^\\\\n\'/]|/(?![*/]))+"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"(?=\')|\\\\n","name":"comment.line.double-slash.js"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.js"}},"end":"(?=\')|\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.js"}},"name":"comment.block.js"}]}]},{"match":"=","name":"invalid.illegal.unexpected-equals-sign.html"}]}]},{"begin":"(data-[-a-z]+)(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.data-x.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"(align|bgcolor|border)(?![-:\\\\w])","beginCaptures":{"0":{"name":"invalid.deprecated.entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"([^\\\\x00- \\"\'/<=>\\\\x7F-\\\\x{9F}\uFDD0-\uFDEF\uFFFE\uFFFF\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.unrecognized.$1.html","patterns":[{"include":"#attribute-interior"}]},{"match":"[^>\\\\s]+","name":"invalid.illegal.character-not-allowed-here.html"}]},"attribute-interior":{"patterns":[{"begin":"=","beginCaptures":{"0":{"name":"punctuation.separator.key-value.html"}},"end":"(?<=[^=\\\\s])(?!\\\\s*=)|(?=/?>)","patterns":[{"match":"([^\\"\'/<=>`\\\\s]|/(?!>))+","name":"string.unquoted.html"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"}},"name":"string.quoted.double.html","patterns":[{"include":"#entities"}]},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.html"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.html"}},"name":"string.quoted.single.html","patterns":[{"include":"#entities"}]},{"match":"=","name":"invalid.illegal.unexpected-equals-sign.html"}]}]},"cdata":{"begin":"","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.cdata.html"},"comment":{"begin":"","name":"comment.block.html","patterns":[{"match":"\\\\G-?>","name":"invalid.illegal.characters-not-allowed-here.html"},{"match":")|(?=-->))","name":"invalid.illegal.characters-not-allowed-here.html"},{"match":"--!>","name":"invalid.illegal.characters-not-allowed-here.html"}]},"core-minus-invalid":{"patterns":[{"include":"#xml-processing"},{"include":"#comment"},{"include":"#doctype"},{"include":"#cdata"},{"include":"#tags-valid"},{"include":"#entities"}]},"doctype":{"begin":"","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.doctype.html","patterns":[{"match":"\\\\G(?i:DOCTYPE)","name":"entity.name.tag.html"},{"begin":"\\"","end":"\\"","name":"string.quoted.double.html"},{"match":"[^>\\\\s]+","name":"entity.other.attribute-name.html"}]},"entities":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.entity.html"},"912":{"name":"punctuation.definition.entity.html"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))|(B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1([24])|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))|(c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr([lr])|p(s|c([au]p)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))|(e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1([34]))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|o(uriertrf|pf|rAll)|fr))|(G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))|(i(s(cr|in(s(v)?|dot|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))|(j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))|(k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))|(l(s(h|cr|trok|im([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))|(M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u((?:lti|)map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))|(n(s(hort(parallel|mid)|c(cue|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v([abc]))?|in(dot|v([abc])|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes((?:Slant|)Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi((?:n|ck)Space)|VeryThinSpace))|Jcy|fr|acute))|(o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|[fm])?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly((?:Double|)Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))|(p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d([ou])|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))|(q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))|(R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(d??il)|aron)|Barr|t(hree|imes|ri([ef]|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng([de]|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl([du])|e)|ac([ek]))|brk)|A(tail|arr|rr)))|(s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar([ef]))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort((?:Right|Down|Up|Left)Arrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))|(t(s(hcy|c([ry])|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead((?:lef|righ)tarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))|(w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))|(X(scr|i|opf|fr)|x(s(cr|qcup)|h([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|map))|(y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))|(z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(n?j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute)))(;)","name":"constant.character.entity.named.$2.html"},{"captures":{"1":{"name":"punctuation.definition.entity.html"},"3":{"name":"punctuation.definition.entity.html"}},"match":"(&)#[0-9]+(;)","name":"constant.character.entity.numeric.decimal.html"},{"captures":{"1":{"name":"punctuation.definition.entity.html"},"3":{"name":"punctuation.definition.entity.html"}},"match":"(&)#[Xx]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.html"},{"match":"&(?=[0-9A-Za-z]+;)","name":"invalid.illegal.ambiguous-ampersand.html"}]},"math":{"patterns":[{"begin":"(?i)(<)(math)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.structure.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)","endCaptures":{"0":{"name":"meta.tag.structure.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.structure.$2.html","patterns":[{"begin":"(?)\\\\G","end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]}],"repository":{"attribute":{"patterns":[{"begin":"(s(hift|ymmetric|cript(sizemultiplier|level|minsize)|t(ackalign|retchy)|ide|u([bp]scriptshift)|e(parator(s)?|lection)|rc)|h(eight|ref)|n(otation|umalign)|c(haralign|olumn(spa(n|cing)|width|lines|align)|lose|rossout)|i(n(dent(shift(first|last)?|target|align(first|last)?)|fixlinebreakstyle)|d)|o(pen|verflow)|d(i(splay(style)?|r)|e(nomalign|cimalpoint|pth))|position|e(dge|qual(columns|rows))|voffset|f(orm|ence|rame(spacing)?)|width|l(space|ine(thickness|leading|break(style|multchar)?)|o(ngdivstyle|cation)|ength|quote|argeop)|a(c(cent(under)?|tiontype)|l(t(text|img(-(height|valign|width))?)|ign(mentscope)?))|r(space|ow(spa(n|cing)|lines|align)|quote)|groupalign|x(link:href|mlns)|m(in(size|labelspacing)|ovablelimits|a(th(size|color|variant|background)|xsize))|bevelled)(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"([^\\\\x00- \\"\'/<=>\\\\x7F-\\\\x{9F}\uFDD0-\uFDEF\uFFFE\uFFFF\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.unrecognized.$1.html","patterns":[{"include":"#attribute-interior"}]},{"match":"[^>\\\\s]+","name":"invalid.illegal.character-not-allowed-here.html"}]},"tags":{"patterns":[{"include":"#comment"},{"include":"#cdata"},{"captures":{"0":{"name":"meta.tag.structure.math.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.structure.math.$2.html"},{"begin":"(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.structure.math.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.structure.math.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.structure.math.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.inline.math.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.inline.math.$2.html"},{"begin":"(?i)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.inline.math.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.inline.math.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.inline.math.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.object.math.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(mglyph)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.object.math.$2.html"},{"begin":"(?i)(<)(mglyph)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.object.math.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.object.math.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.object.math.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.other.invalid.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(([:\\\\w]+))(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.other.invalid.html"},{"begin":"(?i)(<)((\\\\w[^>\\\\s]*))(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.other.invalid.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()((\\\\2))\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.other.invalid.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"name":"punctuation.definition.tag.end.html"},"5":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.other.invalid.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.invalid.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"include":"#tags-invalid"}]}}},"svg":{"patterns":[{"begin":"(?i)(<)(svg)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.structure.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)","endCaptures":{"0":{"name":"meta.tag.structure.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.structure.$2.html","patterns":[{"begin":"(?)\\\\G","end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]}],"repository":{"attribute":{"patterns":[{"begin":"(s(hape-rendering|ystemLanguage|cale|t(yle|itchTiles|op-(color|opacity)|dDeviation|em([hv])|artOffset|r(i(ng|kethrough-(thickness|position))|oke(-(opacity|dash(offset|array)|width|line(cap|join)|miterlimit))?))|urfaceScale|p(e(cular(Constant|Exponent)|ed)|acing|readMethod)|eed|lope)|h(oriz-(origin-x|adv-x)|eight|anging|ref(lang)?)|y([12]|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS((?:cript|tyle)Type)|lor(-(interpolation(-filters)?|profile|rendering))?)|ursor|l(ip(-(path|rule)|PathUnits)?|ass)|a(p-height|lcMode)|x)|t(ype|o|ext(-(decoration|anchor|rendering)|Length)|a(rget([XY])?|b(index|leValues))|ransform)|i(n(tercept|2)?|d(eographic)?|mage-rendering)|z(oomAndPan)?|o(p(erator|acity)|ver(flow|line-(thickness|position))|ffset|r(i(ent(ation)?|gin)|der))|d(y|i(splay|visor|ffuseConstant|rection)|ominant-baseline|ur|e(scent|celerate)|x)?|u(1|n(i(code(-(range|bidi))?|ts-per-em)|derline-(thickness|position))|2)|p(ing|oint(s(At([XYZ]))?|er-events)|a(nose-1|t(h(Length)?|tern(ContentUnits|Transform|Units))|int-order)|r(imitiveUnits|eserveA(spectRatio|lpha)))|e(n(d|able-background)|dgeMode|levation|x(ternalResourcesRequired|ponent))|v(i(sibility|ew(Box|Target))|-(hanging|ideographic|alphabetic|mathematical)|e(ctor-effect|r(sion|t-(origin-([xy])|adv-y)))|alues)|k([123]|e(y(Splines|Times|Points)|rn(ing|el(Matrix|UnitLength)))|4)?|f(y|il(ter(Res|Units)?|l(-(opacity|rule))?)|o(nt-(s(t(yle|retch)|ize(-adjust)?)|variant|family|weight)|rmat)|lood-(color|opacity)|r(om)?|x)|w(idth(s)?|ord-spacing|riting-mode)|l(i(ghting-color|mitingConeAngle)|ocal|e(ngthAdjust|tter-spacing)|ang)|a(scent|cc(umulate|ent-height)|ttribute(Name|Type)|zimuth|dditive|utoReverse|l(ignment-baseline|phabetic|lowReorder)|rabic-form|mplitude)|r(y|otate|e(s(tart|ult)|ndering-intent|peat(Count|Dur)|quired(Extensions|Features)|f([XY]|errerPolicy)|l)|adius|x)?|g([12]|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x([12]|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk((?:Content|)Units)?|thematical|rker(Height|-(start|end|mid)|Units|Width)|x))|b(y|ias|egin|ase(Profile|line-shift|Frequency)|box))(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"([^\\\\x00- \\"\'/<=>\\\\x7F-\\\\x{9F}\uFDD0-\uFDEF\uFFFE\uFFFF\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\\\\x{4FFFE}\\\\x{4FFFF}\\\\x{5FFFE}\\\\x{5FFFF}\\\\x{6FFFE}\\\\x{6FFFF}\\\\x{7FFFE}\\\\x{7FFFF}\\\\x{8FFFE}\\\\x{8FFFF}\\\\x{9FFFE}\\\\x{9FFFF}\\\\x{AFFFE}\\\\x{AFFFF}\\\\x{BFFFE}\\\\x{BFFFF}\\\\x{CFFFE}\\\\x{CFFFF}\\\\x{DFFFE}\\\\x{DFFFF}\\\\x{EFFFE}\\\\x{EFFFF}\\\\x{FFFFE}\\\\x{FFFFF}\\\\x{10FFFE}\\\\x{10FFFF}]+)","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.unrecognized.$1.html","patterns":[{"include":"#attribute-interior"}]},{"match":"[^>\\\\s]+","name":"invalid.illegal.character-not-allowed-here.html"}]},"tags":{"patterns":[{"include":"#comment"},{"include":"#cdata"},{"captures":{"0":{"name":"meta.tag.metadata.svg.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.metadata.svg.$2.html"},{"begin":"(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.metadata.svg.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.metadata.svg.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.metadata.svg.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.structure.svg.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.structure.svg.$2.html"},{"begin":"(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.structure.svg.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.structure.svg.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.structure.svg.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.inline.svg.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.inline.svg.$2.html"},{"begin":"(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.inline.svg.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.inline.svg.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.inline.svg.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.object.svg.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.object.svg.$2.html"},{"begin":"(?i)(<)(a|circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.object.svg.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"patterns":[{"include":"#attribute"}]},"5":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()(\\\\2)\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.object.svg.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.object.svg.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.other.svg.$2.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.other.svg.$2.html"},{"begin":"(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.other.svg.$2.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()((\\\\2))\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.other.svg.$2.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"},"4":{"name":"punctuation.definition.tag.end.html"},"5":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.other.svg.$2.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"captures":{"0":{"name":"meta.tag.other.invalid.void.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"match":"(?i)(<)(([:\\\\w]+))(?=\\\\s|/?>)(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(/>)","name":"meta.element.other.invalid.html"},{"begin":"(?i)(<)((\\\\w[^>\\\\s]*))(?=\\\\s|/?>)(?:(([^\\"\'>]|\\"[^\\"]*\\"|\'[^\']*\')*)(>))?","beginCaptures":{"0":{"name":"meta.tag.other.invalid.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"patterns":[{"include":"#attribute"}]},"6":{"name":"punctuation.definition.tag.end.html"}},"end":"(?i)()((\\\\2))\\\\s*(>)|(/>)|(?=\\\\w+)","endCaptures":{"0":{"name":"meta.tag.other.invalid.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.unrecognized-tag.html"},"4":{"name":"punctuation.definition.tag.end.html"},"5":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.element.other.invalid.html","patterns":[{"begin":"(?)\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.invalid.start.html","patterns":[{"include":"#attribute"}]},{"include":"#tags"}]},{"include":"#tags-invalid"}]}}},"tags-invalid":{"patterns":[{"begin":"(?)((\\\\w[^>\\\\s]*))(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.$2.html","patterns":[{"include":"#attribute"}]}]},"tags-valid":{"patterns":[{"begin":"(^[\\\\t ]+)?(?=<(?i:style)\\\\b(?!-))","beginCaptures":{"1":{"name":"punctuation.whitespace.embedded.leading.html"}},"end":"(?!\\\\G)([\\\\t ]*$\\\\n?)?","endCaptures":{"1":{"name":"punctuation.whitespace.embedded.trailing.html"}},"patterns":[{"begin":"(?i)(<)(style)(?=\\\\s|/?>)","beginCaptures":{"0":{"name":"meta.tag.metadata.style.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"(?i)((<)/)(style)\\\\s*(>)","endCaptures":{"0":{"name":"meta.tag.metadata.style.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"source.css-ignored-vscode"},"3":{"name":"entity.name.tag.html"},"4":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.embedded.block.html","patterns":[{"begin":"\\\\G","captures":{"1":{"name":"punctuation.definition.tag.end.html"}},"end":"(>)","name":"meta.tag.metadata.style.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?!\\\\G)","end":"(?=(?i:style))","name":"source.css","patterns":[{"include":"source.css"}]}]}]},{"begin":"(^[\\\\t ]+)?(?=<(?i:script)\\\\b(?!-))","beginCaptures":{"1":{"name":"punctuation.whitespace.embedded.leading.html"}},"end":"(?!\\\\G)([\\\\t ]*$\\\\n?)?","endCaptures":{"1":{"name":"punctuation.whitespace.embedded.trailing.html"}},"patterns":[{"begin":"(<)((?i:script))\\\\b","beginCaptures":{"0":{"name":"meta.tag.metadata.script.start.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"(/)((?i:script))(>)","endCaptures":{"0":{"name":"meta.tag.metadata.script.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.embedded.block.html","patterns":[{"begin":"\\\\G","end":"(?=/)","patterns":[{"begin":"(>)","beginCaptures":{"0":{"name":"meta.tag.metadata.script.start.html"},"1":{"name":"punctuation.definition.tag.end.html"}},"end":"((<))(?=/(?i:script))","endCaptures":{"0":{"name":"meta.tag.metadata.script.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"source.js-ignored-vscode"}},"patterns":[{"begin":"\\\\G","end":"(?=(?i:script))","name":"source.js","patterns":[{"begin":"(^[\\\\t ]+)?(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.js"}},"end":"(?!\\\\G)","patterns":[{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"(?=<\/script)|\\\\n","name":"comment.line.double-slash.js"}]},{"begin":"/\\\\*","captures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"\\\\*/|(?=<\/script)","name":"comment.block.js"},{"include":"source.js"}]}]},{"begin":"\\\\G","end":"(?i:(?=>|type(?=[=\\\\s])(?!\\\\s*=\\\\s*(\'\'|\\"\\"|([\\"\']?)(text/(javascript(1\\\\.[0-5])?|x-javascript|jscript|livescript|(x-)?ecmascript|babel)|application/((?:(x-)?jav|(x-)?ecm)ascript)|module)[\\"\'>\\\\s]))))","name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i:(?=type\\\\s*=\\\\s*([\\"\']?)text/(x-handlebars|(x-(handlebars-)?|ng-)?template|html)[\\"\'>\\\\s]))","end":"((<))(?=/(?i:script))","endCaptures":{"0":{"name":"meta.tag.metadata.script.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"text.html.basic"}},"patterns":[{"begin":"\\\\G","end":"(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?!\\\\G)","end":"(?=(?i:script))","name":"text.html.basic","patterns":[{"include":"text.html.basic"}]}]},{"begin":"(?=(?i:type))","end":"(<)(?=/(?i:script))","endCaptures":{"0":{"name":"meta.tag.metadata.script.end.html"},"1":{"name":"punctuation.definition.tag.begin.html"}},"patterns":[{"begin":"\\\\G","end":"(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?!\\\\G)","end":"(?=(?i:script))","name":"source.unknown"}]}]}]}]},{"begin":"(?i)(<)(base|link|meta)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(noscript|title)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()(noscript|title)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(col|hr|input)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(area|br|wbr)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(embed|img|param|source|track)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)(audio|canvas|iframe|object|picture|video)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()(audio|canvas|iframe|object|picture|video)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((basefont|isindex))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((center|frameset|noembed|noframes))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()((center|frameset|noembed|noframes))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.structure.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((acronym|big|blink|font|strike|tt|xmp))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()((acronym|big|blink|font|strike|tt|xmp))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.inline.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((frame))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.void.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((applet))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()((applet))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.deprecated.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.object.$2.end.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)(<)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.no-longer-supported.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.$2.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i)()((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"},"3":{"name":"invalid.illegal.no-longer-supported.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.$2.end.html","patterns":[{"include":"#attribute"}]},{"include":"#math"},{"include":"#svg"},{"begin":"(<)([A-Za-z][.0-9A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\\\\x{EFFFF}]*-[-.0-9A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\\\\x{EFFFF}]*)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.custom.start.html","patterns":[{"include":"#attribute"}]},{"begin":"()([A-Za-z][.0-9A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\\\\x{EFFFF}]*-[-.0-9A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\\\\x{EFFFF}]*)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.custom.end.html","patterns":[{"include":"#attribute"}]}]},"xml-processing":{"begin":"(<\\\\?)(xml)","captures":{"1":{"name":"punctuation.definition.tag.html"},"2":{"name":"entity.name.tag.html"}},"end":"(\\\\?>)","name":"meta.tag.metadata.processing.xml.html","patterns":[{"include":"#attribute"}]}},"scopeName":"text.html.basic","embeddedLangs":["javascript","css"]}')),I2=[...w0,...G0,dT]});var hT,G_,O_=n1(()=>{ee();Ve();hT=Object.freeze(JSON.parse('{"displayName":"Ruby Haml","fileTypes":["haml","html.haml"],"foldingStartMarker":"^\\\\s*([-#%.:=\\\\w].*)\\\\s$","foldingStopMarker":"^\\\\s*$","name":"haml","patterns":[{"begin":"^(\\\\s*)==","contentName":"string.quoted.double.ruby","end":"$\\\\n*","patterns":[{"include":"#interpolated_ruby"}]},{"begin":"^(\\\\s*):ruby","end":"^(?!\\\\1\\\\s+|$\\\\n*)","name":"source.ruby.embedded.filter.haml","patterns":[{"include":"source.ruby"}]},{"captures":{"1":{"name":"punctuation.definition.prolog.haml"}},"match":"^(!!!)($|\\\\s.*)","name":"meta.prolog.haml"},{"begin":"^(\\\\s*):javascript","end":"^(?!\\\\1\\\\s+|$\\\\n*)","name":"js.haml","patterns":[{"include":"source.js"}]},{"begin":"^(\\\\s*)%script","end":"^(?!\\\\1\\\\s+|$\\\\n*)","name":"js.inline.haml","patterns":[{"include":"source.js"}]},{"begin":"^(\\\\s*):ruby$","end":"^(?!\\\\1\\\\s+|$\\\\n*)","name":"source.ruby.embedded.filter.haml","patterns":[{"include":"source.ruby"}]},{"captures":{"1":{"name":"punctuation.section.comment.haml"}},"match":"^(\\\\s*)(/\\\\[[^]].*?$\\\\n?)","name":"comment.line.slash.haml"},{"begin":"^(\\\\s*)(-#|/|-\\\\s*/\\\\*+)","beginCaptures":{"2":{"name":"punctuation.section.comment.haml"}},"end":"^(?!\\\\1\\\\s+|\\\\n)","name":"comment.block.haml","patterns":[{"include":"text.haml"}]},{"begin":"^\\\\s*(?:((%)([-:\\\\w]+))|(?=[#.]))","captures":{"1":{"name":"meta.tag.haml"},"2":{"name":"punctuation.definition.tag.haml"},"3":{"name":"entity.name.tag.haml"}},"end":"$|(?![#(.\\\\[{]|&|[-=~]|!=|&=|/)","patterns":[{"begin":"==","contentName":"string.quoted.double.ruby","end":"$\\\\n?","patterns":[{"include":"#interpolated_ruby"}]},{"captures":{"1":{"name":"entity.other.attribute-name.class"}},"match":"(\\\\.[-:\\\\w]+)","name":"meta.selector.css"},{"captures":{"1":{"name":"entity.other.attribute-name.id"}},"match":"(#[-\\\\w]+)","name":"meta.selector.css"},{"begin":"(?Zo});var gT,Zo,Eo=n1(()=>{gT=Object.freeze(JSON.parse('{"displayName":"Java","name":"java","patterns":[{"begin":"\\\\b(package)\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.other.package.java"}},"contentName":"storage.modifier.package.java","end":"\\\\s*(;)","endCaptures":{"1":{"name":"punctuation.terminator.java"}},"name":"meta.package.java","patterns":[{"include":"#comments"},{"match":"(?<=\\\\.)\\\\s*\\\\.|\\\\.(?=\\\\s*;)","name":"invalid.illegal.character_not_allowed_here.java"},{"match":"(?","endCaptures":{"0":{"name":"punctuation.bracket.angle.java"}},"patterns":[{"match":"\\\\b(extends|super)\\\\b","name":"storage.modifier.$1.java"},{"captures":{"1":{"name":"storage.type.java"}},"match":"(?>>?|[\\\\^~])","name":"keyword.operator.bitwise.java"},{"match":"(([\\\\&^|]|<<|>>>?)=)","name":"keyword.operator.assignment.bitwise.java"},{"match":"(===?|!=|<=|>=|<>|[<>])","name":"keyword.operator.comparison.java"},{"match":"([-%*+/]=)","name":"keyword.operator.assignment.arithmetic.java"},{"match":"(=)","name":"keyword.operator.assignment.java"},{"match":"(--|\\\\+\\\\+)","name":"keyword.operator.increment-decrement.java"},{"match":"([-%*+/])","name":"keyword.operator.arithmetic.java"},{"match":"(!|&&|\\\\|\\\\|)","name":"keyword.operator.logical.java"},{"match":"([\\\\&|])","name":"keyword.operator.bitwise.java"},{"match":"\\\\b(const|goto)\\\\b","name":"keyword.reserved.java"}]},"lambda-expression":{"patterns":[{"match":"->","name":"storage.type.function.arrow.java"}]},"member-variables":{"begin":"(?=private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)","end":"(?=[;=])","patterns":[{"include":"#storage-modifiers"},{"include":"#variables"},{"include":"#primitive-arrays"},{"include":"#object-types"}]},"method-call":{"begin":"(\\\\.)\\\\s*([$A-Z_a-z][$\\\\w]*)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"punctuation.separator.period.java"},"2":{"name":"entity.name.function.java"},"3":{"name":"punctuation.definition.parameters.begin.bracket.round.java"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.java"}},"name":"meta.method-call.java","patterns":[{"include":"#code"}]},"methods":{"begin":"(?!new)(?=[<\\\\w].*\\\\s+)(?=([^/=]|/(?!/))+\\\\()","end":"(})|(?=;)","endCaptures":{"1":{"name":"punctuation.section.method.end.bracket.curly.java"}},"name":"meta.method.java","patterns":[{"include":"#storage-modifiers"},{"begin":"(\\\\w+)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.java"},"2":{"name":"punctuation.definition.parameters.begin.bracket.round.java"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.java"}},"name":"meta.method.identifier.java","patterns":[{"include":"#parameters"},{"include":"#parens"},{"include":"#comments"}]},{"include":"#generics"},{"begin":"(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()","end":"(?=\\\\s+\\\\w+\\\\s*\\\\()","name":"meta.method.return-type.java","patterns":[{"include":"#all-types"},{"include":"#parens"},{"include":"#comments"}]},{"include":"#throws"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.method.begin.bracket.curly.java"}},"contentName":"meta.method.body.java","end":"(?=})","patterns":[{"include":"#code"}]},{"include":"#comments"}]},"module":{"begin":"((open)\\\\s)?(module)\\\\s+(\\\\w+)","beginCaptures":{"1":{"name":"storage.modifier.java"},"3":{"name":"storage.modifier.java"},"4":{"name":"entity.name.type.module.java"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.module.end.bracket.curly.java"}},"name":"meta.module.java","patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.module.begin.bracket.curly.java"}},"contentName":"meta.module.body.java","end":"(?=})","patterns":[{"include":"#comments"},{"include":"#comments-javadoc"},{"match":"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b","name":"keyword.module.java"}]}]},"numbers":{"patterns":[{"match":"\\\\b(?)?(\\\\()","beginCaptures":{"1":{"name":"storage.modifier.java"},"2":{"name":"entity.name.type.record.java"},"3":{"patterns":[{"include":"#generics"}]},"4":{"name":"punctuation.definition.parameters.begin.bracket.round.java"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.java"}},"name":"meta.record.identifier.java","patterns":[{"include":"#code"}]},{"begin":"(implements)\\\\s","beginCaptures":{"1":{"name":"storage.modifier.implements.java"}},"end":"(?=\\\\s*\\\\{)","name":"meta.definition.class.implemented.interfaces.java","patterns":[{"include":"#object-types-inherited"},{"include":"#comments"}]},{"include":"#record-body"}]},"record-body":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.class.begin.bracket.curly.java"}},"end":"(?=})","name":"meta.record.body.java","patterns":[{"include":"#record-constructor"},{"include":"#class-body"}]},"record-constructor":{"begin":"(?!new)(?=[<\\\\w].*\\\\s+)(?=([^(/=]|/(?!/))+(?=\\\\{))","end":"(})|(?=;)","endCaptures":{"1":{"name":"punctuation.section.method.end.bracket.curly.java"}},"name":"meta.method.java","patterns":[{"include":"#storage-modifiers"},{"begin":"(\\\\w+)","beginCaptures":{"1":{"name":"entity.name.function.java"}},"end":"(?=\\\\s*\\\\{)","name":"meta.method.identifier.java","patterns":[{"include":"#comments"}]},{"include":"#comments"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.method.begin.bracket.curly.java"}},"contentName":"meta.method.body.java","end":"(?=})","patterns":[{"include":"#code"}]}]},"static-initializer":{"patterns":[{"include":"#anonymous-block-and-instance-initializer"},{"match":"static","name":"storage.modifier.java"}]},"storage-modifiers":{"match":"\\\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|volatile|default|strictfp|sealed|non-sealed)\\\\b","name":"storage.modifier.java"},"strings":{"patterns":[{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.java"}},"end":"\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.java"}},"name":"string.quoted.triple.java","patterns":[{"match":"(\\\\\\\\\\"\\"\\")(?!\\")|(\\\\\\\\.)","name":"constant.character.escape.java"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.java"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.java"}},"name":"string.quoted.double.java","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.java"}]},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.java"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.java"}},"name":"string.quoted.single.java","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.java"}]}]},"throws":{"begin":"throws","beginCaptures":{"0":{"name":"storage.modifier.java"}},"end":"(?=[;{])","name":"meta.throwables.java","patterns":[{"match":",","name":"punctuation.separator.delimiter.java"},{"match":"[$A-Z_a-z][$.0-9A-Z_a-z]*","name":"storage.type.java"},{"include":"#comments"}]},"try-catch-finally":{"patterns":[{"begin":"\\\\btry\\\\b","beginCaptures":{"0":{"name":"keyword.control.try.java"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.try.end.bracket.curly.java"}},"name":"meta.try.java","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.try.resources.begin.bracket.round.java"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.try.resources.end.bracket.round.java"}},"name":"meta.try.resources.java","patterns":[{"include":"#code"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.try.begin.bracket.curly.java"}},"contentName":"meta.try.body.java","end":"(?=})","patterns":[{"include":"#code"}]}]},{"begin":"\\\\b(catch)\\\\b","beginCaptures":{"1":{"name":"keyword.control.catch.java"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.catch.end.bracket.curly.java"}},"name":"meta.catch.java","patterns":[{"include":"#comments"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.java"}},"contentName":"meta.catch.parameters.java","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.java"}},"patterns":[{"include":"#comments"},{"include":"#storage-modifiers"},{"begin":"[$A-Z_a-z][$.0-9A-Z_a-z]*","beginCaptures":{"0":{"name":"storage.type.java"}},"end":"(\\\\|)|(?=\\\\))","endCaptures":{"1":{"name":"punctuation.catch.separator.java"}},"patterns":[{"include":"#comments"},{"captures":{"0":{"name":"variable.parameter.java"}},"match":"\\\\w+"}]}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.catch.begin.bracket.curly.java"}},"contentName":"meta.catch.body.java","end":"(?=})","patterns":[{"include":"#code"}]}]},{"begin":"\\\\bfinally\\\\b","beginCaptures":{"0":{"name":"keyword.control.finally.java"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.finally.end.bracket.curly.java"}},"name":"meta.finally.java","patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.finally.begin.bracket.curly.java"}},"contentName":"meta.finally.body.java","end":"(?=})","patterns":[{"include":"#code"}]}]}]},"variables":{"begin":"(?=\\\\b((void|boolean|byte|char|short|int|float|long|double)|(?>(\\\\w+\\\\.)*[A-Z_]+\\\\w*))\\\\b\\\\s*(<[],.<>?\\\\[\\\\w\\\\s]*>)?\\\\s*((\\\\[])*)?\\\\s+[$A-Z_a-z][$\\\\w]*([]$,\\\\[\\\\w][],\\\\[\\\\w\\\\s]*)?\\\\s*([:;=]))","end":"(?=[:;=])","name":"meta.definition.variable.java","patterns":[{"captures":{"1":{"name":"variable.other.definition.java"}},"match":"([$A-Z_a-z][$\\\\w]*)(?=\\\\s*(\\\\[])*\\\\s*([,:;=]))"},{"include":"#all-types"},{"include":"#code"}]},"variables-local":{"begin":"(?=\\\\b(var)\\\\b\\\\s+[$A-Z_a-z][$\\\\w]*\\\\s*([:;=]))","end":"(?=[:;=])","name":"meta.definition.variable.local.java","patterns":[{"match":"\\\\bvar\\\\b","name":"storage.type.local.java"},{"captures":{"1":{"name":"variable.other.definition.java"}},"match":"([$A-Z_a-z][$\\\\w]*)(?=\\\\s*(\\\\[])*\\\\s*([:;=]))"},{"include":"#code"}]}},"scopeName":"source.java"}')),Zo=[gT]});var U_={};u1(U_,{default:()=>y3});var bT,y3,rt=n1(()=>{Eo();bT=Object.freeze(JSON.parse('{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"()","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?>\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)()((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"()","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}')),y3=[...Zo,bT]});var X_={};u1(X_,{default:()=>_3});var fT,_3,st=n1(()=>{fT=Object.freeze(JSON.parse('{"displayName":"SQL","name":"sql","patterns":[{"match":"((?]?=|<>|[<>]","name":"keyword.operator.comparison.sql"},{"match":"[-+/]","name":"keyword.operator.math.sql"},{"match":"\\\\|\\\\|","name":"keyword.operator.concatenator.sql"},{"captures":{"1":{"name":"support.function.aggregate.sql"}},"match":"(?i)\\\\b(approx_count_distinct|approx_percentile_cont|approx_percentile_disc|avg|checksum_agg|count|count_big|group|grouping|grouping_id|max|min|sum|stdevp??|varp??)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.analytic.sql"}},"match":"(?i)\\\\b(cume_dist|first_value|lag|last_value|lead|percent_rank|percentile_cont|percentile_disc)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.bitmanipulation.sql"}},"match":"(?i)\\\\b((?:bit_coun|get_bi|left_shif|right_shif|set_bi)t)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.conversion.sql"}},"match":"(?i)\\\\b(cast|convert|parse|try_cast|try_convert|try_parse)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.collation.sql"}},"match":"(?i)\\\\b(collationproperty|tertiary_weights)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.cryptographic.sql"}},"match":"(?i)\\\\b(asymkey_id|asymkeyproperty|certproperty|cert_id|crypt_gen_random|decryptbyasymkey|decryptbycert|decryptbykey|decryptbykeyautoasymkey|decryptbykeyautocert|decryptbypassphrase|encryptbyasymkey|encryptbycert|encryptbykey|encryptbypassphrase|hashbytes|is_objectsigned|key_guid|key_id|key_name|signbyasymkey|signbycert|symkeyproperty|verifysignedbycert|verifysignedbyasymkey)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.cursor.sql"}},"match":"(?i)\\\\b(cursor_status)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.datetime.sql"}},"match":"(?i)\\\\b(sysdatetime|sysdatetimeoffset|sysutcdatetime|current_time(stamp)?|getdate|getutcdate|datename|datepart|day|month|year|datefromparts|datetime2fromparts|datetimefromparts|datetimeoffsetfromparts|smalldatetimefromparts|timefromparts|datediff|dateadd|datetrunc|eomonth|switchoffset|todatetimeoffset|isdate|date_bucket)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.datatype.sql"}},"match":"(?i)\\\\b(datalength|ident_current|ident_incr|ident_seed|identity|sql_variant_property)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.expression.sql"}},"match":"(?i)\\\\b(coalesce|nullif)\\\\b\\\\s*\\\\("},{"captures":{"1":{"name":"support.function.globalvar.sql"}},"match":"(?{vT=Object.freeze(JSON.parse('{"displayName":"JSX","name":"jsx","patterns":[{"include":"#directives"},{"include":"#statements"},{"include":"#shebang"}],"repository":{"access-modifier":{"match":"(??\\\\[]|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^yield|[^$._[:alnum:]]yield|^throw|[^$._[:alnum:]]throw|^in|[^$._[:alnum:]]in|^of|[^$._[:alnum:]]of|^typeof|[^$._[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.definition.block.js.jsx"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.js.jsx"}},"name":"meta.objectliteral.js.jsx","patterns":[{"include":"#object-member"}]},"array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js.jsx"},"2":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"patterns":[{"include":"#binding-element"},{"include":"#punctuation-comma"}]},"array-binding-pattern-const":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js.jsx"},"2":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"patterns":[{"include":"#binding-element-const"},{"include":"#punctuation-comma"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.js.jsx"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.js.jsx"}},"name":"meta.array.literal.js.jsx","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.js.jsx"},"2":{"name":"variable.parameter.js.jsx"}},"match":"(?:(?)","name":"meta.arrow.js.jsx"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.arrow.js.jsx","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.js.jsx"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.js.jsx","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"begin":"(?<=\\\\))\\\\s*(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js.jsx"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.return.type.arrow.js.jsx","patterns":[{"include":"#arrow-return-type-body"}]},"arrow-return-type-body":{"patterns":[{"begin":"(?<=:)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"async-modifier":{"match":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.js.jsx"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.js.jsx","patterns":[{"begin":"(<)(reference|amd-dependency|amd-module)","beginCaptures":{"1":{"name":"punctuation.definition.tag.directive.js.jsx"},"2":{"name":"entity.name.tag.directive.js.jsx"}},"end":"/>","endCaptures":{"0":{"name":"punctuation.definition.tag.directive.js.jsx"}},"name":"meta.tag.js.jsx","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.js.jsx"},{"match":"=","name":"keyword.operator.assignment.js.jsx"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"5":{"name":"constant.other.email.link.underline.jsdoc"},"6":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"match":"((@)author)\\\\s+([^*/<>@\\\\s](?:[^*/<>@]|\\\\*[^/])*)(?:\\\\s*(<)([^>\\\\s]+)(>))?"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"begin":"\\\\G(<)caption(>)","beginCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"contentName":"constant.other.description.jsdoc","end":"()caption(>)|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.js.jsx"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)kind)\\\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"begin":"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"captures":{"1":{"name":"punctuation.definition.optional-value.begin.bracket.square.jsdoc"},"2":{"name":"keyword.operator.assignment.jsdoc"},"3":{"name":"source.embedded.js.jsx"},"4":{"name":"punctuation.definition.optional-value.end.bracket.square.jsdoc"},"5":{"name":"invalid.illegal.syntax.jsdoc"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\\\s+((?:[^*@{}\\\\s]|\\\\*[^/])+)"},{"begin":"((@)(?:default(?:value)?|license|version))\\\\s+(([\\"\']))","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"},"4":{"name":"punctuation.definition.string.begin.jsdoc"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\\\b","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"keyword.operator.rest.js.jsx"},"3":{"name":"variable.parameter.js.jsx variable.language.this.js.jsx"},"4":{"name":"variable.parameter.js.jsx"},"5":{"name":"keyword.operator.optional.js.jsx"}},"match":"(?:(??}]|\\\\|\\\\||&&|!==|$|((?>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.js.jsx"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.js.jsx"},{"match":"[!=]==?","name":"keyword.operator.comparison.js.jsx"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.js.jsx"},{"captures":{"1":{"name":"keyword.operator.logical.js.jsx"},"2":{"name":"keyword.operator.assignment.compound.js.jsx"},"3":{"name":"keyword.operator.arithmetic.js.jsx"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","name":"keyword.operator.logical.js.jsx"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.js.jsx"},{"match":"=","name":"keyword.operator.assignment.js.jsx"},{"match":"--","name":"keyword.operator.decrement.js.jsx"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.js.jsx"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.js.jsx"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.js.jsx"},"2":{"name":"keyword.operator.arithmetic.js.jsx"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.js.jsx"},"2":{"name":"keyword.operator.arithmetic.js.jsx"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"expressionWithoutIdentifiers":{"patterns":[{"include":"#jsx"},{"include":"#string"},{"include":"#regex"},{"include":"#comment"},{"include":"#function-expression"},{"include":"#class-expression"},{"include":"#arrow-function"},{"include":"#paren-expression-possibly-arrow"},{"include":"#cast"},{"include":"#ternary-expression"},{"include":"#new-expr"},{"include":"#instanceof-expr"},{"include":"#object-literal"},{"include":"#expression-operators"},{"include":"#function-call"},{"include":"#literal"},{"include":"#support-objects"},{"include":"#paren-expression"}]},"field-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.js.jsx variable.object.property.js.jsx"},{"match":"\\\\?","name":"keyword.operator.optional.js.jsx"},{"match":"!","name":"keyword.operator.definiteassignment.js.jsx"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","end":"(?<=\\\\))(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","name":"meta.function-call.js.jsx","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"},{"include":"#paren-expression"}]},{"begin":"(?=(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","end":"(?<=>)(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.js.jsx","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.js.jsx punctuation.accessor.optional.js.jsx"},{"match":"!","name":"meta.function-call.js.jsx keyword.operator.definiteassignment.js.jsx"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.js.jsx"}]},"function-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.js.jsx"},"2":{"name":"punctuation.accessor.optional.js.jsx"},"3":{"name":"variable.other.constant.property.js.jsx"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.js.jsx"},"2":{"name":"punctuation.accessor.optional.js.jsx"},"3":{"name":"variable.other.property.js.jsx"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.js.jsx"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.js.jsx"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?))","end":"(/>)|()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.js.jsx"},"2":{"name":"punctuation.definition.tag.begin.js.jsx"},"3":{"name":"entity.name.tag.namespace.js.jsx"},"4":{"name":"punctuation.separator.namespace.js.jsx"},"5":{"name":"entity.name.tag.js.jsx"},"6":{"name":"support.class.component.js.jsx"},"7":{"name":"punctuation.definition.tag.end.js.jsx"}},"name":"meta.tag.js.jsx","patterns":[{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.js.jsx"},"2":{"name":"entity.name.tag.namespace.js.jsx"},"3":{"name":"punctuation.separator.namespace.js.jsx"},"4":{"name":"entity.name.tag.js.jsx"},"5":{"name":"support.class.component.js.jsx"}},"end":"(?=/?>)","patterns":[{"include":"#comment"},{"include":"#type-arguments"},{"include":"#jsx-tag-attributes"}]},{"begin":"(>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.end.js.jsx"}},"contentName":"meta.jsx.children.js.jsx","end":"(?=)","patterns":[{"include":"#jsx-children"}]}]},"jsx-tag-attribute-assignment":{"match":"=(?=\\\\s*(?:[\\"\'{]|/\\\\*|//|\\\\n))","name":"keyword.operator.assignment.js.jsx"},"jsx-tag-attribute-name":{"captures":{"1":{"name":"entity.other.attribute-name.namespace.js.jsx"},"2":{"name":"punctuation.separator.namespace.js.jsx"},"3":{"name":"entity.other.attribute-name.js.jsx"}},"match":"\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(:))?([$_[:alpha:]][-$_[:alnum:]]*)(?=[=\\\\s]|/?>|/\\\\*|//)"},"jsx-tag-attributes":{"begin":"\\\\s+","end":"(?=/?>)","name":"meta.tag.attributes.js.jsx","patterns":[{"include":"#comment"},{"include":"#jsx-tag-attribute-name"},{"include":"#jsx-tag-attribute-assignment"},{"include":"#jsx-string-double-quoted"},{"include":"#jsx-string-single-quoted"},{"include":"#jsx-evaluated-code"},{"include":"#jsx-tag-attributes-illegal"}]},"jsx-tag-attributes-illegal":{"match":"\\\\S+","name":"invalid.illegal.attribute.js.jsx"},"jsx-tag-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?!<\\\\s*[$_[:alpha:]][$_[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,))(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag"}]},"jsx-tag-without-attributes":{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.js.jsx"},"2":{"name":"entity.name.tag.namespace.js.jsx"},"3":{"name":"punctuation.separator.namespace.js.jsx"},"4":{"name":"entity.name.tag.js.jsx"},"5":{"name":"support.class.component.js.jsx"},"6":{"name":"punctuation.definition.tag.end.js.jsx"}},"contentName":"meta.jsx.children.js.jsx","end":"()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.begin.js.jsx"},"2":{"name":"entity.name.tag.namespace.js.jsx"},"3":{"name":"punctuation.separator.namespace.js.jsx"},"4":{"name":"entity.name.tag.js.jsx"},"5":{"name":"support.class.component.js.jsx"},"6":{"name":"punctuation.definition.tag.end.js.jsx"}},"name":"meta.tag.without-attributes.js.jsx","patterns":[{"include":"#jsx-children"}]},"jsx-tag-without-attributes-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag-without-attributes"}]},"label":{"patterns":[{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)","beginCaptures":{"1":{"name":"entity.name.label.js.jsx"},"2":{"name":"punctuation.separator.label.js.jsx"}},"end":"(?<=})","patterns":[{"include":"#decl-block"}]},{"captures":{"1":{"name":"entity.name.label.js.jsx"},"2":{"name":"punctuation.separator.label.js.jsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)"}]},"literal":{"patterns":[{"include":"#numeric-literal"},{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#undefined-literal"},{"include":"#numericConstant-literal"},{"include":"#array-literal"},{"include":"#this-literal"},{"include":"#super-literal"}]},"method-declaration":{"patterns":[{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"storage.modifier.js.jsx"},"3":{"name":"storage.modifier.js.jsx"},"4":{"name":"storage.modifier.async.js.jsx"},"5":{"name":"keyword.operator.new.js.jsx"},"6":{"name":"keyword.generator.asterisk.js.jsx"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.js.jsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"storage.modifier.js.jsx"},"3":{"name":"storage.modifier.js.jsx"},"4":{"name":"storage.modifier.async.js.jsx"},"5":{"name":"storage.type.property.js.jsx"},"6":{"name":"keyword.generator.asterisk.js.jsx"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.js.jsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"},"2":{"name":"storage.type.property.js.jsx"},"3":{"name":"keyword.generator.asterisk.js.jsx"}},"end":"(?=[,;}])|(?<=})","name":"meta.method.declaration.js.jsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"},"2":{"name":"storage.type.property.js.jsx"},"3":{"name":"keyword.generator.asterisk.js.jsx"}},"end":"(?=[(<])","patterns":[{"include":"#method-declaration-name"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.js.jsx meta.object-literal.key.js.jsx","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.js.jsx meta.object-literal.key.js.jsx","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.js.jsx"},{"captures":{"0":{"name":"meta.object-literal.key.js.jsx"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.js.jsx"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.js.jsx"}},"end":"(?=[,}])","name":"meta.object.member.js.jsx","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.js.jsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.js.jsx"},{"captures":{"1":{"name":"keyword.control.as.js.jsx"},"2":{"name":"storage.modifier.js.jsx"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"},"2":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(?=<\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"}},"end":"(?<=>)","patterns":[{"include":"#type-parameters"}]},{"begin":"(?<=>)\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"include":"#possibly-arrow-return-type"},{"include":"#expression"}]},{"include":"#punctuation-comma"},{"include":"#decl-block"}]},"parameter-array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.js.jsx"},"2":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.js.jsx"}},"patterns":[{"include":"#parameter-binding-element"},{"include":"#punctuation-comma"}]},"parameter-binding-element":{"patterns":[{"include":"#comment"},{"include":"#string"},{"include":"#numeric-literal"},{"include":"#regex"},{"include":"#parameter-object-binding-pattern"},{"include":"#parameter-array-binding-pattern"},{"include":"#destructuring-parameter-rest"},{"include":"#variable-initializer"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.js.jsx"}},"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"keyword.operator.rest.js.jsx"},"3":{"name":"variable.parameter.js.jsx variable.language.this.js.jsx"},"4":{"name":"variable.parameter.js.jsx"},"5":{"name":"keyword.operator.optional.js.jsx"}},"match":"(?:(?])","name":"meta.type.annotation.js.jsx","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"patterns":[{"include":"#expression"}]},"paren-expression-possibly-arrow":{"patterns":[{"begin":"(?<=[(,=])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"begin":"(?<=[(,=]|=>|^return|[^$._[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)))\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.js.jsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"include":"#possibly-arrow-return-type"}]},"paren-expression-possibly-arrow-with-typeparameters":{"patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.js.jsx meta.return.type.arrow.js.jsx keyword.operator.type.annotation.js.jsx"}},"contentName":"meta.arrow.js.jsx meta.return.type.arrow.js.jsx","end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","patterns":[{"include":"#arrow-return-type-body"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.js.jsx"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.js.jsx"},"2":{"name":"keyword.other.js.jsx"}},"name":"string.regexp.js.jsx","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","beginCaptures":{"0":{"name":"punctuation.definition.group.regexp"},"1":{"name":"punctuation.definition.group.no-capture.regexp"},"2":{"name":"variable.other.regexp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.regexp"}},"name":"meta.group.regexp","patterns":[{"include":"#regexp"}]},{"begin":"(\\\\[)(\\\\^)?","beginCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"},"2":{"name":"keyword.operator.negation.regexp"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"}},"name":"constant.other.character-class.set.regexp","patterns":[{"captures":{"1":{"name":"constant.character.numeric.regexp"},"2":{"name":"constant.character.control.regexp"},"3":{"name":"constant.character.escape.backslash.regexp"},"4":{"name":"constant.character.numeric.regexp"},"5":{"name":"constant.character.control.regexp"},"6":{"name":"constant.character.escape.backslash.regexp"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js.jsx"}},"end":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\()|(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$))"},{"captures":{"1":{"name":"support.type.object.module.js.jsx"},"2":{"name":"support.type.object.module.js.jsx"},"3":{"name":"punctuation.accessor.js.jsx"},"4":{"name":"punctuation.accessor.optional.js.jsx"},"5":{"name":"support.type.object.module.js.jsx"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.js.jsx"}]},{"include":"#type-arguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.js.jsx"}},"end":"(?=`)","patterns":[{"include":"#type-arguments"}]}]},"template-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.js.jsx"}},"contentName":"meta.embedded.line.js.jsx","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.js.jsx"}},"name":"meta.template.expression.js.jsx","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.js.jsx"},"2":{"name":"string.template.js.jsx punctuation.definition.string.template.begin.js.jsx"}},"contentName":"string.template.js.jsx","end":"`","endCaptures":{"0":{"name":"string.template.js.jsx punctuation.definition.string.template.end.js.jsx"}},"patterns":[{"include":"#template-type-substitution-element"},{"include":"#string-character-escape"}]}]},"template-type-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.js.jsx"}},"contentName":"meta.embedded.line.js.jsx","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.js.jsx"}},"name":"meta.template.expression.js.jsx","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.js.jsx"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.js.jsx"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.js.jsx","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.js.jsx"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.js.jsx","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.js.jsx"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.js.jsx"}},"name":"meta.type.parameters.js.jsx","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.js.jsx"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.js.jsx","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.js.jsx"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.js.jsx","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.js.jsx"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.js.jsx","patterns":[{"include":"#type-function-return-type-core"}]}]},"type-function-return-type-core":{"patterns":[{"include":"#comment"},{"begin":"(?<==>)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"type-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.js.jsx"},"2":{"name":"entity.name.type.js.jsx"},"3":{"name":"keyword.operator.expression.extends.js.jsx"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.js.jsx punctuation.definition.typeparameters.end.js.jsx"}},"patterns":[{"include":"#type-arguments-body"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<)","beginCaptures":{"1":{"name":"entity.name.type.js.jsx"},"2":{"name":"meta.type.parameters.js.jsx punctuation.definition.typeparameters.begin.js.jsx"}},"contentName":"meta.type.parameters.js.jsx","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.js.jsx punctuation.definition.typeparameters.end.js.jsx"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.js.jsx"},"2":{"name":"punctuation.accessor.js.jsx"},"3":{"name":"punctuation.accessor.optional.js.jsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.js.jsx"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.js.jsx"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.js.jsx"}},"name":"meta.object.type.js.jsx","patterns":[{"include":"#comment"},{"include":"#method-declaration"},{"include":"#indexer-declaration"},{"include":"#indexer-mapped-type-declaration"},{"include":"#field-declaration"},{"include":"#type-annotation"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.js.jsx"}},"end":"(?=[,;}]|$)|(?<=})","patterns":[{"include":"#type"}]},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"},{"include":"#type"}]},"type-operators":{"patterns":[{"include":"#typeof-operator"},{"include":"#type-infer"},{"begin":"([\\\\&|])(?=\\\\s*\\\\{)","beginCaptures":{"0":{"name":"keyword.operator.type.js.jsx"}},"end":"(?<=})","patterns":[{"include":"#type-object"}]},{"begin":"[\\\\&|]","beginCaptures":{"0":{"name":"keyword.operator.type.js.jsx"}},"end":"(?=\\\\S)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.js.jsx"}},"name":"meta.type.parameters.js.jsx","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.js.jsx"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.js.jsx"}},"name":"meta.type.paren.cover.js.jsx","patterns":[{"captures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"keyword.operator.rest.js.jsx"},"3":{"name":"entity.name.function.js.jsx variable.language.this.js.jsx"},"4":{"name":"entity.name.function.js.jsx"},"5":{"name":"keyword.operator.optional.js.jsx"}},"match":"(?:(?)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))))"},{"captures":{"1":{"name":"storage.modifier.js.jsx"},"2":{"name":"keyword.operator.rest.js.jsx"},"3":{"name":"variable.parameter.js.jsx variable.language.this.js.jsx"},"4":{"name":"variable.parameter.js.jsx"},"5":{"name":"keyword.operator.optional.js.jsx"}},"match":"(?:(??{|}]|(extends\\\\s+)|$|;|^\\\\s*$|^\\\\s*(?:abstract|async|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|var|while)\\\\b)","patterns":[{"include":"#type-arguments"},{"include":"#expression"}]},"undefined-literal":{"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.js.jsx variable.other.constant.js.jsx entity.name.function.js.jsx"}},"end":"(?=$|^|[,;=}]|((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.js.jsx entity.name.function.js.jsx"},"2":{"name":"keyword.operator.definiteassignment.js.jsx"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.js.jsx"}},"end":"(?=$|^|[]),;}]|((?{yT=Object.freeze(JSON.parse('{"displayName":"TSX","name":"tsx","patterns":[{"include":"#directives"},{"include":"#statements"},{"include":"#shebang"}],"repository":{"access-modifier":{"match":"(??\\\\[]|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^yield|[^$._[:alnum:]]yield|^throw|[^$._[:alnum:]]throw|^in|[^$._[:alnum:]]in|^of|[^$._[:alnum:]]of|^typeof|[^$._[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.definition.block.tsx"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.tsx"}},"name":"meta.objectliteral.tsx","patterns":[{"include":"#object-member"}]},"array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.tsx"},"2":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"patterns":[{"include":"#binding-element"},{"include":"#punctuation-comma"}]},"array-binding-pattern-const":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.tsx"},"2":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"patterns":[{"include":"#binding-element-const"},{"include":"#punctuation-comma"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.tsx"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.tsx"}},"name":"meta.array.literal.tsx","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.tsx"},"2":{"name":"variable.parameter.tsx"}},"match":"(?:(?)","name":"meta.arrow.tsx"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.arrow.tsx","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.tsx"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.tsx","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"begin":"(?<=\\\\))\\\\s*(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.tsx"}},"end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","name":"meta.return.type.arrow.tsx","patterns":[{"include":"#arrow-return-type-body"}]},"arrow-return-type-body":{"patterns":[{"begin":"(?<=:)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"async-modifier":{"match":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.tsx"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.tsx","patterns":[{"begin":"(<)(reference|amd-dependency|amd-module)","beginCaptures":{"1":{"name":"punctuation.definition.tag.directive.tsx"},"2":{"name":"entity.name.tag.directive.tsx"}},"end":"/>","endCaptures":{"0":{"name":"punctuation.definition.tag.directive.tsx"}},"name":"meta.tag.tsx","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.tsx"},{"match":"=","name":"keyword.operator.assignment.tsx"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"5":{"name":"constant.other.email.link.underline.jsdoc"},"6":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"match":"((@)author)\\\\s+([^*/<>@\\\\s](?:[^*/<>@]|\\\\*[^/])*)(?:\\\\s*(<)([^>\\\\s]+)(>))?"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"},"4":{"name":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"begin":"\\\\G(<)caption(>)","beginCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}},"contentName":"constant.other.description.jsdoc","end":"()caption(>)|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.tsx"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)kind)\\\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\\\b"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"begin":"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"captures":{"1":{"name":"punctuation.definition.optional-value.begin.bracket.square.jsdoc"},"2":{"name":"keyword.operator.assignment.jsdoc"},"3":{"name":"source.embedded.tsx"},"4":{"name":"punctuation.definition.optional-value.end.bracket.square.jsdoc"},"5":{"name":"invalid.illegal.syntax.jsdoc"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\\\s+((?:[^*@{}\\\\s]|\\\\*[^/])+)"},{"begin":"((@)(?:default(?:value)?|license|version))\\\\s+(([\\"\']))","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"},"4":{"name":"punctuation.definition.string.begin.jsdoc"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\\\b","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"keyword.operator.rest.tsx"},"3":{"name":"variable.parameter.tsx variable.language.this.tsx"},"4":{"name":"variable.parameter.tsx"},"5":{"name":"keyword.operator.optional.tsx"}},"match":"(?:(??}]|\\\\|\\\\||&&|!==|$|((?>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.tsx"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.tsx"},{"match":"[!=]==?","name":"keyword.operator.comparison.tsx"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.tsx"},{"captures":{"1":{"name":"keyword.operator.logical.tsx"},"2":{"name":"keyword.operator.assignment.compound.tsx"},"3":{"name":"keyword.operator.arithmetic.tsx"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","name":"keyword.operator.logical.tsx"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.tsx"},{"match":"=","name":"keyword.operator.assignment.tsx"},{"match":"--","name":"keyword.operator.decrement.tsx"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.tsx"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.tsx"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.tsx"},"2":{"name":"keyword.operator.arithmetic.tsx"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.tsx"},"2":{"name":"keyword.operator.arithmetic.tsx"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"expressionWithoutIdentifiers":{"patterns":[{"include":"#jsx"},{"include":"#string"},{"include":"#regex"},{"include":"#comment"},{"include":"#function-expression"},{"include":"#class-expression"},{"include":"#arrow-function"},{"include":"#paren-expression-possibly-arrow"},{"include":"#cast"},{"include":"#ternary-expression"},{"include":"#new-expr"},{"include":"#instanceof-expr"},{"include":"#object-literal"},{"include":"#expression-operators"},{"include":"#function-call"},{"include":"#literal"},{"include":"#support-objects"},{"include":"#paren-expression"}]},"field-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.tsx variable.object.property.tsx"},{"match":"\\\\?","name":"keyword.operator.optional.tsx"},{"match":"!","name":"keyword.operator.definiteassignment.tsx"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","end":"(?<=\\\\))(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?\\\\())","name":"meta.function-call.tsx","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"},{"include":"#paren-expression"}]},{"begin":"(?=(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","end":"(?<=>)(?!(((([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))|(?<=\\\\)))(<\\\\s*[(\\\\[{]\\\\s*)$)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.tsx","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.tsx punctuation.accessor.optional.tsx"},{"match":"!","name":"meta.function-call.tsx keyword.operator.definiteassignment.tsx"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tsx"}]},"function-declaration":{"begin":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.tsx"},"2":{"name":"punctuation.accessor.optional.tsx"},"3":{"name":"variable.other.constant.property.tsx"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.tsx"},"2":{"name":"punctuation.accessor.optional.tsx"},"3":{"name":"variable.other.property.tsx"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.tsx"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.tsx"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?))","end":"(/>)|()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.tsx"},"2":{"name":"punctuation.definition.tag.begin.tsx"},"3":{"name":"entity.name.tag.namespace.tsx"},"4":{"name":"punctuation.separator.namespace.tsx"},"5":{"name":"entity.name.tag.tsx"},"6":{"name":"support.class.component.tsx"},"7":{"name":"punctuation.definition.tag.end.tsx"}},"name":"meta.tag.tsx","patterns":[{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.tsx"},"2":{"name":"entity.name.tag.namespace.tsx"},"3":{"name":"punctuation.separator.namespace.tsx"},"4":{"name":"entity.name.tag.tsx"},"5":{"name":"support.class.component.tsx"}},"end":"(?=/?>)","patterns":[{"include":"#comment"},{"include":"#type-arguments"},{"include":"#jsx-tag-attributes"}]},{"begin":"(>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.end.tsx"}},"contentName":"meta.jsx.children.tsx","end":"(?=)","patterns":[{"include":"#jsx-children"}]}]},"jsx-tag-attribute-assignment":{"match":"=(?=\\\\s*(?:[\\"\'{]|/\\\\*|//|\\\\n))","name":"keyword.operator.assignment.tsx"},"jsx-tag-attribute-name":{"captures":{"1":{"name":"entity.other.attribute-name.namespace.tsx"},"2":{"name":"punctuation.separator.namespace.tsx"},"3":{"name":"entity.other.attribute-name.tsx"}},"match":"\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(:))?([$_[:alpha:]][-$_[:alnum:]]*)(?=[=\\\\s]|/?>|/\\\\*|//)"},"jsx-tag-attributes":{"begin":"\\\\s+","end":"(?=/?>)","name":"meta.tag.attributes.tsx","patterns":[{"include":"#comment"},{"include":"#jsx-tag-attribute-name"},{"include":"#jsx-tag-attribute-assignment"},{"include":"#jsx-string-double-quoted"},{"include":"#jsx-string-single-quoted"},{"include":"#jsx-evaluated-code"},{"include":"#jsx-tag-attributes-illegal"}]},"jsx-tag-attributes-illegal":{"match":"\\\\S+","name":"invalid.illegal.attribute.tsx"},"jsx-tag-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?!<\\\\s*[$_[:alpha:]][$_[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,))(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag"}]},"jsx-tag-without-attributes":{"begin":"(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.tsx"},"2":{"name":"entity.name.tag.namespace.tsx"},"3":{"name":"punctuation.separator.namespace.tsx"},"4":{"name":"entity.name.tag.tsx"},"5":{"name":"support.class.component.tsx"},"6":{"name":"punctuation.definition.tag.end.tsx"}},"contentName":"meta.jsx.children.tsx","end":"()\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.begin.tsx"},"2":{"name":"entity.name.tag.namespace.tsx"},"3":{"name":"punctuation.separator.namespace.tsx"},"4":{"name":"entity.name.tag.tsx"},"5":{"name":"support.class.component.tsx"},"6":{"name":"punctuation.definition.tag.end.tsx"}},"name":"meta.tag.without-attributes.tsx","patterns":[{"include":"#jsx-children"}]},"jsx-tag-without-attributes-in-expression":{"begin":"(??\\\\[{]|&&|\\\\|\\\\||\\\\?|\\\\*/|^await|[^$._[:alnum:]]await|^return|[^$._[:alnum:]]return|^default|[^$._[:alnum:]]default|^yield|[^$._[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","end":"(?!(<)\\\\s*(?:([$_[:alpha:]][-$._[:alnum:]]*)(?))","patterns":[{"include":"#jsx-tag-without-attributes"}]},"label":{"patterns":[{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)","beginCaptures":{"1":{"name":"entity.name.label.tsx"},"2":{"name":"punctuation.separator.label.tsx"}},"end":"(?<=})","patterns":[{"include":"#decl-block"}]},{"captures":{"1":{"name":"entity.name.label.tsx"},"2":{"name":"punctuation.separator.label.tsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(:)"}]},"literal":{"patterns":[{"include":"#numeric-literal"},{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#undefined-literal"},{"include":"#numericConstant-literal"},{"include":"#array-literal"},{"include":"#this-literal"},{"include":"#super-literal"}]},"method-declaration":{"patterns":[{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"storage.modifier.tsx"},"3":{"name":"storage.modifier.tsx"},"4":{"name":"storage.modifier.async.tsx"},"5":{"name":"keyword.operator.new.tsx"},"6":{"name":"keyword.generator.asterisk.tsx"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.tsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"storage.modifier.tsx"},"3":{"name":"storage.modifier.tsx"},"4":{"name":"storage.modifier.async.tsx"},"5":{"name":"storage.type.property.tsx"},"6":{"name":"keyword.generator.asterisk.tsx"}},"end":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.tsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"},"2":{"name":"storage.type.property.tsx"},"3":{"name":"keyword.generator.asterisk.tsx"}},"end":"(?=[,;}])|(?<=})","name":"meta.method.declaration.tsx","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"},"2":{"name":"storage.type.property.tsx"},"3":{"name":"keyword.generator.asterisk.tsx"}},"end":"(?=[(<])","patterns":[{"include":"#method-declaration-name"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.tsx meta.object-literal.key.tsx","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.tsx meta.object-literal.key.tsx","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.tsx"},{"captures":{"0":{"name":"meta.object-literal.key.tsx"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.tsx"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.tsx"}},"end":"(?=[,}])","name":"meta.object.member.tsx","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.tsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.tsx"},{"captures":{"1":{"name":"keyword.control.as.tsx"},"2":{"name":"storage.modifier.tsx"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"},"2":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"begin":"(?<=:)\\\\s*(async)?\\\\s*(?=<\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"}},"end":"(?<=>)","patterns":[{"include":"#type-parameters"}]},{"begin":"(?<=>)\\\\s*(\\\\()(?=\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]},{"include":"#possibly-arrow-return-type"},{"include":"#expression"}]},{"include":"#punctuation-comma"},{"include":"#decl-block"}]},"parameter-array-binding-pattern":{"begin":"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.rest.tsx"},"2":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.binding-pattern.array.tsx"}},"patterns":[{"include":"#parameter-binding-element"},{"include":"#punctuation-comma"}]},"parameter-binding-element":{"patterns":[{"include":"#comment"},{"include":"#string"},{"include":"#numeric-literal"},{"include":"#regex"},{"include":"#parameter-object-binding-pattern"},{"include":"#parameter-array-binding-pattern"},{"include":"#destructuring-parameter-rest"},{"include":"#variable-initializer"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.tsx"}},"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"captures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"keyword.operator.rest.tsx"},"3":{"name":"variable.parameter.tsx variable.language.this.tsx"},"4":{"name":"variable.parameter.tsx"},"5":{"name":"keyword.operator.optional.tsx"}},"match":"(?:(?])","name":"meta.type.annotation.tsx","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"patterns":[{"include":"#expression"}]},"paren-expression-possibly-arrow":{"patterns":[{"begin":"(?<=[(,=])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"begin":"(?<=[(,=]|=>|^return|[^$._[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)))\\\\s*$)","beginCaptures":{"1":{"name":"storage.modifier.async.tsx"}},"end":"(?<=\\\\))","patterns":[{"include":"#paren-expression-possibly-arrow-with-typeparameters"}]},{"include":"#possibly-arrow-return-type"}]},"paren-expression-possibly-arrow-with-typeparameters":{"patterns":[{"include":"#type-parameters"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"patterns":[{"include":"#expression-inside-possibly-arrow-parens"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx"}},"contentName":"meta.arrow.tsx meta.return.type.arrow.tsx","end":"(?==>|\\\\{|^(\\\\s*(export|function|class|interface|let|var|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))","patterns":[{"include":"#arrow-return-type-body"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.tsx"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.tsx"},"2":{"name":"keyword.other.tsx"}},"name":"string.regexp.tsx","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","beginCaptures":{"0":{"name":"punctuation.definition.group.regexp"},"1":{"name":"punctuation.definition.group.no-capture.regexp"},"2":{"name":"variable.other.regexp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.regexp"}},"name":"meta.group.regexp","patterns":[{"include":"#regexp"}]},{"begin":"(\\\\[)(\\\\^)?","beginCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"},"2":{"name":"keyword.operator.negation.regexp"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.definition.character-class.regexp"}},"name":"constant.other.character-class.set.regexp","patterns":[{"captures":{"1":{"name":"constant.character.numeric.regexp"},"2":{"name":"constant.character.control.regexp"},"3":{"name":"constant.character.escape.backslash.regexp"},"4":{"name":"constant.character.numeric.regexp"},"5":{"name":"constant.character.control.regexp"},"6":{"name":"constant.character.escape.backslash.regexp"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.tsx"}},"end":"(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\()|(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$))"},{"captures":{"1":{"name":"support.type.object.module.tsx"},"2":{"name":"support.type.object.module.tsx"},"3":{"name":"punctuation.accessor.tsx"},"4":{"name":"punctuation.accessor.optional.tsx"},"5":{"name":"support.type.object.module.tsx"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.tsx"}]},{"include":"#type-arguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?))*(?)*(?\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.tsx"}},"end":"(?=`)","patterns":[{"include":"#type-arguments"}]}]},"template-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.tsx"}},"contentName":"meta.embedded.line.tsx","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.tsx"}},"name":"meta.template.expression.tsx","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.tsx"},"2":{"name":"string.template.tsx punctuation.definition.string.template.begin.tsx"}},"contentName":"string.template.tsx","end":"`","endCaptures":{"0":{"name":"string.template.tsx punctuation.definition.string.template.end.tsx"}},"patterns":[{"include":"#template-type-substitution-element"},{"include":"#string-character-escape"}]}]},"template-type-substitution-element":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.tsx"}},"contentName":"meta.embedded.line.tsx","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.tsx"}},"name":"meta.template.expression.tsx","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.tsx"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.tsx"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.tsx","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.tsx"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.tsx","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.tsx"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.tsx"}},"name":"meta.type.parameters.tsx","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.tsx"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.tsx","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.tsx"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.tsx","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.tsx"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.tsx","patterns":[{"include":"#type-function-return-type-core"}]}]},"type-function-return-type-core":{"patterns":[{"include":"#comment"},{"begin":"(?<==>)(?=\\\\s*\\\\{)","end":"(?<=})","patterns":[{"include":"#type-object"}]},{"include":"#type-predicate-operator"},{"include":"#type"}]},"type-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.tsx"},"2":{"name":"entity.name.type.tsx"},"3":{"name":"keyword.operator.expression.extends.tsx"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx"}},"patterns":[{"include":"#type-arguments-body"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<)","beginCaptures":{"1":{"name":"entity.name.type.tsx"},"2":{"name":"meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx"}},"contentName":"meta.type.parameters.tsx","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.tsx"},"2":{"name":"punctuation.accessor.tsx"},"3":{"name":"punctuation.accessor.optional.tsx"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.tsx"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.tsx"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.tsx"}},"name":"meta.object.type.tsx","patterns":[{"include":"#comment"},{"include":"#method-declaration"},{"include":"#indexer-declaration"},{"include":"#indexer-mapped-type-declaration"},{"include":"#field-declaration"},{"include":"#type-annotation"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.tsx"}},"end":"(?=[,;}]|$)|(?<=})","patterns":[{"include":"#type"}]},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"},{"include":"#type"}]},"type-operators":{"patterns":[{"include":"#typeof-operator"},{"include":"#type-infer"},{"begin":"([\\\\&|])(?=\\\\s*\\\\{)","beginCaptures":{"0":{"name":"keyword.operator.type.tsx"}},"end":"(?<=})","patterns":[{"include":"#type-object"}]},{"begin":"[\\\\&|]","beginCaptures":{"0":{"name":"keyword.operator.type.tsx"}},"end":"(?=\\\\S)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.tsx"}},"name":"meta.type.parameters.tsx","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.tsx"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.tsx"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.tsx"}},"name":"meta.type.paren.cover.tsx","patterns":[{"captures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"keyword.operator.rest.tsx"},"3":{"name":"entity.name.function.tsx variable.language.this.tsx"},"4":{"name":"entity.name.function.tsx"},"5":{"name":"keyword.operator.optional.tsx"}},"match":"(?:(?)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))))"},{"captures":{"1":{"name":"storage.modifier.tsx"},"2":{"name":"keyword.operator.rest.tsx"},"3":{"name":"variable.parameter.tsx variable.language.this.tsx"},"4":{"name":"variable.parameter.tsx"},"5":{"name":"keyword.operator.optional.tsx"}},"match":"(?:(??{|}]|(extends\\\\s+)|$|;|^\\\\s*$|^\\\\s*(?:abstract|async|\\\\bawait\\\\s+\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b\\\\b|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[$_[:alpha:]])\\\\b|var|while)\\\\b)","patterns":[{"include":"#type-arguments"},{"include":"#expression"}]},"undefined-literal":{"match":"(?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx"}},"end":"(?=$|^|[,;=}]|((?)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))))))|(:\\\\s*(=>|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^(),<=>])+=\\\\s*(((async\\\\s+)?((function\\\\s*[(*<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)))|((async\\\\s*)?(((<\\\\s*)$|(\\\\(\\\\s*((([\\\\[{]\\\\s*)?)$|((\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})\\\\s*((:\\\\s*\\\\{?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*)))|((\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])\\\\s*((:\\\\s*\\\\[?)$|((\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*)?=\\\\s*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|(<\\\\s*[$_[:alpha:]][$_[:alnum:]]*\\\\s+extends\\\\s*[^=>])|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.tsx entity.name.function.tsx"},"2":{"name":"keyword.operator.definiteassignment.tsx"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.tsx"}},"end":"(?=$|^|[]),;}]|((?u7});var _T,u7,Ia=n1(()=>{ee();P6();Y_();J_();_T=Object.freeze(JSON.parse('{"displayName":"GraphQL","fileTypes":["graphql","graphqls","gql","graphcool"],"name":"graphql","patterns":[{"include":"#graphql"}],"repository":{"graphql":{"patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-fragment-definition"},{"include":"#graphql-directive-definition"},{"include":"#graphql-type-interface"},{"include":"#graphql-enum"},{"include":"#graphql-scalar"},{"include":"#graphql-union"},{"include":"#graphql-schema"},{"include":"#graphql-operation-def"},{"include":"#literal-quasi-embedded"}]},"graphql-ampersand":{"captures":{"1":{"name":"keyword.operator.logical.graphql"}},"match":"\\\\s*(&)"},"graphql-arguments":{"begin":"\\\\s*(\\\\()","beginCaptures":{"1":{"name":"meta.brace.round.directive.graphql"}},"end":"\\\\s*(\\\\))","endCaptures":{"1":{"name":"meta.brace.round.directive.graphql"}},"name":"meta.arguments.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"begin":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*(:)","beginCaptures":{"1":{"name":"variable.parameter.graphql"},"2":{"name":"punctuation.colon.graphql"}},"end":"(?=\\\\s*(?:([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*(:)|\\\\)))|\\\\s*(,)","endCaptures":{"3":{"name":"punctuation.comma.graphql"}},"patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-value"},{"include":"#graphql-skip-newlines"}]},{"include":"#literal-quasi-embedded"}]},"graphql-boolean-value":{"captures":{"1":{"name":"constant.language.boolean.graphql"}},"match":"\\\\s*\\\\b(true|false)\\\\b"},"graphql-colon":{"captures":{"1":{"name":"punctuation.colon.graphql"}},"match":"\\\\s*(:)"},"graphql-comma":{"captures":{"1":{"name":"punctuation.comma.graphql"}},"match":"\\\\s*(,)"},"graphql-comment":{"patterns":[{"captures":{"1":{"name":"punctuation.whitespace.comment.leading.graphql"}},"match":"(\\\\s*)(#).*","name":"comment.line.graphql.js"},{"begin":"(\\"\\"\\")","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.graphql"}},"end":"(\\"\\"\\")","name":"comment.line.graphql.js"},{"begin":"(\\")","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.graphql"}},"end":"(\\")","name":"comment.line.graphql.js"}]},"graphql-description-docstring":{"begin":"\\"\\"\\"","end":"\\"\\"\\"","name":"comment.block.graphql"},"graphql-description-singleline":{"match":"#(?=([^\\"]*\\"[^\\"]*\\")*[^\\"]*$).*$","name":"comment.line.number-sign.graphql"},"graphql-directive":{"applyEndPatternLast":1,"begin":"\\\\s*((@)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*))","beginCaptures":{"1":{"name":"entity.name.function.directive.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-arguments"},{"include":"#literal-quasi-embedded"},{"include":"#graphql-skip-newlines"}]},"graphql-directive-definition":{"applyEndPatternLast":1,"begin":"\\\\s*\\\\b(directive)\\\\b\\\\s*(@[A-Z_a-z][0-9A-Z_a-z]*)","beginCaptures":{"1":{"name":"keyword.directive.graphql"},"2":{"name":"entity.name.function.directive.graphql"},"3":{"name":"keyword.on.graphql"},"4":{"name":"support.type.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-variable-definitions"},{"applyEndPatternLast":1,"begin":"\\\\s*\\\\b(on)\\\\b\\\\s*([A-Z_a-z]*)","beginCaptures":{"1":{"name":"keyword.on.graphql"},"2":{"name":"support.type.location.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-skip-newlines"},{"include":"#graphql-comment"},{"include":"#literal-quasi-embedded"},{"captures":{"2":{"name":"support.type.location.graphql"}},"match":"\\\\s*(\\\\|)\\\\s*([A-Z_a-z]*)"}]},{"include":"#graphql-skip-newlines"},{"include":"#graphql-comment"},{"include":"#literal-quasi-embedded"}]},"graphql-enum":{"begin":"\\\\s*+\\\\b(enum)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)","beginCaptures":{"1":{"name":"keyword.enum.graphql"},"2":{"name":"support.type.enum.graphql"}},"end":"(?<=})","name":"meta.enum.graphql","patterns":[{"begin":"\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.operation.graphql"}},"end":"\\\\s*(})","endCaptures":{"1":{"name":"punctuation.operation.graphql"}},"name":"meta.type.object.graphql","patterns":[{"include":"#graphql-object-type"},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-enum-value"},{"include":"#literal-quasi-embedded"}]},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"}]},"graphql-enum-value":{"match":"\\\\s*(?!=\\\\b(true|false|null)\\\\b)([A-Z_a-z][0-9A-Z_a-z]*)","name":"constant.character.enum.graphql"},"graphql-field":{"patterns":[{"captures":{"1":{"name":"string.unquoted.alias.graphql"},"2":{"name":"punctuation.colon.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*(:)"},{"captures":{"1":{"name":"variable.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"},{"include":"#graphql-arguments"},{"include":"#graphql-directive"},{"include":"#graphql-selection-set"},{"include":"#literal-quasi-embedded"},{"include":"#graphql-skip-newlines"}]},"graphql-float-value":{"captures":{"1":{"name":"constant.numeric.float.graphql"}},"match":"\\\\s*(-?(0|[1-9][0-9]*)(\\\\.[0-9]+)?(([Ee])([-+])?[0-9]+)?)"},"graphql-fragment-definition":{"begin":"\\\\s*\\\\b(fragment)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)?\\\\s*\\\\b(on)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)","captures":{"1":{"name":"keyword.fragment.graphql"},"2":{"name":"entity.name.fragment.graphql"},"3":{"name":"keyword.on.graphql"},"4":{"name":"support.type.graphql"}},"end":"(?<=})","name":"meta.fragment.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-selection-set"},{"include":"#graphql-directive"},{"include":"#graphql-skip-newlines"},{"include":"#literal-quasi-embedded"}]},"graphql-fragment-spread":{"applyEndPatternLast":1,"begin":"\\\\s*(\\\\.\\\\.\\\\.)\\\\s*(?!\\\\bon\\\\b)([A-Z_a-z][0-9A-Z_a-z]*)","captures":{"1":{"name":"keyword.operator.spread.graphql"},"2":{"name":"variable.fragment.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-selection-set"},{"include":"#graphql-directive"},{"include":"#literal-quasi-embedded"},{"include":"#graphql-skip-newlines"}]},"graphql-ignore-spaces":{"match":"\\\\s*"},"graphql-inline-fragment":{"applyEndPatternLast":1,"begin":"\\\\s*(\\\\.\\\\.\\\\.)\\\\s*(?:\\\\b(on)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*))?","captures":{"1":{"name":"keyword.operator.spread.graphql"},"2":{"name":"keyword.on.graphql"},"3":{"name":"support.type.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-selection-set"},{"include":"#graphql-directive"},{"include":"#graphql-skip-newlines"},{"include":"#literal-quasi-embedded"}]},"graphql-input-types":{"patterns":[{"include":"#graphql-scalar-type"},{"captures":{"1":{"name":"support.type.graphql"},"2":{"name":"keyword.operator.nulltype.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(?:\\\\s*(!))?"},{"begin":"\\\\s*(\\\\[)","captures":{"1":{"name":"meta.brace.square.graphql"},"2":{"name":"keyword.operator.nulltype.graphql"}},"end":"\\\\s*(])(?:\\\\s*(!))?","name":"meta.type.list.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-input-types"},{"include":"#graphql-comma"},{"include":"#literal-quasi-embedded"}]}]},"graphql-list-value":{"patterns":[{"begin":"\\\\s*+(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.graphql"}},"end":"\\\\s*(])","endCaptures":{"1":{"name":"meta.brace.square.graphql"}},"name":"meta.listvalues.graphql","patterns":[{"include":"#graphql-value"}]}]},"graphql-name":{"captures":{"1":{"name":"entity.name.function.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"},"graphql-null-value":{"captures":{"1":{"name":"constant.language.null.graphql"}},"match":"\\\\s*\\\\b(null)\\\\b"},"graphql-object-field":{"captures":{"1":{"name":"constant.object.key.graphql"},"2":{"name":"string.unquoted.graphql"},"3":{"name":"punctuation.graphql"}},"match":"\\\\s*(([A-Z_a-z][0-9A-Z_a-z]*))\\\\s*(:)"},"graphql-object-value":{"patterns":[{"begin":"\\\\s*+(\\\\{)","beginCaptures":{"1":{"name":"meta.brace.curly.graphql"}},"end":"\\\\s*(})","endCaptures":{"1":{"name":"meta.brace.curly.graphql"}},"name":"meta.objectvalues.graphql","patterns":[{"include":"#graphql-object-field"},{"include":"#graphql-value"}]}]},"graphql-operation-def":{"patterns":[{"include":"#graphql-query-mutation"},{"include":"#graphql-name"},{"include":"#graphql-variable-definitions"},{"include":"#graphql-directive"},{"include":"#graphql-selection-set"}]},"graphql-query-mutation":{"captures":{"1":{"name":"keyword.operation.graphql"}},"match":"\\\\s*\\\\b(query|mutation)\\\\b"},"graphql-scalar":{"captures":{"1":{"name":"keyword.scalar.graphql"},"2":{"name":"entity.scalar.graphql"}},"match":"\\\\s*\\\\b(scalar)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"},"graphql-scalar-type":{"captures":{"1":{"name":"support.type.builtin.graphql"},"2":{"name":"keyword.operator.nulltype.graphql"}},"match":"\\\\s*\\\\b(Int|Float|String|Boolean|ID)\\\\b(?:\\\\s*(!))?"},"graphql-schema":{"begin":"\\\\s*\\\\b(schema)\\\\b","beginCaptures":{"1":{"name":"keyword.schema.graphql"}},"end":"(?<=})","patterns":[{"begin":"\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.operation.graphql"}},"end":"\\\\s*(})","endCaptures":{"1":{"name":"punctuation.operation.graphql"}},"patterns":[{"begin":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(?=\\\\s*\\\\(|:)","beginCaptures":{"1":{"name":"variable.arguments.graphql"}},"end":"(?=\\\\s*(([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*([(:])|(})))|\\\\s*(,)","endCaptures":{"5":{"name":"punctuation.comma.graphql"}},"patterns":[{"captures":{"1":{"name":"support.type.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-colon"},{"include":"#graphql-skip-newlines"}]},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-skip-newlines"}]},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-skip-newlines"}]},"graphql-selection-set":{"begin":"\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.operation.graphql"}},"end":"\\\\s*(})","endCaptures":{"1":{"name":"punctuation.operation.graphql"}},"name":"meta.selectionset.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-field"},{"include":"#graphql-fragment-spread"},{"include":"#graphql-inline-fragment"},{"include":"#graphql-comma"},{"include":"#native-interpolation"},{"include":"#literal-quasi-embedded"}]},"graphql-skip-newlines":{"match":"\\\\s*\\\\n"},"graphql-string-content":{"patterns":[{"match":"\\\\\\\\[\\"\'/\\\\\\\\bfnrt]","name":"constant.character.escape.graphql"},{"match":"\\\\\\\\u(\\\\h{4})","name":"constant.character.escape.graphql"}]},"graphql-string-value":{"begin":"\\\\s*+((\\"))","beginCaptures":{"1":{"name":"string.quoted.double.graphql"},"2":{"name":"punctuation.definition.string.begin.graphql"}},"contentName":"string.quoted.double.graphql","end":"\\\\s*+(?:((\\"))|(\\\\n))","endCaptures":{"1":{"name":"string.quoted.double.graphql"},"2":{"name":"punctuation.definition.string.end.graphql"},"3":{"name":"invalid.illegal.newline.graphql"}},"patterns":[{"include":"#graphql-string-content"},{"include":"#literal-quasi-embedded"}]},"graphql-type-definition":{"begin":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(?=\\\\s*\\\\(|:)","beginCaptures":{"1":{"name":"variable.graphql"}},"end":"(?=\\\\s*(([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*([(:])|(})))|\\\\s*(,)","endCaptures":{"5":{"name":"punctuation.comma.graphql"}},"patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-variable-definitions"},{"include":"#graphql-type-object"},{"include":"#graphql-colon"},{"include":"#graphql-input-types"},{"include":"#literal-quasi-embedded"}]},"graphql-type-interface":{"applyEndPatternLast":1,"begin":"\\\\s*\\\\b(?:(extends?)?\\\\b\\\\s*\\\\b(type)|(interface)|(input))\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)?","captures":{"1":{"name":"keyword.type.graphql"},"2":{"name":"keyword.type.graphql"},"3":{"name":"keyword.interface.graphql"},"4":{"name":"keyword.input.graphql"},"5":{"name":"support.type.graphql"}},"end":"(?=.)","name":"meta.type.interface.graphql","patterns":[{"begin":"\\\\s*\\\\b(implements)\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.implements.graphql"}},"end":"\\\\s*(?=\\\\{)","patterns":[{"captures":{"1":{"name":"support.type.graphql"}},"match":"\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-ampersand"},{"include":"#graphql-comma"}]},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-type-object"},{"include":"#literal-quasi-embedded"},{"include":"#graphql-ignore-spaces"}]},"graphql-type-object":{"begin":"\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"punctuation.operation.graphql"}},"end":"\\\\s*(})","endCaptures":{"1":{"name":"punctuation.operation.graphql"}},"name":"meta.type.object.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-object-type"},{"include":"#graphql-type-definition"},{"include":"#literal-quasi-embedded"}]},"graphql-union":{"applyEndPatternLast":1,"begin":"\\\\s*\\\\b(union)\\\\b\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)","captures":{"1":{"name":"keyword.union.graphql"},"2":{"name":"support.type.graphql"}},"end":"(?=.)","patterns":[{"applyEndPatternLast":1,"begin":"\\\\s*(=)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)","captures":{"1":{"name":"punctuation.assignment.graphql"},"2":{"name":"support.type.graphql"}},"end":"(?=.)","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-skip-newlines"},{"include":"#literal-quasi-embedded"},{"captures":{"1":{"name":"punctuation.or.graphql"},"2":{"name":"support.type.graphql"}},"match":"\\\\s*(\\\\|)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)"}]},{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-skip-newlines"},{"include":"#literal-quasi-embedded"}]},"graphql-union-mark":{"captures":{"1":{"name":"punctuation.union.graphql"}},"match":"\\\\s*(\\\\|)"},"graphql-value":{"patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-variable-name"},{"include":"#graphql-float-value"},{"include":"#graphql-string-value"},{"include":"#graphql-boolean-value"},{"include":"#graphql-null-value"},{"include":"#graphql-enum-value"},{"include":"#graphql-list-value"},{"include":"#graphql-object-value"},{"include":"#literal-quasi-embedded"}]},"graphql-variable-assignment":{"applyEndPatternLast":1,"begin":"\\\\s(=)","beginCaptures":{"1":{"name":"punctuation.assignment.graphql"}},"end":"(?=[\\\\n),])","patterns":[{"include":"#graphql-value"}]},"graphql-variable-definition":{"begin":"\\\\s*(\\\\$?[A-Z_a-z][0-9A-Z_a-z]*)(?=\\\\s*\\\\(|:)","beginCaptures":{"1":{"name":"variable.parameter.graphql"}},"end":"(?=\\\\s*((\\\\$?[A-Z_a-z][0-9A-Z_a-z]*)\\\\s*([(:])|([)}])))|\\\\s*(,)","endCaptures":{"5":{"name":"punctuation.comma.graphql"}},"name":"meta.variables.graphql","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-directive"},{"include":"#graphql-colon"},{"include":"#graphql-input-types"},{"include":"#graphql-variable-assignment"},{"include":"#literal-quasi-embedded"},{"include":"#graphql-skip-newlines"}]},"graphql-variable-definitions":{"begin":"\\\\s*(\\\\()","captures":{"1":{"name":"meta.brace.round.graphql"}},"end":"\\\\s*(\\\\))","patterns":[{"include":"#graphql-comment"},{"include":"#graphql-description-docstring"},{"include":"#graphql-description-singleline"},{"include":"#graphql-variable-definition"},{"include":"#literal-quasi-embedded"}]},"graphql-variable-name":{"captures":{"1":{"name":"variable.graphql"}},"match":"\\\\s*(\\\\$[A-Z_a-z][0-9A-Z_a-z]*)"},"native-interpolation":{"begin":"\\\\s*(\\\\$\\\\{)","beginCaptures":{"1":{"name":"keyword.other.substitution.begin"}},"end":"(})","endCaptures":{"1":{"name":"keyword.other.substitution.end"}},"name":"native.interpolation","patterns":[{"include":"source.js"},{"include":"source.ts"},{"include":"source.js.jsx"},{"include":"source.tsx"}]}},"scopeName":"source.graphql","embeddedLangs":["javascript","typescript","jsx","tsx"],"aliases":["gql"]}')),u7=[...w0,...K3,...K_,...Q_,_T]});var wT,Ba,Fo=n1(()=>{wT=Object.freeze(JSON.parse('{"displayName":"RegExp","fileTypes":["re"],"name":"regexp","patterns":[{"include":"#regexp-expression"}],"repository":{"codetags":{"captures":{"1":{"name":"keyword.codetag.notation.python"}},"match":"\\\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\\\b"},"fregexp-base-expression":{"patterns":[{"include":"#fregexp-quantifier"},{"include":"#fstring-formatting-braces"},{"match":"\\\\{.*?}"},{"include":"#regexp-base-common"}]},"fregexp-quantifier":{"match":"\\\\{\\\\{(\\\\d+|\\\\d+,(\\\\d+)?|,\\\\d+)}}","name":"keyword.operator.quantifier.regexp"},"fstring-formatting-braces":{"patterns":[{"captures":{"1":{"name":"constant.character.format.placeholder.other.python"},"2":{"name":"invalid.illegal.brace.python"},"3":{"name":"constant.character.format.placeholder.other.python"}},"match":"(\\\\{)(\\\\s*?)(})"},{"match":"(\\\\{\\\\{|}})","name":"constant.character.escape.python"}]},"regexp-backreference":{"captures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.begin.regexp"},"2":{"name":"entity.name.tag.named.backreference.regexp"},"3":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.backreference.named.end.regexp"}},"match":"(\\\\()(\\\\?P=\\\\w+(?:\\\\s+\\\\p{alnum}+)?)(\\\\))","name":"meta.backreference.named.regexp"},"regexp-backreference-number":{"captures":{"1":{"name":"entity.name.tag.backreference.regexp"}},"match":"(\\\\\\\\[1-9]\\\\d?)","name":"meta.backreference.regexp"},"regexp-base-common":{"patterns":[{"match":"\\\\.","name":"support.other.match.any.regexp"},{"match":"\\\\^","name":"support.other.match.begin.regexp"},{"match":"\\\\$","name":"support.other.match.end.regexp"},{"match":"[*+?]\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.disjunction.regexp"},{"include":"#regexp-escape-sequence"}]},"regexp-base-expression":{"patterns":[{"include":"#regexp-quantifier"},{"include":"#regexp-base-common"}]},"regexp-character-set":{"patterns":[{"match":"\\\\[\\\\^?](?!.*?])"},{"begin":"(\\\\[)(\\\\^)?(])?","beginCaptures":{"1":{"name":"punctuation.character.set.begin.regexp constant.other.set.regexp"},"2":{"name":"keyword.operator.negation.regexp"},"3":{"name":"constant.character.set.regexp"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.character.set.end.regexp constant.other.set.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"name":"meta.character.set.regexp","patterns":[{"include":"#regexp-charecter-set-escapes"},{"match":"\\\\N","name":"constant.character.set.regexp"}]}]},"regexp-charecter-set-escapes":{"patterns":[{"match":"\\\\\\\\[\\\\\\\\abfnrtv]","name":"constant.character.escape.regexp"},{"include":"#regexp-escape-special"},{"match":"\\\\\\\\([0-7]{1,3})","name":"constant.character.escape.regexp"},{"include":"#regexp-escape-character"},{"include":"#regexp-escape-unicode"},{"include":"#regexp-escape-catchall"}]},"regexp-comments":{"begin":"\\\\(\\\\?#","beginCaptures":{"0":{"name":"punctuation.comment.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.comment.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"name":"comment.regexp","patterns":[{"include":"#codetags"}]},"regexp-conditional":{"begin":"(\\\\()\\\\?\\\\((\\\\w+(?:\\\\s+\\\\p{alnum}+)?|\\\\d+)\\\\)","beginCaptures":{"0":{"name":"keyword.operator.conditional.regexp"},"1":{"name":"punctuation.parenthesis.conditional.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"keyword.operator.conditional.negative.regexp punctuation.parenthesis.conditional.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-escape-catchall":{"match":"\\\\\\\\(.|\\\\n)","name":"constant.character.escape.regexp"},"regexp-escape-character":{"match":"\\\\\\\\(x\\\\h{2}|0[0-7]{1,2}|[0-7]{3})","name":"constant.character.escape.regexp"},"regexp-escape-sequence":{"patterns":[{"include":"#regexp-escape-special"},{"include":"#regexp-escape-character"},{"include":"#regexp-escape-unicode"},{"include":"#regexp-backreference-number"},{"include":"#regexp-escape-catchall"}]},"regexp-escape-special":{"match":"\\\\\\\\([ABDSWZbdsw])","name":"support.other.escape.special.regexp"},"regexp-escape-unicode":{"match":"\\\\\\\\(u\\\\h{4}|U\\\\h{8})","name":"constant.character.unicode.regexp"},"regexp-expression":{"patterns":[{"include":"#regexp-base-expression"},{"include":"#regexp-character-set"},{"include":"#regexp-comments"},{"include":"#regexp-flags"},{"include":"#regexp-named-group"},{"include":"#regexp-backreference"},{"include":"#regexp-lookahead"},{"include":"#regexp-lookahead-negative"},{"include":"#regexp-lookbehind"},{"include":"#regexp-lookbehind-negative"},{"include":"#regexp-conditional"},{"include":"#regexp-parentheses-non-capturing"},{"include":"#regexp-parentheses"}]},"regexp-flags":{"match":"\\\\(\\\\?[Laimsux]+\\\\)","name":"storage.modifier.flag.regexp"},"regexp-lookahead":{"begin":"(\\\\()\\\\?=","beginCaptures":{"0":{"name":"keyword.operator.lookahead.regexp"},"1":{"name":"punctuation.parenthesis.lookahead.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"keyword.operator.lookahead.regexp punctuation.parenthesis.lookahead.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-lookahead-negative":{"begin":"(\\\\()\\\\?!","beginCaptures":{"0":{"name":"keyword.operator.lookahead.negative.regexp"},"1":{"name":"punctuation.parenthesis.lookahead.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"keyword.operator.lookahead.negative.regexp punctuation.parenthesis.lookahead.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-lookbehind":{"begin":"(\\\\()\\\\?<=","beginCaptures":{"0":{"name":"keyword.operator.lookbehind.regexp"},"1":{"name":"punctuation.parenthesis.lookbehind.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"keyword.operator.lookbehind.regexp punctuation.parenthesis.lookbehind.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-lookbehind-negative":{"begin":"(\\\\()\\\\?)","beginCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.begin.regexp"},"2":{"name":"entity.name.tag.named.group.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.named.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"name":"meta.named.regexp","patterns":[{"include":"#regexp-expression"}]},"regexp-parentheses":{"begin":"\\\\(","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-parentheses-non-capturing":{"begin":"\\\\(\\\\?:","beginCaptures":{"0":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.begin.regexp"}},"end":"(\\\\))","endCaptures":{"1":{"name":"support.other.parenthesis.regexp punctuation.parenthesis.non-capturing.end.regexp"},"2":{"name":"invalid.illegal.newline.python"}},"patterns":[{"include":"#regexp-expression"}]},"regexp-quantifier":{"match":"\\\\{(\\\\d+|\\\\d+,(\\\\d+)?|,\\\\d+)}","name":"keyword.operator.quantifier.regexp"}},"scopeName":"source.regexp.python","aliases":["regex"]}')),Ba=[wT]});var tw={};u1(tw,{default:()=>U4});var xT,U4,m7=n1(()=>{xT=Object.freeze(JSON.parse('{"displayName":"C","name":"c","patterns":[{"include":"#preprocessor-rule-enabled"},{"include":"#preprocessor-rule-disabled"},{"include":"#preprocessor-rule-conditional"},{"include":"#predefined_macros"},{"include":"#comments"},{"include":"#switch_statement"},{"include":"#anon_pattern_1"},{"include":"#storage_types"},{"include":"#anon_pattern_2"},{"include":"#anon_pattern_3"},{"include":"#anon_pattern_4"},{"include":"#anon_pattern_5"},{"include":"#anon_pattern_6"},{"include":"#anon_pattern_7"},{"include":"#operators"},{"include":"#numbers"},{"include":"#strings"},{"include":"#anon_pattern_range_1"},{"include":"#anon_pattern_range_2"},{"include":"#anon_pattern_range_3"},{"include":"#pragma-mark"},{"include":"#anon_pattern_range_4"},{"include":"#anon_pattern_range_5"},{"include":"#anon_pattern_range_6"},{"include":"#anon_pattern_8"},{"include":"#anon_pattern_9"},{"include":"#anon_pattern_10"},{"include":"#anon_pattern_11"},{"include":"#anon_pattern_12"},{"include":"#anon_pattern_13"},{"include":"#block"},{"include":"#parens"},{"include":"#anon_pattern_range_7"},{"include":"#line_continuation_character"},{"include":"#anon_pattern_range_8"},{"include":"#anon_pattern_range_9"},{"include":"#anon_pattern_14"},{"include":"#anon_pattern_15"}],"repository":{"access-method":{"begin":"([A-Z_a-z][0-9A-Z_a-z]*|(?<=[])]))\\\\s*(?:(\\\\.)|(->))((?:[A-Z_a-z][0-9A-Z_a-z]*\\\\s*(?:\\\\.|->))*)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(\\\\()","beginCaptures":{"1":{"name":"variable.object.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"match":"\\\\.","name":"punctuation.separator.dot-access.c"},{"match":"->","name":"punctuation.separator.pointer-access.c"},{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"variable.object.c"},{"match":".+","name":"everything.else.c"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"name":"meta.function-call.member.c","patterns":[{"include":"#function-call-innards"}]},"anon_pattern_1":{"match":"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b","name":"keyword.control.c"},"anon_pattern_10":{"match":"\\\\b((?:int8|int16|int32|int64|uint8|uint16|uint32|uint64|int_least8|int_least16|int_least32|int_least64|uint_least8|uint_least16|uint_least32|uint_least64|int_fast8|int_fast16|int_fast32|int_fast64|uint_fast8|uint_fast16|uint_fast32|uint_fast64|intptr|uintptr|intmax|uintmax)_t)\\\\b","name":"support.type.stdint.c"},"anon_pattern_11":{"match":"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b","name":"support.constant.mac-classic.c"},"anon_pattern_12":{"match":"\\\\b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\\\b","name":"support.type.mac-classic.c"},"anon_pattern_13":{"match":"\\\\b([0-9A-Z_a-z]+_t)\\\\b","name":"support.type.posix-reserved.c"},"anon_pattern_14":{"match":";","name":"punctuation.terminator.statement.c"},"anon_pattern_15":{"match":",","name":"punctuation.separator.delimiter.c"},"anon_pattern_2":{"match":"typedef","name":"keyword.other.typedef.c"},"anon_pattern_3":{"match":"\\\\b(const|extern|register|restrict|static|volatile|inline)\\\\b","name":"storage.modifier.c"},"anon_pattern_4":{"match":"\\\\bk[A-Z]\\\\w*\\\\b","name":"constant.other.variable.mac-classic.c"},"anon_pattern_5":{"match":"\\\\bg[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.global.mac-classic.c"},"anon_pattern_6":{"match":"\\\\bs[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.static.mac-classic.c"},"anon_pattern_7":{"match":"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b","name":"constant.language.c"},"anon_pattern_8":{"match":"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b","name":"support.type.sys-types.c"},"anon_pattern_9":{"match":"\\\\b(pthread_(?:attr_|cond_|condattr_|mutex_|mutexattr_|once_|rwlock_|rwlockattr_||key_)t)\\\\b","name":"support.type.pthread.c"},"anon_pattern_range_1":{"begin":"((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))((#)\\\\s*define)\\\\b\\\\s+((?","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.other.lt-gt.include.c"}]},"anon_pattern_range_4":{"begin":"^\\\\s*((#)\\\\s*line)\\\\b","beginCaptures":{"1":{"name":"keyword.control.directive.line.c"},"2":{"name":"punctuation.definition.directive.c"}},"end":"(?=/[*/])|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"variable.other.c"},"2":{"name":"punctuation.section.parens.begin.bracket.round.initialization.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.initialization.c"}},"name":"meta.initialization.c","patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.c"}},"end":"}|(?=\\\\s*#\\\\s*e(?:lif|lse|ndif)\\\\b)","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.c"}},"patterns":[{"include":"#block_innards"}]},{"include":"#parens-block"},{"include":"$self"}]},"c_conditional_context":{"patterns":[{"include":"$self"},{"include":"#block_innards"}]},"c_function_call":{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()(?=(?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++\\\\s*\\\\(|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)","name":"meta.function-call.c","patterns":[{"include":"#function-call-innards"}]},"case_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?\\\\s*)(//[!/]+)","beginCaptures":{"1":{"name":"punctuation.definition.comment.documentation.c"}},"end":"(?<=\\\\n)(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"},"2":{"patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},"3":{"name":"punctuation.definition.comment.end.documentation.c"}},"match":"(/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*/)","name":"comment.block.documentation.c"},{"begin":"((?>\\\\s*)/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s)))","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"}},"end":"([!*]*\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.documentation.c"}},"name":"comment.block.documentation.c","patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"meta.toc-list.banner.block.c"}},"match":"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?","name":"comment.block.banner.c"},{"begin":"(/\\\\*)","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.c"}},"end":"(\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.c"}},"name":"comment.block.c"},{"captures":{"1":{"name":"meta.toc-list.banner.line.c"}},"match":"^// =(\\\\s*.*?)\\\\s*=$\\\\n?","name":"comment.line.banner.c"},{"begin":"((?:^[\\\\t ]+)?)(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.c"}},"end":"(?!\\\\G)","patterns":[{"begin":"(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?=\\\\n)","name":"comment.line.double-slash.c","patterns":[{"include":"#line_continuation_character"}]}]}]},{"include":"#block_comment"},{"include":"#line_comment"}]},{"include":"#block_comment"},{"include":"#line_comment"}]},"default_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"include":"#block_innards"}]},"function-innards":{"patterns":[{"include":"#comments"},{"include":"#storage_types"},{"include":"#operators"},{"include":"#vararg_ellipses"},{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()((?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.parameters.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.c"}},"name":"meta.function.definition.parameters.c","patterns":[{"include":"#probably_a_parameter"},{"include":"#function-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-innards"}]},{"include":"$self"}]},"inline_comment":{"patterns":[{"patterns":[{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/))"},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},"line_comment":{"patterns":[{"begin":"\\\\s*+(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?<=\\\\n)(?\\\\*?))"}]},"5":{"name":"variable.other.member.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*\\\\b((?!(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|atomic_uintptr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintmax_t|pthread_mutex_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_attr_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_cond_t|pthread_once_t|uint_fast64_t|uint_fast16_t|atomic_size_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|pthread_key_t|atomic_ullong|atomic_ushort|uint_fast32_t|atomic_schar|atomic_short|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast16_t|atomic_ulong|atomic_llong|int_least8_t|atomic_uchar|memory_order|suseconds_t|int_fast8_t|atomic_bool|atomic_char|atomic_uint|atomic_long|atomic_int|useconds_t|_Imaginary|blksize_t|pthread_t|in_addr_t|uintptr_t|in_port_t|uintmax_t|blkcnt_t|uint16_t|unsigned|_Complex|uint32_t|intptr_t|intmax_t|uint64_t|u_quad_t|int64_t|int32_t|ssize_t|caddr_t|clock_t|uint8_t|u_short|swblk_t|segsz_t|int16_t|fixpt_t|daddr_t|nlink_t|qaddr_t|size_t|time_t|mode_t|signed|quad_t|ushort|u_long|u_char|double|int8_t|ino_t|uid_t|pid_t|_Bool|float|dev_t|div_t|short|gid_t|off_t|u_int|key_t|id_t|uint|long|void|char|bool|id_t|int)\\\\b)[A-Z_a-z]\\\\w*\\\\b(?!\\\\())"},"method_access":{"begin":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*([A-Z_a-z]\\\\w*)(\\\\()","beginCaptures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"include":"#member_access"},{"include":"#method_access"},{"captures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"contentName":"meta.function-call.member.c","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"patterns":[{"include":"#function-call-innards"}]},"numbers":{"captures":{"0":{"patterns":[{"begin":"(?=.)","end":"$","patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.c"},"2":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"3":{"name":"punctuation.separator.constant.numeric"},"4":{"name":"constant.numeric.hexadecimal.c"},"5":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"6":{"name":"punctuation.separator.constant.numeric"},"8":{"name":"keyword.other.unit.exponent.hexadecimal.c"},"9":{"name":"keyword.operator.plus.exponent.hexadecimal.c"},"10":{"name":"keyword.operator.minus.exponent.hexadecimal.c"},"11":{"name":"constant.numeric.exponent.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"12":{"name":"keyword.other.unit.suffix.floating-point.c"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)\'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)\'(?=\\\\h)))*)?((?>|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.c"},{"match":"<<|>>","name":"keyword.operator.bitwise.shift.c"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.c"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.c"},{"match":"[\\\\&^|~]","name":"keyword.operator.c"},{"match":"=","name":"keyword.operator.assignment.c"},{"match":"[-%*+/]","name":"keyword.operator.c"},{"begin":"(\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"end":"(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"patterns":[{"include":"#function-call-innards"},{"include":"$self"}]}]},"parens":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.c","patterns":[{"include":"$self"}]},"parens-block":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.block.c","patterns":[{"include":"#block_innards"},{"match":"(?-im:(?]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"(\\\\))|(?])\\\\s*([A-Z_a-z]\\\\w*)\\\\s*(?=(?:\\\\[]\\\\s*)?[),])"},"static_assert":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"keyword.other.static_assert.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"10":{"name":"punctuation.section.arguments.begin.bracket.round.static_assert.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.static_assert.c"}},"patterns":[{"begin":"(,)\\\\s*(?=(?:L|u8?|U\\\\s*\\")?)","beginCaptures":{"1":{"name":"punctuation.separator.delimiter.comma.c"}},"end":"(?=\\\\))","name":"meta.static_assert.message.c","patterns":[{"include":"#string_context"}]},{"include":"#evaluation_context"}]},"storage_types":{"patterns":[{"match":"(?-im:(?\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))(?:\\\\n|$)"},{"include":"#comments"},{"begin":"(((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.c"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"4":{"name":"comment.block.c"},"5":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.c"}},"patterns":[{"begin":"(R?)(\\")","beginCaptures":{"1":{"name":"meta.encoding.c"},"2":{"name":"punctuation.definition.string.begin.assembly.c"}},"contentName":"meta.embedded.assembly.c","end":"(\\")","endCaptures":{"1":{"name":"punctuation.definition.string.end.assembly.c"}},"name":"string.quoted.double.c","patterns":[{"include":"source.asm"},{"include":"source.x86"},{"include":"source.x86_64"},{"include":"source.arm"},{"include":"#backslash_escapes"},{"include":"#string_escaped_char"}]},{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.inner.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.inner.c"}},"patterns":[{"include":"#evaluation_context"}]},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"variable.other.asm.label.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"\\\\[((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))([A-Z_a-z]\\\\w*)((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))]"},{"match":":","name":"punctuation.separator.delimiter.colon.assembly.c"},{"include":"#comments"}]}]}]},"string_escaped_char":{"patterns":[{"match":"\\\\\\\\([\\"\'?\\\\\\\\abefnprtv]|[0-3]\\\\d{0,2}|[4-7]\\\\d?|x\\\\h{0,2}|u\\\\h{0,4}|U\\\\h{0,8})","name":"constant.character.escape.c"},{"match":"\\\\\\\\.","name":"invalid.illegal.unknown-escape.c"}]},"string_placeholder":{"patterns":[{"match":"%(\\\\d+\\\\$)?[- #\'+0]*[,:;_]?((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?(hh?|ll|[Ljlqtz]|vh|vl?|hv|hl)?[%AC-GOSUXac-ginopsux]","name":"constant.other.placeholder.c"},{"captures":{"1":{"name":"invalid.illegal.placeholder.c"}},"match":"(%)(?!\\"\\\\s*(PRI|SCN))"}]},"strings":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.double.c","patterns":[{"include":"#string_escaped_char"},{"include":"#string_placeholder"},{"include":"#line_continuation_character"}]},{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.single.c","patterns":[{"include":"#string_escaped_char"},{"include":"#line_continuation_character"}]}]},"switch_conditional_parentheses":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"punctuation.section.parens.begin.bracket.round.conditional.switch.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.conditional.switch.c"}},"name":"meta.conditional.switch.c","patterns":[{"include":"#evaluation_context"},{"include":"#c_conditional_context"}]},"switch_statement":{"begin":"(((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","name":"meta.block.switch.c","patterns":[{"begin":"\\\\G ?","end":"(\\\\{|<%|\\\\?\\\\?<|(?=;))","endCaptures":{"1":{"name":"punctuation.section.block.begin.bracket.curly.switch.c"}},"name":"meta.head.switch.c","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","end":"(}|%>|\\\\?\\\\?>)","endCaptures":{"1":{"name":"punctuation.section.block.end.bracket.curly.switch.c"}},"name":"meta.body.switch.c","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"},{"include":"#block_innards"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)[\\\\n\\\\s]*","end":"[\\\\n\\\\s]*(?=;)","name":"meta.tail.switch.c","patterns":[{"include":"$self"}]}]},"vararg_ellipses":{"match":"(?{m7();kT=Object.freeze(JSON.parse('{"displayName":"GLSL","fileTypes":["vs","fs","gs","vsh","fsh","gsh","vshader","fshader","gshader","vert","frag","geom","f.glsl","v.glsl","g.glsl"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*}","name":"glsl","patterns":[{"match":"\\\\b(break|case|continue|default|discard|do|else|for|if|return|switch|while)\\\\b","name":"keyword.control.glsl"},{"match":"\\\\b(void|bool|int|uint|float|vec2|vec3|vec4|bvec2|bvec3|bvec4|ivec2|ivec3|uvec2|uvec3|mat2|mat3|mat4|mat2x2|mat2x3|mat2x4|mat3x2|mat3x3|mat3x4|mat4x2|mat4x3|mat4x4|sampler[123|]D|samplerCube|sampler2DRect|sampler[12|]DShadow|sampler2DRectShadow|sampler[12|]DArray|sampler[12|]DArrayShadow|samplerBuffer|sampler2DMS|sampler2DMSArray|struct|isampler[123|]D|isamplerCube|isampler2DRect|isampler[12|]DArray|isamplerBuffer|isampler2DMS|isampler2DMSArray|usampler[123|]D|usamplerCube|usampler2DRect|usampler[12|]DArray|usamplerBuffer|usampler2DMS|usampler2DMSArray)\\\\b","name":"storage.type.glsl"},{"match":"\\\\b(attribute|centroid|const|flat|in|inout|invariant|noperspective|out|smooth|uniform|varying)\\\\b","name":"storage.modifier.glsl"},{"match":"\\\\b(gl_(?:BackColor|BackLightModelProduct|BackLightProduct|BackMaterial|BackSecondaryColor|ClipDistance|ClipPlane|ClipVertex|Color|DepthRange|DepthRangeParameters|EyePlaneQ|EyePlaneR|EyePlaneS|EyePlaneT|Fog|FogCoord|FogFragCoord|FogParameters|FragColor|FragCoord|FragDat|FragDept|FrontColor|FrontFacing|FrontLightModelProduct|FrontLightProduct|FrontMaterial|FrontSecondaryColor|InstanceID|Layer|LightModel|LightModelParameters|LightModelProducts|LightProducts|LightSource|LightSourceParameters|MaterialParameters|ModelViewMatrix|ModelViewMatrixInverse|ModelViewMatrixInverseTranspose|ModelViewMatrixTranspose|ModelViewProjectionMatrix|ModelViewProjectionMatrixInverse|ModelViewProjectionMatrixInverseTranspose|ModelViewProjectionMatrixTranspose|MultiTexCoord[0-7]|Normal|NormalMatrix|NormalScale|ObjectPlaneQ|ObjectPlaneR|ObjectPlaneS|ObjectPlaneT|Point|PointCoord|PointParameters|PointSize|Position|PrimitiveIDIn|ProjectionMatrix|ProjectionMatrixInverse|ProjectionMatrixInverseTranspose|ProjectionMatrixTranspose|SecondaryColor|TexCoord|TextureEnvColor|TextureMatrix|TextureMatrixInverse|TextureMatrixInverseTranspose|TextureMatrixTranspose|Vertex|VertexIDh))\\\\b","name":"support.variable.glsl"},{"match":"\\\\b(gl_Max(?:ClipPlane|CombinedTextureImageUnit|DrawBuffer|FragmentUniformComponent|Light|TextureCoord|TextureImageUnit|TextureUnit|VaryingFloat|VertexAttrib|VertexTextureImageUnit|VertexUniformComponent)s)\\\\b","name":"support.constant.glsl"},{"match":"\\\\b(abs|acos|all|any|asin|atan|ceil|clamp|cos|cross|degrees|dFdx|dFdy|distance|dot|equal|exp2??|faceforward|floor|fract|ftransform|fwidth|greaterThan|greaterThanEqual|inversesqrt|length|lessThan|lessThanEqual|log2??|matrixCompMult|max|min|mix|mod|noise[1-4]|normalize|not|notEqual|outerProduct|pow|radians|reflect|refract|shadow1D|shadow1DLod|shadow1DProj|shadow1DProjLod|shadow2D|shadow2DLod|shadow2DProj|shadow2DProjLod|sign|sin|smoothstep|sqrt|step|tan|texture1D|texture1DLod|texture1DProj|texture1DProjLod|texture2D|texture2DLod|texture2DProj|texture2DProjLod|texture3D|texture3DLod|texture3DProj|texture3DProjLod|textureCube|textureCubeLod|transpose)\\\\b","name":"support.function.glsl"},{"match":"\\\\b(asm|double|enum|extern|goto|inline|long|short|sizeof|static|typedef|union|unsigned|volatile)\\\\b","name":"invalid.illegal.glsl"},{"include":"source.c"}],"scopeName":"source.glsl","embeddedLangs":["c"]}')),Pa=[...U4,kT]});var zT,nw,aw=n1(()=>{Fo();jo();zT=Object.freeze(JSON.parse('{"displayName":"C++","name":"cpp-macro","patterns":[{"include":"#ever_present_context"},{"include":"#constructor_root"},{"include":"#destructor_root"},{"include":"#function_definition"},{"include":"source.cpp#simple_array_assignment"},{"include":"#operator_overload"},{"include":"#using_namespace"},{"include":"source.cpp#type_alias"},{"include":"source.cpp#using_name"},{"include":"source.cpp#namespace_alias"},{"include":"#namespace_block"},{"include":"#extern_block"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"source.cpp#misc_keywords"},{"include":"source.cpp#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"source.cpp#template_isolated_definition"},{"include":"#template_definition"},{"include":"source.cpp#template_explicit_instantiation"},{"include":"source.cpp#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#evaluation_context"}],"repository":{"alignas_attribute":{"begin":"alignas\\\\(","beginCaptures":{"0":{"name":"punctuation.section.attribute.begin.cpp"}},"end":"\\\\)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)|(?=(?|\\\\*/))\\\\s*+(?:((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"lambdas":{"begin":"(?:(?<=\\\\S|^)(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"source.cpp#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"source.cpp#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"source.cpp#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])|(?=(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)|(?=(?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"source.cpp#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"source.cpp#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"parameter":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=\\\\w)","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?:(?=\\\\))|(,))|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?=(?|(?=(?|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?X4});var CT,X4,d7=n1(()=>{aw();Fo();jo();CT=Object.freeze(JSON.parse('{"displayName":"C++","name":"cpp","patterns":[{"include":"#ever_present_context"},{"include":"#constructor_root"},{"include":"#destructor_root"},{"include":"#function_definition"},{"include":"#simple_array_assignment"},{"include":"#operator_overload"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#namespace_block"},{"include":"#extern_block"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#template_isolated_definition"},{"include":"#template_definition"},{"include":"#template_explicit_instantiation"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#evaluation_context"}],"repository":{"access_control_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.modifier.access.control.$4.cpp"},"4":{},"5":{"name":"punctuation.separator.colon.access.control.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((p(?:rotected|rivate|ublic))\\\\s+{0,1}(:))"},"alignas_attribute":{"begin":"alignas\\\\(","beginCaptures":{"0":{"name":"punctuation.section.attribute.begin.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.attribute.end.cpp"}},"name":"support.other.attribute.cpp","patterns":[{"include":"#attributes_context"},{"begin":"\\\\(","beginCaptures":{},"end":"\\\\)","endCaptures":{},"patterns":[{"include":"#attributes_context"},{"include":"#string_context"},{"include":"#ever_present_context"}]},{"captures":{"1":{"name":"keyword.other.using.directive.cpp"},"2":{"name":"entity.name.namespace.cpp"}},"match":"(using)\\\\s+((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"include":"$self"}]}]},"class_declare":{"captures":{"1":{"name":"storage.type.class.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.class.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"constructor_root":{"begin":"\\\\s*+((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"control_flow_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.control.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))\\\\s+{0,1}(;?)","name":"meta.preprocessor.import.cpp"},"decltype":{"begin":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"destructor_root":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"diagnostic":{"begin":"^(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}(error|warning))\\\\b\\\\s+{0,1}","beginCaptures":{"1":{"name":"keyword.control.directive.diagnostic.$7.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.definition.directive.cpp"},"7":{}},"end":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.enum.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.enum.cpp"}},"name":"meta.head.enum.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.enum.cpp"}},"name":"meta.body.enum.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#enumerator_list"},{"include":"#comments"},{"include":"#comma"},{"include":"#semicolon"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.enum.cpp","patterns":[{"include":"$self"}]}]},"enum_declare":{"captures":{"1":{"name":"storage.type.enum.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.enum.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.extern.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.extern.cpp"}},"name":"meta.head.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.extern.cpp"}},"name":"meta.body.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.extern.cpp","patterns":[{"include":"$self"}]},{"include":"$self"}]},"function_body_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#simple_array_assignment"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#over_qualified_types"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"include":"#switch_statement"},{"include":"#goto_statement"},{"include":"#evaluation_context"},{"include":"#label"}]},"function_call":{"patterns":[{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp"}},"patterns":[{"include":"#evaluation_context"}]}]},"function_definition":{"begin":"(?:(?:^|\\\\G|(?<=[;}]))|(?<=>|\\\\*/))\\\\s*+(?:((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.cpp"}},"name":"meta.head.function.definition.cpp","patterns":[{"include":"#ever_present_context"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.cpp"}},"contentName":"meta.function.definition.parameters","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#parameter_or_maybe_value"},{"include":"#comma"},{"include":"#evaluation_context"}]},{"captures":{"1":{"name":"punctuation.definition.function.return-type.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.cpp"}},"name":"meta.body.function.definition.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.cpp","patterns":[{"include":"$self"}]}]},"function_parameter_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#parameter"},{"include":"#comma"}]},"function_pointer":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"function_pointer_parameter":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"functional_specifiers_pre_parameters":{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))","name":"meta.preprocessor.include.cpp"},"inheritance_context":{"patterns":[{"include":"#ever_present_context"},{"match":",","name":"punctuation.separator.delimiter.comma.inheritance.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"inline_builtin_storage_type":{"captures":{"1":{"name":"storage.type.primitive.cpp storage.type.built-in.primitive.cpp"},"2":{"name":"storage.type.cpp storage.type.built-in.cpp"},"3":{"name":"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp"},"4":{"name":"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp"}},"match":"\\\\s*+(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])","endCaptures":{},"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.lambda.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.lambda.cpp"}},"name":"meta.function.definition.parameters.lambda.cpp","patterns":[{"include":"#function_parameter_context"}]},{"match":"(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"include":"#comments"},{"match":"\\\\S+","name":"storage.type.return-type.lambda.cpp"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.lambda.cpp"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.lambda.cpp"}},"name":"meta.function.definition.body.lambda.cpp","patterns":[{"include":"#function_body_context"}]}]},"language_constants":{"match":"(?\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"12":{"name":"variable.other.property.cpp"}},"match":"(?:(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}\\\\b((?!(?:uint_least32_t|uint_least16_t|uint_least64_t|int_least32_t|int_least64_t|uint_fast32_t|uint_fast64_t|uint_least8_t|uint_fast16_t|int_least16_t|int_fast16_t|int_least8_t|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast8_t|suseconds_t|useconds_t|in_addr_t|uintmax_t|in_port_t|uintptr_t|blksize_t|uint32_t|uint64_t|u_quad_t|intmax_t|unsigned|blkcnt_t|uint16_t|intptr_t|swblk_t|wchar_t|u_short|qaddr_t|caddr_t|daddr_t|fixpt_t|nlink_t|segsz_t|clock_t|ssize_t|int16_t|int32_t|int64_t|uint8_t|int8_t|mode_t|quad_t|ushort|u_long|u_char|double|signed|time_t|size_t|key_t|div_t|ino_t|uid_t|gid_t|off_t|pid_t|float|dev_t|u_int|short|bool|id_t|uint|long|char|void|auto|id_t|int)\\\\W)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b(?!\\\\())"},"memory_operators":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.operator.wordlike.cpp"},"4":{"name":"keyword.operator.delete.array.cpp"},"5":{"name":"keyword.operator.delete.array.bracket.cpp"},"6":{"name":"keyword.operator.delete.cpp"},"7":{"name":"keyword.operator.new.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:(?:(delete)\\\\s+{0,1}(\\\\[])|(delete))|(new))(?!\\\\w))"},"method_access":{"begin":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.cpp"}},"patterns":[{"include":"#evaluation_context"}]},"misc_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.other.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.namespace.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.namespace.cpp"}},"name":"meta.head.namespace.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#attributes_context"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.namespace.cpp"},"6":{"name":"punctuation.separator.scope-resolution.namespace.block.cpp"},"7":{"name":"storage.modifier.inline.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.namespace.cpp"}},"name":"meta.body.namespace.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.namespace.cpp","patterns":[{"include":"$self"}]}]},"noexcept_operator":{"begin":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.operator-overload.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.head.function.definition.special.operator-overload.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp"}},"contentName":"meta.function.definition.parameters.special.operator-overload","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp"}},"patterns":[{"include":"#function_parameter_context"},{"include":"#evaluation_context"}]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp"},"7":{"name":"keyword.other.delete.function.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.body.function.definition.special.operator-overload.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.operator-overload.cpp","patterns":[{"include":"$self"}]}]},"operators":{"patterns":[{"begin":"((?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"over_qualified_types":{"patterns":[{"captures":{"1":{"name":"storage.type.struct.parameter.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.parameter.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"patterns":[{"include":"#inline_comment"}]},"13":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"14":{"name":"variable.other.object.declare.cpp"},"15":{"patterns":[{"include":"#inline_comment"}]},"16":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"17":{"patterns":[{"include":"#inline_comment"}]},"18":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"19":{"patterns":[{"include":"#inline_comment"}]},"20":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"\\\\b(struct)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w])","name":"meta.qualified-type.cpp"},"qualifiers_and_specifiers_post_parameters":{"patterns":[{"begin":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition_operator_overload":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_operator_overload_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.operator-overload.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_alias":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_alias_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.alias.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_block":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_block_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.block.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_using":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_using_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.using.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_parameter":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_parameter_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.parameter.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"semicolon":{"match":";","name":"punctuation.terminator.statement.cpp"},"simple_array_assignment":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))"},"simple_constructor_call":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(?=(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?"},"sizeof_operator":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"include":"$self"}]}]},"struct_declare":{"captures":{"1":{"name":"storage.type.struct.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.switch.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.switch.cpp"}},"name":"meta.head.switch.cpp","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.switch.cpp"}},"name":"meta.body.switch.cpp","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.switch.cpp","patterns":[{"include":"$self"}]}]},"template_argument_defaulted":{"captures":{"1":{"name":"storage.type.template.argument.$1.cpp"},"2":{"name":"entity.name.type.template.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"(?<=[,<])\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(=)"},"template_call_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"include":"#storage_types"},{"include":"#language_constants"},{"include":"#scope_resolution_template_call_inner_generated"},{"include":"#operators"},{"include":"#number_literal"},{"include":"#string_context"},{"include":"#comma_in_template_argument"},{"include":"#qualified_type"}]},"template_call_innards":{"captures":{"0":{"patterns":[{"include":"#template_call_range_helper"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+","name":"meta.template.call.cpp"},"template_call_range":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_context"}]},"template_call_range_helper":{"patterns":[{"captures":{"1":{"patterns":[{"begin":"(?=.)","beginCaptures":{},"end":"$","endCaptures":{},"patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.cpp"},"2":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"3":{"name":"punctuation.separator.constant.numeric.cpp"},"4":{"name":"constant.numeric.hexadecimal.cpp"},"5":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"6":{"name":"punctuation.separator.constant.numeric.cpp"},"7":{"name":"keyword.other.unit.exponent.hexadecimal.cpp"},"8":{"name":"keyword.operator.plus.exponent.hexadecimal.cpp"},"9":{"name":"keyword.operator.minus.exponent.hexadecimal.cpp"},"10":{"name":"constant.numeric.exponent.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)\'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"11":{"name":"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp"},"12":{"name":"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)\'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)\'(?=\\\\h)))*)?(?:(?","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"}},"name":"meta.template.definition.cpp","patterns":[{"begin":"(?<=\\\\w)\\\\s+{0,1}<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"patterns":[{"include":"#template_call_context"}]},{"include":"#template_definition_context"}]},"template_definition_argument":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.template.argument.$3.cpp"},"4":{"patterns":[{"match":"(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*","name":"storage.type.template.argument.$0.cpp"}]},"5":{"name":"entity.name.type.template.cpp"},"6":{"name":"storage.type.template.argument.$6.cpp"},"7":{"name":"punctuation.vararg-ellipses.template.definition.cpp"},"8":{"name":"entity.name.type.template.cpp"},"9":{"name":"storage.type.template.cpp"},"10":{"name":"punctuation.section.angle-brackets.begin.template.definition.cpp"},"11":{"name":"storage.type.template.argument.$11.cpp"},"12":{"name":"entity.name.type.template.cpp"},"13":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"},"14":{"name":"storage.type.template.argument.$14.cpp"},"15":{"name":"entity.name.type.template.cpp"},"16":{"name":"keyword.operator.assignment.cpp"},"17":{"name":"punctuation.separator.delimiter.comma.template.argument.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)|((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+)+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\.\\\\.\\\\.)\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|(?)\\\\s+{0,1}(class|typename)(?:\\\\s+((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))?)\\\\s+{0,1}(?:(=)\\\\s+{0,1}(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?(?:(,)|(?=>|$))"},"template_definition_context":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"},{"include":"#template_definition_argument"},{"include":"#template_argument_defaulted"},{"include":"#template_call_innards"},{"include":"#evaluation_context"}]},"template_explicit_instantiation":{"captures":{"1":{"name":"storage.modifier.specifier.extern.cpp"},"2":{"name":"storage.type.template.cpp"}},"match":"(?)\\\\s+{0,1}$"},"ternary_operator":{"applyEndPatternLast":1,"begin":"\\\\?","beginCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"end":":","endCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#string_context"},{"include":"#number_literal"},{"include":"#method_access"},{"include":"#member_access"},{"include":"#predefined_macros"},{"include":"#operators"},{"include":"#memory_operators"},{"include":"#wordlike_operators"},{"include":"#type_casting_operators"},{"include":"#control_flow_keywords"},{"include":"#exception_keywords"},{"include":"#the_this_keyword"},{"include":"#language_constants"},{"include":"#constructor_bracket_call"},{"include":"#simple_constructor_call"},{"include":"#simple_array_assignment"},{"include":"#builtin_storage_type_initilizer"},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"#functional_specifiers_pre_parameters"},{"include":"#storage_types"},{"include":"#lambdas"},{"include":"#attributes_context"},{"include":"#parentheses"},{"include":"#function_call"},{"include":"#scope_resolution_inner_generated"},{"include":"#square_brackets"},{"include":"#semicolon"},{"include":"#comma"},{"include":"#unknown_variable"}]},"the_this_keyword":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"variable.language.this.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))|(.*(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]}]},"typedef_struct":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},"undef":{"captures":{"1":{"name":"keyword.control.directive.undef.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"punctuation.definition.directive.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"name":"entity.name.function.preprocessor.cpp"}},"match":"^((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}undef)\\\\b(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"include":"$self"}]}]},"union_declare":{"captures":{"1":{"name":"storage.type.union.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.union.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))","name":"meta.assignment.cpp"},"variable_declare":{"captures":{"1":{"patterns":[{"include":"#storage_specifiers"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"patterns":[{"include":"#inline_comment"}]},"4":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"5":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"\'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"\'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?Ho});var AT,Ho,No=n1(()=>{m7();AT=Object.freeze(JSON.parse('{"displayName":"Lua","name":"lua","patterns":[{"begin":"\\\\b(?:(local)\\\\s+)?(function)\\\\b(?![,:])","beginCaptures":{"1":{"name":"keyword.local.lua"},"2":{"name":"keyword.control.lua"}},"end":"(?<=[-\\\\]\\"\')\\\\[{}])","name":"meta.function.lua","patterns":[{"include":"#comment"},{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.parameters.begin.lua"}},"end":"(\\\\))|(?=[-\\\\]\\"\'\\\\[{}])|(?"},{"match":"<[*A-Z_a-z][-*.0-9A-Z_a-z]*>","name":"storage.type.generic.lua"},{"match":"\\\\b(break|do|else|for|if|elseif|goto|return|then|repeat|while|until|end|in)\\\\b","name":"keyword.control.lua"},{"match":"\\\\b(local)\\\\b","name":"keyword.local.lua"},{"captures":{"1":{"name":"keyword.global.lua"}},"match":"^\\\\s*(global)\\\\b(?!\\\\s*=)"},{"match":"\\\\b(function)\\\\b(?![,:])","name":"keyword.control.lua"},{"match":"(?=?|(?]","name":"keyword.operator.lua"}]},{"begin":"(?<=---)[\\\\t ]*@see","beginCaptures":{"0":{"name":"storage.type.annotation.lua"}},"end":"(?=[\\\\n#@])","patterns":[{"match":"\\\\b([*A-Z_a-z][-*.0-9A-Z_a-z]*)","name":"support.class.lua"},{"match":"#","name":"keyword.operator.lua"}]},{"begin":"(?<=---)[\\\\t ]*@diagnostic","beginCaptures":{"0":{"name":"storage.type.annotation.lua"}},"end":"(?=[\\\\n#@])","patterns":[{"begin":"([-0-9A-Z_a-z]+)[\\\\t ]*(:)?","beginCaptures":{"1":{"name":"keyword.other.unit"},"2":{"name":"keyword.operator.unit"}},"end":"(?=\\\\n)","patterns":[{"match":"\\\\b([*A-Z_a-z][-0-9A-Z_a-z]*)","name":"support.class.lua"},{"match":",","name":"keyword.operator.lua"}]}]},{"begin":"(?<=---)[\\\\t ]*@module","beginCaptures":{"0":{"name":"storage.type.annotation.lua"}},"end":"(?=[\\\\n#@])","patterns":[{"include":"#string"}]},{"match":"(?<=---)[\\\\t ]*@(async|nodiscard)","name":"storage.type.annotation.lua"},{"begin":"(?<=---)\\\\|\\\\s*[+>]?","beginCaptures":{"0":{"name":"storage.type.annotation.lua"}},"end":"(?=[\\\\n#@])","patterns":[{"include":"#string"}]}]},"emmydoc.type":{"patterns":[{"begin":"\\\\bfun\\\\b","beginCaptures":{"0":{"name":"keyword.control.lua"}},"end":"(?=[#\\\\s])","patterns":[{"match":"[](),:<>?\\\\[][\\\\t ]*","name":"keyword.operator.lua"},{"match":"([A-Z_a-z][-*.0-9A-Z_a-z]*)(?","name":"storage.type.generic.lua"},{"match":"\\\\basync\\\\b","name":"entity.name.tag.lua"},{"match":"[,:?`{|}][\\\\t ]*","name":"keyword.operator.lua"},{"begin":"(?=[\\"\'*.A-\\\\[_a-z])","end":"(?=[#),:?|}\\\\s])","patterns":[{"match":"([-\\\\]*,.0-9<>A-\\\\[_a-z]+)(?h7});var MT,h7,Ra=n1(()=>{MT=Object.freeze(JSON.parse('{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\'(?!\')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"\'\'","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}')),h7=[MT]});var cw={};u1(cw,{default:()=>To});var $T,To,Vo=n1(()=>{u4();O_();rt();st();Ia();Ve();d7();m7();ee();R6();No();Ra();$T=Object.freeze(JSON.parse('{"displayName":"Ruby","name":"ruby","patterns":[{"captures":{"1":{"name":"keyword.control.class.ruby"},"2":{"name":"entity.name.type.class.ruby"},"5":{"name":"punctuation.separator.namespace.ruby"},"7":{"name":"punctuation.separator.inheritance.ruby"},"8":{"name":"entity.other.inherited-class.ruby"},"11":{"name":"punctuation.separator.namespace.ruby"}},"match":"\\\\b(class)\\\\s+(([0-9A-Z_a-z]+)((::)[0-9A-Z_a-z]+)*)\\\\s*((<)\\\\s*(([0-9A-Z_a-z]+)((::)[0-9A-Z_a-z]+)*))?","name":"meta.class.ruby"},{"captures":{"1":{"name":"keyword.control.module.ruby"},"2":{"name":"entity.name.type.module.ruby"},"5":{"name":"punctuation.separator.namespace.ruby"}},"match":"\\\\b(module)\\\\s+(([0-9A-Z_a-z]+)((::)[0-9A-Z_a-z]+)*)","name":"meta.module.ruby"},{"captures":{"1":{"name":"keyword.control.class.ruby"},"2":{"name":"punctuation.separator.inheritance.ruby"}},"match":"\\\\b(class)\\\\s*(<<)\\\\s*","name":"meta.class.ruby"},{"match":"(?>)=)"},{"captures":{"1":{"name":"keyword.control.ruby"},"3":{"name":"variable.ruby"},"4":{"name":"keyword.operator.assignment.augmented.ruby"}},"match":"(?>)=)"},{"captures":{"1":{"name":"variable.ruby"}},"match":"^\\\\s*([_a-z][0-9A-Z_a-z]*)\\\\s*(?==[^=>])"},{"captures":{"1":{"name":"keyword.control.ruby"},"3":{"name":"variable.ruby"}},"match":"(?]"},{"captures":{"1":{"name":"punctuation.definition.constant.hashkey.ruby"}},"match":"(?>[A-Z_a-z]\\\\w*[!?]?)(:)(?!:)","name":"constant.language.symbol.hashkey.ruby"},{"captures":{"1":{"name":"punctuation.definition.constant.ruby"}},"match":"(?[A-Z_a-z]\\\\w*[!?]?)(?=\\\\s*=>)","name":"constant.language.symbol.hashkey.ruby"},{"match":"(?)\\\\(","beginCaptures":{"1":{"name":"support.function.kernel.ruby"}},"end":"\\\\)","patterns":[{"begin":"(?=[\\\\&*A-Z_a-z])","end":"(?=[),])","patterns":[{"include":"#method_parameters"}]},{"include":"#method_parameters"}]},{"begin":"(?=def\\\\b)(?<=^|\\\\s)(def)\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.control.def.ruby"},"2":{"name":"entity.name.function.ruby"},"3":{"name":"punctuation.definition.parameters.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.ruby"}},"name":"meta.function.method.with-arguments.ruby","patterns":[{"begin":"(?=[\\\\&*A-Z_a-z])","end":"(?=[),])","patterns":[{"include":"#method_parameters"}]},{"include":"#method_parameters"}]},{"begin":"(?=def\\\\b)(?<=^|\\\\s)(def)\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))[\\\\t ](?=[\\\\t ]*[^#;\\\\s])","beginCaptures":{"1":{"name":"keyword.control.def.ruby"},"2":{"name":"entity.name.function.ruby"}},"end":"(?=;)|(?<=[]!\\"\')?`}\\\\w])(?=\\\\s*#|\\\\s*$)","name":"meta.function.method.with-arguments.ruby","patterns":[{"begin":"(?=[\\\\&*A-Z_a-z])","end":"(?=[,;]|\\\\s*#|\\\\s*$)","patterns":[{"include":"#method_parameters"}]},{"include":"#method_parameters"}]},{"captures":{"1":{"name":"keyword.control.def.ruby"},"3":{"name":"entity.name.function.ruby"}},"match":"(?=def\\\\b)(?<=^|\\\\s)(def)\\\\b(\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?)))?","name":"meta.function.method.without-arguments.ruby"},{"match":"\\\\b(\\\\d(?>_?\\\\d)*(\\\\.(?![^\\\\s\\\\d])(?>_?\\\\d)*)?([Ee][-+]?\\\\d(?>_?\\\\d)*)?|0(?:[Xx]\\\\h(?>_?\\\\h)*|[Oo]?[0-7](?>_?[0-7])*|[Bb][01](?>_?[01])*|[Dd]\\\\d(?>_?\\\\d)*))\\\\b","name":"constant.numeric.ruby"},{"begin":":\'","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[\'\\\\\\\\]","name":"constant.character.escape.ruby"}]},{"begin":":\\"","beginCaptures":{"0":{"name":"punctuation.section.symbol.begin.ruby"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.section.symbol.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"match":"(?|=>|==|=~|!~|!=|;|$|if|else|elsif|then|do|end|unless|while|until|or|and))","captures":{"1":{"name":"string.regexp.interpolated.ruby"},"2":{"name":"punctuation.section.regexp.ruby"}},"contentName":"string.regexp.interpolated.ruby","end":"((/[eimnosux]*))","patterns":[{"include":"#regex_sub"}]},{"begin":"%r\\\\{","beginCaptures":{"0":{"name":"punctuation.section.regexp.begin.ruby"}},"end":"}[eimnosux]*","endCaptures":{"0":{"name":"punctuation.section.regexp.end.ruby"}},"name":"string.regexp.interpolated.ruby","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},{"begin":"%r\\\\[","beginCaptures":{"0":{"name":"punctuation.section.regexp.begin.ruby"}},"end":"][eimnosux]*","endCaptures":{"0":{"name":"punctuation.section.regexp.end.ruby"}},"name":"string.regexp.interpolated.ruby","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},{"begin":"%r\\\\(","beginCaptures":{"0":{"name":"punctuation.section.regexp.begin.ruby"}},"end":"\\\\)[eimnosux]*","endCaptures":{"0":{"name":"punctuation.section.regexp.end.ruby"}},"name":"string.regexp.interpolated.ruby","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},{"begin":"%r<","beginCaptures":{"0":{"name":"punctuation.section.regexp.begin.ruby"}},"end":">[eimnosux]*","endCaptures":{"0":{"name":"punctuation.section.regexp.end.ruby"}},"name":"string.regexp.interpolated.ruby","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},{"begin":"%r(\\\\W)","beginCaptures":{"0":{"name":"punctuation.section.regexp.begin.ruby"}},"end":"\\\\1[eimnosux]*","endCaptures":{"0":{"name":"punctuation.section.regexp.end.ruby"}},"name":"string.regexp.interpolated.ruby","patterns":[{"include":"#regex_sub"}]},{"begin":"%I\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},{"begin":"%I\\\\(","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%I<","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%I\\\\{","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},{"begin":"%I(\\\\W)","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"%i\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_brackets"}]},{"begin":"%i\\\\(","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_parens"}]},{"begin":"%i<","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_ltgt"}]},{"begin":"%i\\\\{","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.ruby"},{"include":"#nest_curly"}]},{"begin":"%i(\\\\W)","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\."}]},{"begin":"%W\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},{"begin":"%W\\\\(","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%W<","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%W\\\\{","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},{"begin":"%W(\\\\W)","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"%w\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_brackets"}]},{"begin":"%w\\\\(","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_parens"}]},{"begin":"%w<","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_ltgt"}]},{"begin":"%w\\\\{","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.ruby"},{"include":"#nest_curly"}]},{"begin":"%w(\\\\W)","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\."}]},{"begin":"%[Qx]?\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%[Qx]?\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},{"begin":"%[Qx]?\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},{"begin":"%[Qx]?<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%[Qx](\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"%([^=\\\\w\\\\s])","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"%q\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_parens"}]},{"begin":"%q<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_ltgt"}]},{"begin":"%q\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_brackets"}]},{"begin":"%q\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.ruby"},{"include":"#nest_curly"}]},{"begin":"%q(\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"match":"\\\\\\\\."}]},{"begin":"%s\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_parens"}]},{"begin":"%s<","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_ltgt"}]},{"begin":"%s\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.ruby"},{"include":"#nest_brackets"}]},{"begin":"%s\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.ruby"},{"include":"#nest_curly"}]},{"begin":"%s(\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.ruby"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.ruby"}},"name":"constant.language.symbol.ruby","patterns":[{"match":"\\\\\\\\."}]},{"captures":{"1":{"name":"punctuation.definition.constant.ruby"}},"match":"(?[$A-Z_a-z]\\\\w*(?>[!?]|=(?![=>]))?|===?|<=>|>[=>]?|<[<=]?|[%\\\\&/`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?|@@?[A-Z_a-z]\\\\w*)","name":"constant.language.symbol.ruby"},{"begin":"^=begin","captures":{"0":{"name":"punctuation.definition.comment.ruby"}},"end":"^=end","name":"comment.block.documentation.ruby"},{"include":"#yard"},{"begin":"(^[\\\\t ]+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.ruby"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.ruby"}},"end":"\\\\n","name":"comment.line.number-sign.ruby"}]},{"match":"(?<<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)HTML)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.html","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"text.html","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.html.basic"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)HTML)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)HAML)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)HAML)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.haml","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)HAML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"text.haml","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.haml"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)HAML)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)XML)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)XML)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.xml","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)XML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"text.xml","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.xml"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)XML)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)SQL)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.sql","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.sql","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.sql"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)SQL)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)G(?:RAPHQL|QL))\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)G(?:RAPHQL|QL))$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.graphql","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)G(?:RAPHQL|QL))\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.graphql","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.graphql"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)G(?:RAPHQL|QL))\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)CSS)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.css","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.css","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.css"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)CSS)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)CPP)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.cpp","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.cpp","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.cpp"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)CPP)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)C)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)C)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.c","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)C)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.c","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.c"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)C)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.js","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.js","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.js"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)JQUERY)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.js.jquery","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.js.jquery","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.js.jquery"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)JQUERY)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SH(?:|ELL))\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)SH(?:|ELL))$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.shell","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SH(?:|ELL))\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.shell","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.shell"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)SH(?:|ELL))\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)LUA)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)LUA)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.lua","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)LUA)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.lua","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.lua"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)LUA)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)RUBY)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)RUBY)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.ruby","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)RUBY)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.ruby"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)RUBY)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)YA?ML)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)YA?ML)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.yaml","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)YA?ML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"source.yaml","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.yaml"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)YA?ML)\\\\s*$)"}]},{"begin":"(?=(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SLIM)\\\\b\\\\1))","end":"^\\\\s*((?:[_\\\\w]+_|)SLIM)$\\\\n?","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"name":"meta.embedded.block.slim","patterns":[{"begin":"(?><<[-~]?([\\"\'`]?)((?:[_\\\\w]+_|)SLIM)\\\\b\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"text.slim","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.slim"},{"include":"#escaped_char"}],"while":"^(?!\\\\s*((?:[_\\\\w]+_|)SLIM)\\\\s*$)"}]},{"begin":"(?>=\\\\s*<<([\\"\'`]?)([A-Z_a-z]\\\\w*)\\\\1)","beginCaptures":{"0":{"name":"string.definition.begin.ruby"}},"contentName":"string.unquoted.heredoc.ruby","end":"^\\\\2$","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"(?>((<<[-~]?([\\"\'`]?)([A-Z_a-z]\\\\w*)\\\\3,\\\\s?)*<<[-~]?([\\"\'`]?)([A-Z_a-z]\\\\w*)\\\\5))(.*)","beginCaptures":{"1":{"name":"string.definition.begin.ruby"},"7":{"patterns":[{"include":"source.ruby"}]}},"contentName":"string.unquoted.heredoc.ruby","end":"^\\\\s*\\\\6$","endCaptures":{"0":{"name":"string.definition.end.ruby"}},"patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"(?<=\\\\{|\\\\{\\\\s+|[^$0-:@-Z_a-z]do|^do|[^$0-:@-Z_a-z]do\\\\s+|^do\\\\s+)(\\\\|)","captures":{"1":{"name":"punctuation.separator.variable.ruby"}},"end":"(?","name":"punctuation.separator.key-value"},{"match":"->","name":"support.function.kernel.ruby"},{"match":"<<=|%=|&{1,2}=|\\\\*=|\\\\*\\\\*=|\\\\+=|-=|\\\\^=|\\\\|{1,2}=|<<","name":"keyword.operator.assignment.augmented.ruby"},{"match":"<=>|<(?![<=])|>(?![<=>])|<=|>=|===?|=~|!=|!~|(?<=[\\\\t ])\\\\?","name":"keyword.operator.comparison.ruby"},{"match":"(?>","name":"keyword.operator.other.ruby"},{"match":";","name":"punctuation.separator.statement.ruby"},{"match":",","name":"punctuation.separator.object.ruby"},{"captures":{"1":{"name":"punctuation.separator.namespace.ruby"}},"match":"(::)\\\\s*(?=[A-Z])"},{"captures":{"1":{"name":"punctuation.separator.method.ruby"}},"match":"(\\\\.|::)\\\\s*(?![A-Z])"},{"match":":","name":"punctuation.separator.other.ruby"},{"match":"\\\\{","name":"punctuation.section.scope.begin.ruby"},{"match":"}","name":"punctuation.section.scope.end.ruby"},{"match":"\\\\[","name":"punctuation.section.array.begin.ruby"},{"match":"]","name":"punctuation.section.array.end.ruby"},{"match":"[()]","name":"punctuation.section.function.ruby"},{"begin":"(?<=[^.]\\\\.|::)(?=[A-Za-z][!0-9?A-Z_a-z]*[^!0-9?A-Z_a-z])","end":"(?<=[!0-9?A-Z_a-z])(?=[^!0-9?A-Z_a-z])","name":"meta.function-call.ruby","patterns":[{"match":"([A-Za-z][!0-9?A-Z_a-z]*)(?=[^!0-9?A-Z_a-z])","name":"entity.name.function.ruby"}]},{"begin":"([A-Za-z]\\\\w*[!?]?)(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.ruby"},"2":{"name":"punctuation.section.function.ruby"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.function.ruby"}},"name":"meta.function-call.ruby","patterns":[{"include":"$self"}]}],"repository":{"escaped_char":{"match":"\\\\\\\\(?:[0-7]{1,3}|x[A-Fa-f\\\\d]{1,2}|.)","name":"constant.character.escape.ruby"},"heredoc":{"begin":"^<<[-~]?[A-Z_a-z]\\\\w*","end":"$","patterns":[{"include":"$self"}]},"interpolated_ruby":{"patterns":[{"begin":"#\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.ruby"}},"contentName":"source.ruby","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.ruby"}},"name":"meta.embedded.line.ruby","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}]},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.instance.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#@@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.class.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#\\\\$)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.global.ruby"}]},"method_parameters":{"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"#brackets"},{"include":"#params"},{"include":"$self"}],"repository":{"braces":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.scope.begin.ruby"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.scope.end.ruby"}},"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"#brackets"},{"include":"$self"}]},"brackets":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"#brackets"},{"include":"$self"}]},"params":{"captures":{"1":{"name":"storage.type.variable.ruby"},"2":{"name":"constant.other.symbol.hashkey.parameter.function.ruby"},"3":{"name":"punctuation.definition.constant.ruby"},"4":{"name":"variable.parameter.function.ruby"}},"match":"\\\\G(&|\\\\*\\\\*?)?(?:([A-Z_a-z]\\\\w*[!?]?(:))|([A-Z_a-z]\\\\w*))"},"parens":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.function.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.function.end.ruby"}},"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"#brackets"},{"include":"$self"}]}}},"nest_brackets":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"]","patterns":[{"include":"#nest_brackets"}]},"nest_brackets_i":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"]","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},"nest_brackets_r":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"]","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},"nest_curly":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"}","patterns":[{"include":"#nest_curly"}]},"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]},"nest_curly_i":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"}","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},"nest_curly_r":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"}","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},"nest_ltgt":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":">","patterns":[{"include":"#nest_ltgt"}]},"nest_ltgt_i":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":">","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},"nest_ltgt_r":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":">","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},"nest_parens":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"\\\\)","patterns":[{"include":"#nest_parens"}]},"nest_parens_i":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"\\\\)","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},"nest_parens_r":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"\\\\)","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},"regex_sub":{"patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.ruby"},"3":{"name":"punctuation.definition.arbitrary-repetition.ruby"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.ruby"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.ruby"}},"end":"]","name":"string.regexp.character-class.ruby","patterns":[{"include":"#escaped_char"}]},{"begin":"\\\\(\\\\?#","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.ruby"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.comment.end.ruby"}},"name":"comment.line.number-sign.ruby","patterns":[{"include":"#escaped_char"}]},{"begin":"\\\\(","captures":{"0":{"name":"punctuation.definition.group.ruby"}},"end":"\\\\)","name":"string.regexp.group.ruby","patterns":[{"include":"#regex_sub"}]},{"begin":"(?<=^|\\\\s)(#)\\\\s(?=[-\\\\t !,.0-9?A-Za-z[^\\\\x00-\\\\x7F]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.ruby"}},"end":"$\\\\n?","endCaptures":{"0":{"name":"punctuation.definition.comment.ruby"}},"name":"comment.line.number-sign.ruby"}]},"yard":{"patterns":[{"include":"#yard_comment"},{"include":"#yard_param_types"},{"include":"#yard_option"},{"include":"#yard_tag"},{"include":"#yard_types"},{"include":"#yard_directive"},{"include":"#yard_see"},{"include":"#yard_macro_attribute"}]},"yard_comment":{"begin":"^(\\\\s*)(#)(\\\\s*)(@)(abstract|api|author|deprecated|example|macro|note|overload|since|todo|version)(?=\\\\s|$)","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_continuation":{"match":"^\\\\s*#","name":"punctuation.definition.comment.ruby"},"yard_directive":{"begin":"^(\\\\s*)(#)(\\\\s*)(@!)(endgroup|group|method|parse|scope|visibility)(\\\\s+((\\\\[).+(])))?(?=\\\\s)","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"7":{"name":"comment.line.type.yard.ruby"},"8":{"name":"comment.line.punctuation.yard.ruby"},"9":{"name":"comment.line.punctuation.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_macro_attribute":{"begin":"^(\\\\s*)(#)(\\\\s*)(@!)(attribute|macro)(\\\\s+((\\\\[).+(])))?(?=\\\\s)(\\\\s+([_a-z]\\\\w*:?))?","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"7":{"name":"comment.line.type.yard.ruby"},"8":{"name":"comment.line.punctuation.yard.ruby"},"9":{"name":"comment.line.punctuation.yard.ruby"},"11":{"name":"comment.line.parameter.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_option":{"begin":"^(\\\\s*)(#)(\\\\s*)(@)(option)(?=\\\\s)(?>\\\\s+([_a-z]\\\\w*:?))?(?>\\\\s+((\\\\[).+(])))?(?>\\\\s+((\\\\S*)))?(?>\\\\s+((\\\\().+(\\\\))))?","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"6":{"name":"comment.line.parameter.yard.ruby"},"7":{"name":"comment.line.type.yard.ruby"},"8":{"name":"comment.line.punctuation.yard.ruby"},"9":{"name":"comment.line.punctuation.yard.ruby"},"10":{"name":"comment.line.keyword.yard.ruby"},"11":{"name":"comment.line.hashkey.yard.ruby"},"12":{"name":"comment.line.defaultvalue.yard.ruby"},"13":{"name":"comment.line.punctuation.yard.ruby"},"14":{"name":"comment.line.punctuation.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_param_types":{"begin":"^(\\\\s*)(#)(\\\\s*)(@)(attr|attr_reader|attr_writer|yieldparam|param)(?=\\\\s)(?>\\\\s+(?>([_a-z]\\\\w*:?)|((\\\\[).+(]))))?(?>\\\\s+(?>((\\\\[).+(]))|([_a-z]\\\\w*:?)))?","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"6":{"name":"comment.line.parameter.yard.ruby"},"7":{"name":"comment.line.type.yard.ruby"},"8":{"name":"comment.line.punctuation.yard.ruby"},"9":{"name":"comment.line.punctuation.yard.ruby"},"10":{"name":"comment.line.type.yard.ruby"},"11":{"name":"comment.line.punctuation.yard.ruby"},"12":{"name":"comment.line.punctuation.yard.ruby"},"13":{"name":"comment.line.parameter.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_see":{"begin":"^(\\\\s*)(#)(\\\\s*)(@)(see)(?=\\\\s)(\\\\s+(.+?))?(?=\\\\s|$)","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"7":{"name":"comment.line.parameter.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]},"yard_tag":{"captures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"}},"match":"^(\\\\s*)(#)(\\\\s*)(@)(private)$","name":"comment.line.number-sign.ruby"},"yard_types":{"begin":"^(\\\\s*)(#)(\\\\s*)(@)(raise|return|yield(?:return)?)(?=\\\\s)(\\\\s+((\\\\[).+(])))?","beginCaptures":{"2":{"name":"punctuation.definition.comment.ruby"},"4":{"name":"comment.line.keyword.punctuation.yard.ruby"},"5":{"name":"comment.line.keyword.yard.ruby"},"7":{"name":"comment.line.type.yard.ruby"},"8":{"name":"comment.line.punctuation.yard.ruby"},"9":{"name":"comment.line.punctuation.yard.ruby"}},"contentName":"comment.line.string.yard.ruby","end":"^(?!\\\\s*#\\\\3\\\\s{2,}|\\\\s*#\\\\s*$)","name":"comment.line.number-sign.ruby","patterns":[{"include":"#yard"},{"include":"#yard_continuation"}]}},"scopeName":"source.ruby","embeddedLangs":["html","haml","xml","sql","graphql","css","cpp","c","javascript","shellscript","lua","yaml"],"aliases":["rb"]}')),To=[...I2,...G_,...y3,..._3,...u7,...G0,...X4,...U4,...w0,...Y3,...Ho,...h7,$T]});var ow={};u1(ow,{default:()=>ST});var LT,ST,lw=n1(()=>{LT=Object.freeze(JSON.parse('{"displayName":"Go","name":"go","patterns":[{"include":"#statements"}],"repository":{"after_control_variables":{"captures":{"1":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"variable.other.go"}]}},"match":"(?<=\\\\brange\\\\b|;|\\\\bif\\\\b|\\\\bfor\\\\b|[<>]|<=|>=|==|!=|\\\\w[-%*+/]|\\\\w[-%*+/]=|\\\\|\\\\||&&)\\\\s*((?![]\\\\[]+)[-\\\\]!%*+./:<=>\\\\[_[:alnum:]]+)\\\\s*(?=\\\\{)"},"brackets":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"include":"$self"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"$self"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.square.go"}},"patterns":[{"include":"$self"}]}]},"built_in_functions":{"patterns":[{"match":"\\\\b(append|cap|close|complex|copy|delete|imag|len|panic|print|println|real|recover|min|max|clear)\\\\b(?=\\\\()","name":"entity.name.function.support.builtin.go"},{"begin":"\\\\b(new)\\\\b(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.support.builtin.go"},"2":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#functions"},{"include":"#struct_variables_types"},{"include":"#support_functions"},{"include":"#type-declarations"},{"include":"#generic_types"},{"match":"\\\\w+","name":"entity.name.type.go"},{"include":"$self"}]},{"begin":"\\\\b(make)\\\\b(\\\\()((?:(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+(?:\\\\([^)]+\\\\))?)?[]*\\\\[]+{0,1}(?:(?!\\\\bmap\\\\b)[.\\\\w]+)?(\\\\[(?:\\\\S+(?:,\\\\s*\\\\S+)*)?])?,?)?","beginCaptures":{"1":{"name":"entity.name.function.support.builtin.go"},"2":{"name":"punctuation.definition.begin.bracket.round.go"},"3":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"$self"}]}]},"comments":{"patterns":[{"begin":"(/\\\\*)","beginCaptures":{"1":{"name":"punctuation.definition.comment.go"}},"end":"(\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.go"}},"name":"comment.block.go"},{"begin":"(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.go"}},"end":"\\\\n|$","name":"comment.line.double-slash.go"}]},"const_assignment":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.other.constant.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#generic_types"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=\\\\bconst\\\\b)\\\\s*\\\\b([.\\\\w]+(?:,\\\\s*[.\\\\w]+)*)\\\\s*((?:(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+(?:\\\\([^)]+\\\\))?)?(?![]*\\\\[]+{0,1}\\\\b(?:struct|func|map)\\\\b)(?:[]*.\\\\[\\\\w]+(?:,\\\\s*[]*.\\\\[\\\\w]+)*)?\\\\s*=?)?"},{"begin":"(?<=\\\\bconst\\\\b)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.other.constant.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#generic_types"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"^\\\\s*\\\\b([.\\\\w]+(?:,\\\\s*[.\\\\w]+)*)\\\\s*((?:(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+(?:\\\\([^)]+\\\\))?)?(?![]*\\\\[]+{0,1}\\\\b(?:struct|func|map)\\\\b)(?:[]*.\\\\[\\\\w]+(?:,\\\\s*[]*.\\\\[\\\\w]+)*)?\\\\s*=?)?"},{"include":"$self"}]}]},"delimiters":{"patterns":[{"match":",","name":"punctuation.other.comma.go"},{"match":"\\\\.(?!\\\\.\\\\.)","name":"punctuation.other.period.go"},{"match":":(?!=)","name":"punctuation.other.colon.go"}]},"double_parentheses_types":{"captures":{"1":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?\\\\[\\\\w]+\\\\s*(?:/[*/].*)?)$"},{"include":"$self"}]},"function_param_types":{"patterns":[{"include":"#struct_variables_types"},{"include":"#interface_variables_types"},{"include":"#type-declarations-without-brackets"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.parameter.go"}]}},"match":"((?:\\\\b\\\\w+,\\\\s*)+{0,1}\\\\b\\\\w+)\\\\s+(?=(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[]*\\\\[]+{0,1}\\\\b(?:struct|interface)\\\\b\\\\s*\\\\{)"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.parameter.go"}]}},"match":"(?:(?<=\\\\()|^\\\\s*)((?:\\\\b\\\\w+,\\\\s*)+(?:/[*/].*)?)$"},{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.parameter.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"((?:\\\\b\\\\w+,\\\\s*)+{0,1}\\\\b\\\\w+)\\\\s+((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}(?:[]*.\\\\[\\\\w]+{0,1}(?:\\\\bfunc\\\\b\\\\([^)]+{0,1}\\\\)(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}\\\\s*)+(?:[]*.\\\\[\\\\w]+|\\\\([^)]+{0,1}\\\\))?|(?:[]*\\\\[]+{0,1}[*.\\\\w]+(?:\\\\[[^]]+])?[*.\\\\w]+{0,1})+))"},{"begin":"([*.\\\\w]+)?(\\\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.square.go"}},"patterns":[{"include":"#generic_param_types"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"}]},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"([.\\\\w]+)"},{"include":"$self"}]},"functions":{"begin":"\\\\b(func)\\\\b(?=\\\\()","beginCaptures":{"1":{"name":"keyword.function.go"}},"end":"(?<=\\\\))(\\\\s*(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+)?(\\\\s*(?:[]*\\\\[]+{0,1}[*.\\\\w]+)?(?:\\\\[(?:[*.\\\\w]+{0,1}(?:\\\\[[^]]+{0,1}])?(?:,\\\\s+)?)+]|\\\\([^)]+{0,1}\\\\))?[*.\\\\w]+{0,1}\\\\s*(?=\\\\{)|\\\\s*(?:[]*\\\\[]+{0,1}(?!\\\\bfunc\\\\b)[*.\\\\w]+(?:\\\\[(?:[*.\\\\w]+{0,1}(?:\\\\[[^]]+{0,1}])?(?:,\\\\s+)?)+])?[*.\\\\w]+{0,1}|\\\\([^)]+{0,1}\\\\)))?","endCaptures":{"1":{"patterns":[{"include":"#type-declarations"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"patterns":[{"include":"#parameter-variable-types"}]},"functions_inline":{"captures":{"1":{"name":"keyword.function.go"},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"},{"include":"$self"}]},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"\\\\b(func)\\\\b(\\\\([^/]*?\\\\)\\\\s+\\\\([^/]*?\\\\))\\\\s+(?=\\\\{)"},"generic_param_types":{"patterns":[{"include":"#struct_variables_types"},{"include":"#interface_variables_types"},{"include":"#type-declarations-without-brackets"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.parameter.go"}]}},"match":"((?:\\\\b\\\\w+,\\\\s*)+{0,1}\\\\b\\\\w+)\\\\s+(?=(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[]*\\\\[]+{0,1}\\\\b(?:struct|interface)\\\\b\\\\s*\\\\{)"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.parameter.go"}]}},"match":"(?:(?<=\\\\()|^\\\\s*)((?:\\\\b\\\\w+,\\\\s*)+(?:/[*/].*)?)$"},{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.parameter.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"3":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"((?:\\\\b\\\\w+,\\\\s*)+{0,1}\\\\b\\\\w+)\\\\s+((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}(?:[]*.\\\\[\\\\w]+{0,1}(?:\\\\bfunc\\\\b\\\\([^)]+{0,1}\\\\)(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}\\\\s*)+(?:[*.\\\\w]+|\\\\([^)]+{0,1}\\\\))?|(?:(?:[*.~\\\\w]+|\\\\[(?:[*.\\\\w]+{0,1}(?:\\\\[[^]]+{0,1}])?(?:,\\\\s+)?)+])[*.\\\\w]+{0,1})+))"},{"begin":"([*.\\\\w]+)?(\\\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.square.go"}},"patterns":[{"include":"#generic_param_types"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"}]},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"\\\\b([.\\\\w]+)"},{"include":"$self"}]},"generic_types":{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"patterns":[{"include":"#parameter-variable-types"}]}},"match":"([*.\\\\w]+)(\\\\[[^]]+{0,1}])"},"group-functions":{"patterns":[{"include":"#function_declaration"},{"include":"#functions_inline"},{"include":"#functions"},{"include":"#built_in_functions"},{"include":"#support_functions"}]},"group-types":{"patterns":[{"include":"#other_struct_interface_expressions"},{"include":"#type_assertion_inline"},{"include":"#struct_variables_types"},{"include":"#interface_variables_types"},{"include":"#single_type"},{"include":"#multi_types"},{"include":"#struct_interface_declaration"},{"include":"#double_parentheses_types"},{"include":"#switch_types"},{"include":"#type-declarations"}]},"group-variables":{"patterns":[{"include":"#const_assignment"},{"include":"#var_assignment"},{"include":"#variable_assignment"},{"include":"#label_loop_variables"},{"include":"#slice_index_variables"},{"include":"#property_variables"},{"include":"#switch_variables"},{"include":"#other_variables"}]},"hover":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"patterns":[{"match":"\\\\binvalid\\\\b\\\\s+\\\\btype\\\\b","name":"invalid.field.go"},{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=^\\\\bfield\\\\b)\\\\s+([*.\\\\w]+)\\\\s+([\\\\s\\\\S]+)"},{"captures":{"1":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=^\\\\breturns\\\\b)\\\\s+([\\\\s\\\\S]+)"}]},"import":{"patterns":[{"begin":"\\\\b(import)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.import.go"}},"end":"(?!\\\\G)","patterns":[{"include":"#imports"}]}]},"imports":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.other.import.go"}]},"2":{"name":"string.quoted.double.go"},"3":{"name":"punctuation.definition.string.begin.go"},"4":{"name":"entity.name.import.go"},"5":{"name":"punctuation.definition.string.end.go"}},"match":"(\\\\s*[.\\\\w]+)?\\\\s*((\\")([^\\"]*)(\\"))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.imports.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.imports.end.bracket.round.go"}},"patterns":[{"include":"#comments"},{"include":"#imports"}]},{"include":"$self"}]},"interface_variables_types":{"begin":"\\\\b(interface)\\\\b\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"keyword.interface.go"},"2":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"include":"#interface_variables_types_field"},{"include":"$self"}]},"interface_variables_types_field":{"patterns":[{"include":"#support_functions"},{"include":"#type-declarations-without-brackets"},{"begin":"([*.\\\\w]+)?(\\\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.square.go"}},"patterns":[{"include":"#generic_param_types"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"}]},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"([.\\\\w]+)"}]},"keywords":{"patterns":[{"match":"\\\\b(break|case|continue|default|defer|else|fallthrough|for|go|goto|if|range|return|select|switch)\\\\b","name":"keyword.control.go"},{"match":"\\\\bchan\\\\b","name":"keyword.channel.go"},{"match":"\\\\bconst\\\\b","name":"keyword.const.go"},{"match":"\\\\bvar\\\\b","name":"keyword.var.go"},{"match":"\\\\bfunc\\\\b","name":"keyword.function.go"},{"match":"\\\\binterface\\\\b","name":"keyword.interface.go"},{"match":"\\\\bmap\\\\b","name":"keyword.map.go"},{"match":"\\\\bstruct\\\\b","name":"keyword.struct.go"},{"match":"\\\\bimport\\\\b","name":"keyword.control.import.go"},{"match":"\\\\btype\\\\b","name":"keyword.type.go"}]},"label_loop_variables":{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.label.go"}]}},"match":"^(\\\\s*\\\\w+:\\\\s*|\\\\s*\\\\b(?:break|goto|continue)\\\\b\\\\s+\\\\w+(?:\\\\s*/[*/]\\\\s*.*)?)$"},"language_constants":{"captures":{"1":{"name":"constant.language.boolean.go"},"2":{"name":"constant.language.null.go"},"3":{"name":"constant.language.iota.go"}},"match":"\\\\b(?:(true|false)|(nil)|(iota))\\\\b"},"map_types":{"begin":"\\\\b(map)\\\\b(\\\\[)","beginCaptures":{"1":{"name":"keyword.map.go"},"2":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"(])((?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}(?![]*\\\\[]+{0,1}\\\\b(?:func|struct|map)\\\\b)[]*\\\\[]+{0,1}[.\\\\w]+(?:\\\\[(?:[]*.\\\\[{}\\\\w]+(?:,\\\\s*[]*.\\\\[{}\\\\w]+)*)?])?)?","endCaptures":{"1":{"name":"punctuation.definition.end.bracket.square.go"},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"include":"#functions"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"multi_types":{"begin":"\\\\b(type)\\\\b\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.type.go"},"2":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#struct_variables_types"},{"include":"#interface_variables_types"},{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"numeric_literals":{"captures":{"0":{"patterns":[{"begin":"(?=.)","end":"\\\\n|$","patterns":[{"captures":{"1":{"name":"constant.numeric.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"2":{"name":"punctuation.separator.constant.numeric.go"},"3":{"name":"constant.numeric.decimal.point.go"},"4":{"name":"constant.numeric.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"5":{"name":"punctuation.separator.constant.numeric.go"},"6":{"name":"keyword.other.unit.exponent.decimal.go"},"7":{"name":"keyword.operator.plus.exponent.decimal.go"},"8":{"name":"keyword.operator.minus.exponent.decimal.go"},"9":{"name":"constant.numeric.exponent.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"10":{"name":"keyword.other.unit.imaginary.go"},"11":{"name":"constant.numeric.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"12":{"name":"punctuation.separator.constant.numeric.go"},"13":{"name":"keyword.other.unit.exponent.decimal.go"},"14":{"name":"keyword.operator.plus.exponent.decimal.go"},"15":{"name":"keyword.operator.minus.exponent.decimal.go"},"16":{"name":"constant.numeric.exponent.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"17":{"name":"keyword.other.unit.imaginary.go"},"18":{"name":"constant.numeric.decimal.point.go"},"19":{"name":"constant.numeric.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"20":{"name":"punctuation.separator.constant.numeric.go"},"21":{"name":"keyword.other.unit.exponent.decimal.go"},"22":{"name":"keyword.operator.plus.exponent.decimal.go"},"23":{"name":"keyword.operator.minus.exponent.decimal.go"},"24":{"name":"constant.numeric.exponent.decimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"25":{"name":"keyword.other.unit.imaginary.go"},"26":{"name":"keyword.other.unit.hexadecimal.go"},"27":{"name":"constant.numeric.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"28":{"name":"punctuation.separator.constant.numeric.go"},"29":{"name":"constant.numeric.hexadecimal.go"},"30":{"name":"constant.numeric.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"31":{"name":"punctuation.separator.constant.numeric.go"},"32":{"name":"keyword.other.unit.exponent.hexadecimal.go"},"33":{"name":"keyword.operator.plus.exponent.hexadecimal.go"},"34":{"name":"keyword.operator.minus.exponent.hexadecimal.go"},"35":{"name":"constant.numeric.exponent.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"36":{"name":"keyword.other.unit.imaginary.go"},"37":{"name":"keyword.other.unit.hexadecimal.go"},"38":{"name":"constant.numeric.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"39":{"name":"punctuation.separator.constant.numeric.go"},"40":{"name":"keyword.other.unit.exponent.hexadecimal.go"},"41":{"name":"keyword.operator.plus.exponent.hexadecimal.go"},"42":{"name":"keyword.operator.minus.exponent.hexadecimal.go"},"43":{"name":"constant.numeric.exponent.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"44":{"name":"keyword.other.unit.imaginary.go"},"45":{"name":"keyword.other.unit.hexadecimal.go"},"46":{"name":"constant.numeric.hexadecimal.go"},"47":{"name":"constant.numeric.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"48":{"name":"punctuation.separator.constant.numeric.go"},"49":{"name":"keyword.other.unit.exponent.hexadecimal.go"},"50":{"name":"keyword.operator.plus.exponent.hexadecimal.go"},"51":{"name":"keyword.operator.minus.exponent.hexadecimal.go"},"52":{"name":"constant.numeric.exponent.hexadecimal.go","patterns":[{"match":"(?<=\\\\h)_(?=\\\\h)","name":"punctuation.separator.constant.numeric.go"}]},"53":{"name":"keyword.other.unit.imaginary.go"}},"match":"\\\\G(?:(?:(?:(?:(?:(?=[.0-9])(?!0[BOXbox])([0-9](?:[0-9]|((?<=\\\\h)_(?=\\\\h)))*)((?<=[0-9])\\\\.|\\\\.(?=[0-9]))([0-9](?:[0-9]|((?<=\\\\h)_(?=\\\\h)))*)?(?:(?=|<(?!<)|>(?!>))","name":"keyword.operator.comparison.go"},{"match":"(&&|\\\\|\\\\||!)","name":"keyword.operator.logical.go"},{"match":"((?:|[-%*+/:^|]|<<|>>|&\\\\^?)=)","name":"keyword.operator.assignment.go"},{"match":"([-%*+/])","name":"keyword.operator.arithmetic.go"},{"match":"(&(?!\\\\^)|[\\\\^|]|&\\\\^|<<|>>|~)","name":"keyword.operator.arithmetic.bitwise.go"},{"match":"\\\\.\\\\.\\\\.","name":"keyword.operator.ellipsis.go"}]},"other_struct_interface_expressions":{"patterns":[{"include":"#after_control_variables"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"\\\\b(?!(?:struct|interface)\\\\b)([.\\\\w]+)(?\\\\[(?:[^]\\\\[]|\\\\g)*])?(?=\\\\{)"}]},"other_variables":{"match":"\\\\w+","name":"variable.other.go"},"package_name":{"patterns":[{"begin":"\\\\b(package)\\\\s+","beginCaptures":{"1":{"name":"keyword.package.go"}},"end":"(?!\\\\G)","patterns":[{"match":"\\\\d\\\\w*","name":"invalid.illegal.identifier.go"},{"match":"\\\\w+","name":"entity.name.type.package.go"}]}]},"parameter-variable-types":{"patterns":[{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"begin":"([*.\\\\w]+)?(\\\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"2":{"name":"punctuation.definition.begin.bracket.square.go"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.square.go"}},"patterns":[{"include":"#generic_param_types"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"}]}]},"property_variables":{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]}},"match":"\\\\b([.\\\\w]+:(?!=))"},"raw_string_literals":{"begin":"`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.go"}},"end":"`","endCaptures":{"0":{"name":"punctuation.definition.string.end.go"}},"name":"string.quoted.raw.go","patterns":[{"include":"#string_placeholder"}]},"runes":{"patterns":[{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.go"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.string.end.go"}},"name":"string.quoted.rune.go","patterns":[{"match":"\\\\G(\\\\\\\\([0-7]{3}|[\\"\'\\\\\\\\abfnrtv]|x\\\\h{2}|u\\\\h{4}|U\\\\h{8})|.)(?=\')","name":"constant.other.rune.go"},{"match":"[^\']+","name":"invalid.illegal.unknown-rune.go"}]}]},"single_type":{"patterns":[{"captures":{"1":{"name":"keyword.type.go"},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"3":{"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"},{"include":"$self"}]},{"include":"#type-declarations"},{"include":"#generic_types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"^\\\\s*\\\\b(type)\\\\b\\\\s*([*.\\\\w]+)\\\\s+(?!(?:=\\\\s*)?[]*\\\\[]+{0,1}\\\\b(?:struct|interface)\\\\b)([\\\\s\\\\S]+)"},{"begin":"(?:^|\\\\s+)\\\\b(type)\\\\b\\\\s*([*.\\\\w]+)(?=\\\\[)","beginCaptures":{"1":{"name":"keyword.type.go"},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"end":"(?<=])(\\\\s+(?:=\\\\s*)?(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}(?![]*\\\\[]+{0,1}\\\\b(?:struct|interface|func)\\\\b)[-\\\\]*.\\\\[\\\\w]+(?:,\\\\s*[]*.\\\\[\\\\w]+)*)?","endCaptures":{"1":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"patterns":[{"include":"#struct_variables_types"},{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}]},"slice_index_variables":{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.go"}]}},"match":"(?<=\\\\w\\\\[)((?:\\\\b[-%\\\\&*+./<>|\\\\w]+:|:\\\\b[-%\\\\&*+./<>|\\\\w]+)(?:\\\\b[-%\\\\&*+./<>|\\\\w]+)?(?::\\\\b[-%\\\\&*+./<>|\\\\w]+)?)(?=])"},"statements":{"patterns":[{"include":"#package_name"},{"include":"#import"},{"include":"#syntax_errors"},{"include":"#group-functions"},{"include":"#group-types"},{"include":"#group-variables"},{"include":"#hover"}]},"storage_types":{"patterns":[{"match":"\\\\bbool\\\\b","name":"storage.type.boolean.go"},{"match":"\\\\bbyte\\\\b","name":"storage.type.byte.go"},{"match":"\\\\berror\\\\b","name":"storage.type.error.go"},{"match":"\\\\b(complex(64|128)|float(32|64)|u?int(8|16|32|64)?)\\\\b","name":"storage.type.numeric.go"},{"match":"\\\\brune\\\\b","name":"storage.type.rune.go"},{"match":"\\\\bstring\\\\b","name":"storage.type.string.go"},{"match":"\\\\buintptr\\\\b","name":"storage.type.uintptr.go"},{"match":"\\\\bany\\\\b","name":"entity.name.type.any.go"},{"match":"\\\\bcomparable\\\\b","name":"entity.name.type.comparable.go"}]},"string_escaped_char":{"patterns":[{"match":"\\\\\\\\([0-7]{3}|[\\"\'\\\\\\\\abfnrtv]|x\\\\h{2}|u\\\\h{4}|U\\\\h{8})","name":"constant.character.escape.go"},{"match":"\\\\\\\\[^\\"\'0-7Uabfnrtuvx]","name":"invalid.illegal.unknown-escape.go"}]},"string_literals":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.go"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.go"}},"name":"string.quoted.double.go","patterns":[{"include":"#string_escaped_char"},{"include":"#string_placeholder"}]}]},"string_placeholder":{"patterns":[{"match":"%(\\\\[\\\\d+])?([- #+0]{0,2}((\\\\d+|\\\\*)?(\\\\.?(\\\\d+|\\\\*|(\\\\[\\\\d+])\\\\*?)?(\\\\[\\\\d+])?)?))?[%EFGTUXb-gopqstvwx]","name":"constant.other.placeholder.go"}]},"struct_interface_declaration":{"captures":{"1":{"name":"keyword.type.go"},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"^\\\\s*\\\\b(type)\\\\b\\\\s*([.\\\\w]+)"},"struct_variable_types_fields_multi":{"patterns":[{"begin":"\\\\b(\\\\w+(?:,\\\\s*\\\\b\\\\w+)*(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}\\\\s*[]*\\\\[]+{0,1})\\\\b(struct)\\\\b\\\\s*(\\\\{)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"name":"keyword.struct.go"},"3":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"include":"#struct_variables_types_fields"},{"include":"$self"}]},{"begin":"\\\\b(\\\\w+(?:,\\\\s*\\\\b\\\\w+)*(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}\\\\s*[]*\\\\[]+{0,1})\\\\b(interface)\\\\b\\\\s*(\\\\{)","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"name":"keyword.interface.go"},"3":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"include":"#interface_variables_types_field"},{"include":"$self"}]},{"begin":"\\\\b(\\\\w+(?:,\\\\s*\\\\b\\\\w+)*(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}\\\\s*[]*\\\\[]+{0,1})\\\\b(func)\\\\b\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"name":"keyword.function.go"},"3":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"include":"#function_param_types"},{"include":"$self"}]},{"include":"#parameter-variable-types"}]},"struct_variables_types":{"begin":"\\\\b(struct)\\\\b\\\\s*(\\\\{)","beginCaptures":{"1":{"name":"keyword.struct.go"},"2":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"include":"#struct_variables_types_fields"},{"include":"$self"}]},"struct_variables_types_fields":{"patterns":[{"include":"#struct_variable_types_fields_multi"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=\\\\{)\\\\s*((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[]*.\\\\[\\\\w]+)\\\\s*(?=})"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=\\\\{)\\\\s*((?:\\\\w+,\\\\s*)+{0,1}\\\\w+\\\\s+)((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[]*.\\\\[\\\\w]+)\\\\s*(?=})"},{"captures":{"1":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"((?:\\\\w+,\\\\s*)+{0,1}\\\\w+\\\\s+)?((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[^\\"/`\\\\s]+;?)"}]}},"match":"(?<=\\\\{)((?:\\\\s*(?:(?:\\\\w+,\\\\s*)+{0,1}\\\\w+\\\\s+)?(?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[^\\"/`\\\\s]+;?)+)\\\\s*(?=})"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[*.\\\\w]+\\\\s*)(?:(?=[\\"/`])|$)"},{"captures":{"1":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.property.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#parameter-variable-types"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"\\\\b(\\\\w+(?:\\\\s*,\\\\s*\\\\b\\\\w+)*)\\\\s*([^\\"/`]+)"}]},"support_functions":{"captures":{"1":{"name":"entity.name.function.support.go"},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\d\\\\w*","name":"invalid.illegal.identifier.go"},{"match":"\\\\w+","name":"entity.name.function.support.go"}]},"3":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?:((?<=\\\\.)\\\\b\\\\w+)|\\\\b(\\\\w+))(?\\\\[(?:[^]\\\\[]|\\\\g)*])?(?=\\\\()"},"switch_types":{"begin":"(?<=\\\\bswitch\\\\b)\\\\s*(\\\\w+\\\\s*:=)?\\\\s*([-\\\\]%\\\\&(-+./<>\\\\[|\\\\w]+)(\\\\.\\\\(\\\\btype\\\\b\\\\)\\\\s*)(\\\\{)","beginCaptures":{"1":{"patterns":[{"include":"#operators"},{"match":"\\\\w+","name":"variable.other.assignment.go"}]},"2":{"patterns":[{"include":"#support_functions"},{"include":"#type-declarations"},{"match":"\\\\w+","name":"variable.other.go"}]},"3":{"patterns":[{"include":"#delimiters"},{"include":"#brackets"},{"match":"\\\\btype\\\\b","name":"keyword.type.go"}]},"4":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"captures":{"1":{"name":"keyword.control.go"},"2":{"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},"3":{"name":"punctuation.other.colon.go"},"4":{"patterns":[{"include":"#comments"}]}},"match":"^\\\\s*\\\\b(case)\\\\b\\\\s+([!*,.<=>\\\\w\\\\s]+)(:)(\\\\s*/[*/]\\\\s*.*)?$"},{"begin":"\\\\bcase\\\\b","beginCaptures":{"0":{"name":"keyword.control.go"}},"end":":","endCaptures":{"0":{"name":"punctuation.other.colon.go"}},"patterns":[{"include":"#type-declarations"},{"match":"\\\\w+","name":"entity.name.type.go"}]},{"include":"$self"}]},"switch_variables":{"patterns":[{"captures":{"1":{"name":"keyword.control.go"},"2":{"patterns":[{"include":"#type-declarations"},{"include":"#support_functions"},{"include":"#variable_assignment"},{"match":"\\\\w+","name":"variable.other.go"}]}},"match":"^\\\\s*\\\\b(case)\\\\b\\\\s+([\\\\s\\\\S]+:\\\\s*(?:/[*/].*)?)$"},{"begin":"(?<=\\\\bswitch\\\\b)\\\\s*((?:[.\\\\w]+(?:\\\\s*[-!%\\\\&+,/:<=>|]+\\\\s*[.\\\\w]+)*\\\\s*[-!%\\\\&+,/:<=>|]+)?\\\\s*[-\\\\]%\\\\&(-+./<>\\\\[|\\\\w]+{0,1}\\\\s*(?:;\\\\s*[-\\\\]%\\\\&(-+./<>\\\\[|\\\\w]+\\\\s*)?)(\\\\{)","beginCaptures":{"1":{"patterns":[{"include":"#support_functions"},{"include":"#type-declarations"},{"include":"#variable_assignment"},{"match":"\\\\w+","name":"variable.other.go"}]},"2":{"name":"punctuation.definition.begin.bracket.curly.go"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.go"}},"patterns":[{"begin":"\\\\bcase\\\\b","beginCaptures":{"0":{"name":"keyword.control.go"}},"end":":","endCaptures":{"0":{"name":"punctuation.other.colon.go"}},"patterns":[{"include":"#support_functions"},{"include":"#type-declarations"},{"include":"#variable_assignment"},{"match":"\\\\w+","name":"variable.other.go"}]},{"include":"$self"}]}]},"syntax_errors":{"patterns":[{"captures":{"1":{"name":"invalid.illegal.slice.go"}},"match":"\\\\[](\\\\s+)"},{"match":"\\\\b0[0-7]*[89]\\\\d*\\\\b","name":"invalid.illegal.numeric.go"}]},"terminators":{"match":";","name":"punctuation.terminator.go"},"type-declarations":{"patterns":[{"include":"#language_constants"},{"include":"#comments"},{"include":"#map_types"},{"include":"#brackets"},{"include":"#delimiters"},{"include":"#keywords"},{"include":"#operators"},{"include":"#runes"},{"include":"#storage_types"},{"include":"#raw_string_literals"},{"include":"#string_literals"},{"include":"#numeric_literals"},{"include":"#terminators"}]},"type-declarations-without-brackets":{"patterns":[{"include":"#language_constants"},{"include":"#comments"},{"include":"#map_types"},{"include":"#delimiters"},{"include":"#keywords"},{"include":"#operators"},{"include":"#runes"},{"include":"#storage_types"},{"include":"#raw_string_literals"},{"include":"#string_literals"},{"include":"#numeric_literals"},{"include":"#terminators"}]},"type_assertion_inline":{"captures":{"1":{"name":"keyword.type.go"},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\{","name":"punctuation.definition.begin.bracket.curly.go"},{"match":"}","name":"punctuation.definition.end.bracket.curly.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=\\\\.\\\\()(?:\\\\b(type)\\\\b|((?:\\\\s*[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+{0,1}[]*\\\\[]+{0,1}[.\\\\w]+(?:\\\\[(?:[]*.\\\\[{}\\\\w]+(?:,\\\\s*[]*.\\\\[{}\\\\w]+)*)?])?))(?=\\\\))"},"var_assignment":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.other.assignment.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#generic_types"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"(?<=\\\\bvar\\\\b)\\\\s*\\\\b([.\\\\w]+(?:,\\\\s*[.\\\\w]+)*)\\\\s*((?:(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+(?:\\\\([^)]+\\\\))?)?(?![]*\\\\[]+{0,1}\\\\b(?:struct|func|map)\\\\b)(?:[]*.\\\\[\\\\w]+(?:,\\\\s*[]*.\\\\[\\\\w]+)*)?\\\\s*=?)?"},{"begin":"(?<=\\\\bvar\\\\b)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.begin.bracket.round.go"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.go"}},"patterns":[{"captures":{"1":{"patterns":[{"include":"#delimiters"},{"match":"\\\\w+","name":"variable.other.assignment.go"}]},"2":{"patterns":[{"include":"#type-declarations-without-brackets"},{"include":"#generic_types"},{"match":"\\\\(","name":"punctuation.definition.begin.bracket.round.go"},{"match":"\\\\)","name":"punctuation.definition.end.bracket.round.go"},{"match":"\\\\[","name":"punctuation.definition.begin.bracket.square.go"},{"match":"]","name":"punctuation.definition.end.bracket.square.go"},{"match":"\\\\w+","name":"entity.name.type.go"}]}},"match":"^\\\\s*\\\\b([.\\\\w]+(?:,\\\\s*[.\\\\w]+)*)\\\\s*((?:(?:[]*\\\\[]+{0,1}(?:<-\\\\s*)?\\\\bchan\\\\b(?:\\\\s*<-)?\\\\s*)+(?:\\\\([^)]+\\\\))?)?(?![]*\\\\[]+{0,1}\\\\b(?:struct|func|map)\\\\b)(?:[]*.\\\\[\\\\w]+(?:,\\\\s*[]*.\\\\[\\\\w]+)*)?\\\\s*=?)?"},{"include":"$self"}]}]},"variable_assignment":{"patterns":[{"captures":{"0":{"patterns":[{"include":"#delimiters"},{"match":"\\\\d\\\\w*","name":"invalid.illegal.identifier.go"},{"match":"\\\\w+","name":"variable.other.assignment.go"}]}},"match":"\\\\b\\\\w+(?:,\\\\s*\\\\w+)*(?=\\\\s*:=)"},{"captures":{"0":{"patterns":[{"include":"#delimiters"},{"include":"#operators"},{"match":"\\\\d\\\\w*","name":"invalid.illegal.identifier.go"},{"match":"\\\\w+","name":"variable.other.assignment.go"}]}},"match":"\\\\b[*.\\\\w]+(?:,\\\\s*[*.\\\\w]+)*(?=\\\\s*=(?!=))"}]}},"scopeName":"source.go"}')),ST=[LT]});var pw={};u1(pw,{default:()=>ET});var ZT,ET,uw=n1(()=>{ZT=Object.freeze(JSON.parse('{"displayName":"Rust","name":"rust","patterns":[{"begin":"(<)(\\\\[)","beginCaptures":{"1":{"name":"punctuation.brackets.angle.rust"},"2":{"name":"punctuation.brackets.square.rust"}},"end":">","endCaptures":{"0":{"name":"punctuation.brackets.angle.rust"}},"patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#gtypes"},{"include":"#lvariables"},{"include":"#lifetimes"},{"include":"#punctuation"},{"include":"#types"}]},{"captures":{"1":{"name":"keyword.operator.macro.dollar.rust"},"3":{"name":"keyword.other.crate.rust"},"4":{"name":"entity.name.type.metavariable.rust"},"6":{"name":"keyword.operator.key-value.rust"},"7":{"name":"variable.other.metavariable.specifier.rust"}},"match":"(\\\\$)((crate)|([A-Z]\\\\w*))(\\\\s*(:)\\\\s*(block|expr(?:_2021)?|ident|item|lifetime|literal|meta|pat(?:_param)?|path|stmt|tt|ty|vis)\\\\b)?","name":"meta.macro.metavariable.type.rust","patterns":[{"include":"#keywords"}]},{"captures":{"1":{"name":"keyword.operator.macro.dollar.rust"},"2":{"name":"variable.other.metavariable.name.rust"},"4":{"name":"keyword.operator.key-value.rust"},"5":{"name":"variable.other.metavariable.specifier.rust"}},"match":"(\\\\$)([a-z]\\\\w*)(\\\\s*(:)\\\\s*(block|expr(?:_2021)?|ident|item|lifetime|literal|meta|pat(?:_param)?|path|stmt|tt|ty|vis)\\\\b)?","name":"meta.macro.metavariable.rust","patterns":[{"include":"#keywords"}]},{"captures":{"1":{"name":"entity.name.function.macro.rules.rust"},"3":{"name":"entity.name.function.macro.rust"},"4":{"name":"entity.name.type.macro.rust"},"5":{"name":"punctuation.brackets.curly.rust"}},"match":"\\\\b(macro_rules!)\\\\s+(([0-9_a-z]+)|([A-Z][0-9_a-z]*))\\\\s+(\\\\{)","name":"meta.macro.rules.rust"},{"captures":{"1":{"name":"storage.type.rust"},"2":{"name":"entity.name.module.rust"}},"match":"(mod)\\\\s+((?:r#(?!crate|[Ss]elf|super))?[a-z][0-9A-Z_a-z]*)"},{"begin":"\\\\b(extern)\\\\s+(crate)","beginCaptures":{"1":{"name":"storage.type.rust"},"2":{"name":"keyword.other.crate.rust"}},"end":";","endCaptures":{"0":{"name":"punctuation.semi.rust"}},"name":"meta.import.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#keywords"},{"include":"#punctuation"}]},{"begin":"\\\\b(use)\\\\s","beginCaptures":{"1":{"name":"keyword.other.rust"}},"end":";","endCaptures":{"0":{"name":"punctuation.semi.rust"}},"name":"meta.use.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#keywords"},{"include":"#namespaces"},{"include":"#punctuation"},{"include":"#types"},{"include":"#lvariables"}]},{"include":"#block-comments"},{"include":"#comments"},{"include":"#attributes"},{"include":"#lvariables"},{"include":"#constants"},{"include":"#gtypes"},{"include":"#functions"},{"include":"#types"},{"include":"#keywords"},{"include":"#lifetimes"},{"include":"#macros"},{"include":"#namespaces"},{"include":"#punctuation"},{"include":"#strings"},{"include":"#variables"}],"repository":{"attributes":{"begin":"(#)(!?)(\\\\[)","beginCaptures":{"1":{"name":"punctuation.definition.attribute.rust"},"3":{"name":"punctuation.brackets.attribute.rust"}},"end":"]","endCaptures":{"0":{"name":"punctuation.brackets.attribute.rust"}},"name":"meta.attribute.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#keywords"},{"include":"#lifetimes"},{"include":"#punctuation"},{"include":"#strings"},{"include":"#gtypes"},{"include":"#types"}]},"block-comments":{"patterns":[{"match":"/\\\\*\\\\*/","name":"comment.block.rust"},{"begin":"/\\\\*\\\\*","end":"\\\\*/","name":"comment.block.documentation.rust","patterns":[{"include":"#block-comments"}]},{"begin":"/\\\\*(?!\\\\*)","end":"\\\\*/","name":"comment.block.rust","patterns":[{"include":"#block-comments"}]}]},"comments":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.rust"}},"match":"(///).*$","name":"comment.line.documentation.rust"},{"captures":{"1":{"name":"punctuation.definition.comment.rust"}},"match":"(//).*$","name":"comment.line.double-slash.rust"}]},"constants":{"patterns":[{"match":"\\\\b[A-Z]{2}[0-9A-Z_]*\\\\b","name":"constant.other.caps.rust"},{"captures":{"1":{"name":"storage.type.rust"},"2":{"name":"constant.other.caps.rust"}},"match":"\\\\b(const)\\\\s+([A-Z][0-9A-Z_a-z]*)\\\\b"},{"captures":{"1":{"name":"punctuation.separator.dot.decimal.rust"},"2":{"name":"keyword.operator.exponent.rust"},"3":{"name":"keyword.operator.exponent.sign.rust"},"4":{"name":"constant.numeric.decimal.exponent.mantissa.rust"},"5":{"name":"entity.name.type.numeric.rust"}},"match":"\\\\b\\\\d[_\\\\d]*(\\\\.?)[_\\\\d]*(?:([Ee])([-+]?)([_\\\\d]+))?(f32|f64|i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b","name":"constant.numeric.decimal.rust"},{"captures":{"1":{"name":"entity.name.type.numeric.rust"}},"match":"\\\\b0x[A-F_a-f\\\\d]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b","name":"constant.numeric.hex.rust"},{"captures":{"1":{"name":"entity.name.type.numeric.rust"}},"match":"\\\\b0o[0-7_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b","name":"constant.numeric.oct.rust"},{"captures":{"1":{"name":"entity.name.type.numeric.rust"}},"match":"\\\\b0b[01_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\\\b","name":"constant.numeric.bin.rust"},{"match":"\\\\b(true|false)\\\\b","name":"constant.language.bool.rust"}]},"escapes":{"captures":{"1":{"name":"constant.character.escape.backslash.rust"},"2":{"name":"constant.character.escape.bit.rust"},"3":{"name":"constant.character.escape.unicode.rust"},"4":{"name":"constant.character.escape.unicode.punctuation.rust"},"5":{"name":"constant.character.escape.unicode.punctuation.rust"}},"match":"(\\\\\\\\)(?:(x[0-7][A-Fa-f\\\\d])|(u(\\\\{)[A-Fa-f\\\\d]{4,6}(}))|.)","name":"constant.character.escape.rust"},"functions":{"patterns":[{"captures":{"1":{"name":"storage.modifier.visibility.rust"}},"match":"\\\\b(pub)\\\\b"},{"captures":{"1":{"name":"storage.modifier.visibility.rust"},"2":{"name":"punctuation.brackets.round.rust"}},"match":"\\\\b(pub)(\\\\()"},{"begin":"\\\\b(fn)\\\\s+((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)((\\\\()|(<))","beginCaptures":{"1":{"name":"keyword.other.fn.rust"},"2":{"name":"entity.name.function.rust"},"4":{"name":"punctuation.brackets.round.rust"},"5":{"name":"punctuation.brackets.angle.rust"}},"end":"(\\\\{)|(;)","endCaptures":{"1":{"name":"punctuation.brackets.curly.rust"},"2":{"name":"punctuation.semi.rust"}},"name":"meta.function.definition.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#keywords"},{"include":"#lvariables"},{"include":"#constants"},{"include":"#gtypes"},{"include":"#functions"},{"include":"#lifetimes"},{"include":"#macros"},{"include":"#namespaces"},{"include":"#punctuation"},{"include":"#strings"},{"include":"#types"},{"include":"#variables"}]},{"begin":"((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.rust"},"2":{"name":"punctuation.brackets.round.rust"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.brackets.round.rust"}},"name":"meta.function.call.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#attributes"},{"include":"#keywords"},{"include":"#lvariables"},{"include":"#constants"},{"include":"#gtypes"},{"include":"#functions"},{"include":"#lifetimes"},{"include":"#macros"},{"include":"#namespaces"},{"include":"#punctuation"},{"include":"#strings"},{"include":"#types"},{"include":"#variables"}]},{"begin":"((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)(?=::<.*>\\\\()","beginCaptures":{"1":{"name":"entity.name.function.rust"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.brackets.round.rust"}},"name":"meta.function.call.rust","patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#attributes"},{"include":"#keywords"},{"include":"#lvariables"},{"include":"#constants"},{"include":"#gtypes"},{"include":"#functions"},{"include":"#lifetimes"},{"include":"#macros"},{"include":"#namespaces"},{"include":"#punctuation"},{"include":"#strings"},{"include":"#types"},{"include":"#variables"}]}]},"gtypes":{"patterns":[{"match":"\\\\b(Some|None)\\\\b","name":"entity.name.type.option.rust"},{"match":"\\\\b(Ok|Err)\\\\b","name":"entity.name.type.result.rust"}]},"interpolations":{"captures":{"1":{"name":"punctuation.definition.interpolation.rust"},"2":{"name":"punctuation.definition.interpolation.rust"}},"match":"(\\\\{)[^\\"{}]*(})","name":"meta.interpolation.rust"},"keywords":{"patterns":[{"match":"\\\\b(await|break|continue|do|else|for|if|loop|match|return|try|while|yield)\\\\b","name":"keyword.control.rust"},{"match":"\\\\b(extern|let|macro|mod)\\\\b","name":"keyword.other.rust storage.type.rust"},{"match":"\\\\b(const)\\\\b","name":"storage.modifier.rust"},{"match":"\\\\b(type)\\\\b","name":"keyword.declaration.type.rust storage.type.rust"},{"match":"\\\\b(enum)\\\\b","name":"keyword.declaration.enum.rust storage.type.rust"},{"match":"\\\\b(trait)\\\\b","name":"keyword.declaration.trait.rust storage.type.rust"},{"match":"\\\\b(struct)\\\\b","name":"keyword.declaration.struct.rust storage.type.rust"},{"match":"\\\\b(abstract|static)\\\\b","name":"storage.modifier.rust"},{"match":"\\\\b(as|async|become|box|dyn|move|final|gen|impl|in|override|priv|ref|typeof|union|unsafe|unsized|use|virtual|where)\\\\b","name":"keyword.other.rust"},{"match":"\\\\bfn\\\\b","name":"keyword.other.fn.rust"},{"match":"\\\\bcrate\\\\b","name":"keyword.other.crate.rust"},{"match":"\\\\bmut\\\\b","name":"storage.modifier.mut.rust"},{"match":"([\\\\^|]|\\\\|\\\\||&&|<<|>>|!)(?!=)","name":"keyword.operator.logical.rust"},{"match":"&(?![\\\\&=])","name":"keyword.operator.borrow.and.rust"},{"match":"((?:[-%\\\\&*+/^|]|<<|>>)=)","name":"keyword.operator.assignment.rust"},{"match":"(?])=(?![=>])","name":"keyword.operator.assignment.equal.rust"},{"match":"(=(=)?(?!>)|!=|<=|(?=)","name":"keyword.operator.comparison.rust"},{"match":"(([%+]|(\\\\*(?!\\\\w)))(?!=))|(-(?!>))|(/(?!/))","name":"keyword.operator.math.rust"},{"captures":{"1":{"name":"punctuation.brackets.round.rust"},"2":{"name":"punctuation.brackets.square.rust"},"3":{"name":"punctuation.brackets.curly.rust"},"4":{"name":"keyword.operator.comparison.rust"},"5":{"name":"punctuation.brackets.round.rust"},"6":{"name":"punctuation.brackets.square.rust"},"7":{"name":"punctuation.brackets.curly.rust"}},"match":"(?:\\\\b|(?:(\\\\))|(])|(})))[\\\\t ]+([<>])[\\\\t ]+(?:\\\\b|(?:(\\\\()|(\\\\[)|(\\\\{)))"},{"match":"::","name":"keyword.operator.namespace.rust"},{"captures":{"1":{"name":"keyword.operator.dereference.rust"}},"match":"(\\\\*)(?=\\\\w+)"},{"match":"@","name":"keyword.operator.subpattern.rust"},{"match":"\\\\.(?!\\\\.)","name":"keyword.operator.access.dot.rust"},{"match":"\\\\.{2}([.=])?","name":"keyword.operator.range.rust"},{"match":":(?!:)","name":"keyword.operator.key-value.rust"},{"match":"->|<-","name":"keyword.operator.arrow.skinny.rust"},{"match":"=>","name":"keyword.operator.arrow.fat.rust"},{"match":"\\\\$","name":"keyword.operator.macro.dollar.rust"},{"match":"\\\\?","name":"keyword.operator.question.rust"}]},"lifetimes":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.lifetime.rust"},"2":{"name":"entity.name.type.lifetime.rust"}},"match":"(\')([A-Z_a-z][0-9A-Z_a-z]*)(?!\')\\\\b"},{"captures":{"1":{"name":"keyword.operator.borrow.rust"},"2":{"name":"punctuation.definition.lifetime.rust"},"3":{"name":"entity.name.type.lifetime.rust"}},"match":"(&)(\')([A-Z_a-z][0-9A-Z_a-z]*)(?!\')\\\\b"}]},"lvariables":{"patterns":[{"match":"\\\\b[Ss]elf\\\\b","name":"variable.language.self.rust"},{"match":"\\\\bsuper\\\\b","name":"variable.language.super.rust"}]},"macros":{"patterns":[{"captures":{"2":{"name":"entity.name.function.macro.rust"},"3":{"name":"entity.name.type.macro.rust"}},"match":"(([_a-z][0-9A-Z_a-z]*!)|([A-Z_][0-9A-Z_a-z]*!))","name":"meta.macro.rust"}]},"namespaces":{"patterns":[{"captures":{"1":{"name":"entity.name.namespace.rust"},"2":{"name":"keyword.operator.namespace.rust"}},"match":"(?]","name":"punctuation.brackets.angle.rust"}]},"strings":{"patterns":[{"begin":"(b?)(\\")","beginCaptures":{"1":{"name":"string.quoted.byte.raw.rust"},"2":{"name":"punctuation.definition.string.rust"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.rust"}},"name":"string.quoted.double.rust","patterns":[{"include":"#escapes"},{"include":"#interpolations"}]},{"begin":"(b?r)(#*)(\\")","beginCaptures":{"1":{"name":"string.quoted.byte.raw.rust"},"2":{"name":"punctuation.definition.string.raw.rust"},"3":{"name":"punctuation.definition.string.rust"}},"end":"(\\")(\\\\2)","endCaptures":{"1":{"name":"punctuation.definition.string.rust"},"2":{"name":"punctuation.definition.string.raw.rust"}},"name":"string.quoted.double.rust"},{"begin":"(b)?(\')","beginCaptures":{"1":{"name":"string.quoted.byte.raw.rust"},"2":{"name":"punctuation.definition.char.rust"}},"end":"\'","endCaptures":{"0":{"name":"punctuation.definition.char.rust"}},"name":"string.quoted.single.char.rust","patterns":[{"include":"#escapes"}]}]},"types":{"patterns":[{"captures":{"1":{"name":"entity.name.type.numeric.rust"}},"match":"(?","endCaptures":{"0":{"name":"punctuation.brackets.angle.rust"}},"patterns":[{"include":"#block-comments"},{"include":"#comments"},{"include":"#keywords"},{"include":"#lvariables"},{"include":"#lifetimes"},{"include":"#punctuation"},{"include":"#types"},{"include":"#variables"}]},{"match":"\\\\b(bool|char|str)\\\\b","name":"entity.name.type.primitive.rust"},{"captures":{"1":{"name":"keyword.declaration.trait.rust storage.type.rust"},"2":{"name":"entity.name.type.trait.rust"}},"match":"\\\\b(trait)\\\\s+(_?[A-Z][0-9A-Z_a-z]*)\\\\b"},{"captures":{"1":{"name":"keyword.declaration.struct.rust storage.type.rust"},"2":{"name":"entity.name.type.struct.rust"}},"match":"\\\\b(struct)\\\\s+(_?[A-Z][0-9A-Z_a-z]*)\\\\b"},{"captures":{"1":{"name":"keyword.declaration.enum.rust storage.type.rust"},"2":{"name":"entity.name.type.enum.rust"}},"match":"\\\\b(enum)\\\\s+(_?[A-Z][0-9A-Z_a-z]*)\\\\b"},{"captures":{"1":{"name":"keyword.declaration.type.rust storage.type.rust"},"2":{"name":"entity.name.type.declaration.rust"}},"match":"\\\\b(type)\\\\s+(_?[A-Z][0-9A-Z_a-z]*)\\\\b"},{"match":"\\\\b_?[A-Z][0-9A-Z_a-z]*\\\\b(?!!)","name":"entity.name.type.rust"}]},"variables":{"patterns":[{"match":"\\\\b(?jT});var FT,jT,dw=n1(()=>{FT=Object.freeze(JSON.parse('{"displayName":"C#","name":"csharp","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#directives"},{"include":"#declarations"},{"include":"#script-top-level"}],"repository":{"accessor-getter":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"contentName":"meta.accessor.getter.cs","end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#statement"}]},{"include":"#accessor-getter-expression"},{"include":"#punctuation-semicolon"}]},"accessor-getter-expression":{"begin":"=>","beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}},"contentName":"meta.accessor.getter.cs","end":"(?=[;}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}]},"accessor-setter":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"contentName":"meta.accessor.setter.cs","end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#statement"}]},{"begin":"=>","beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}},"contentName":"meta.accessor.setter.cs","end":"(?=[;}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}]},{"include":"#punctuation-semicolon"}]},"anonymous-method-expression":{"patterns":[{"begin":"((?:\\\\b(?:async|static)\\\\b\\\\s*)*)(?:(@?[_[:alpha:]][_[:alnum:]]*)\\\\b|(\\\\()(?(?:[^()]|\\\\(\\\\g\\\\))*)(\\\\)))\\\\s*(=>)","beginCaptures":{"1":{"patterns":[{"match":"async|static","name":"storage.modifier.$0.cs"}]},"2":{"name":"entity.name.variable.parameter.cs"},"3":{"name":"punctuation.parenthesis.open.cs"},"4":{"patterns":[{"include":"#comment"},{"include":"#explicit-anonymous-function-parameter"},{"include":"#implicit-anonymous-function-parameter"},{"include":"#default-argument"},{"include":"#punctuation-comma"}]},"5":{"name":"punctuation.parenthesis.close.cs"},"6":{"name":"keyword.operator.arrow.cs"}},"end":"(?=[),;}])","patterns":[{"include":"#intrusive"},{"begin":"(?=\\\\{)","end":"(?=[),;}])","patterns":[{"include":"#block"},{"include":"#intrusive"}]},{"begin":"\\\\b(ref)\\\\b|(?=\\\\S)","beginCaptures":{"1":{"name":"storage.modifier.ref.cs"}},"end":"(?=[),;}])","patterns":[{"include":"#expression"}]}]},{"begin":"((?:\\\\b(?:async|static)\\\\b\\\\s*)*)\\\\b(delegate)\\\\b\\\\s*","beginCaptures":{"1":{"patterns":[{"match":"async|static","name":"storage.modifier.$0.cs"}]},"2":{"name":"storage.type.delegate.cs"}},"end":"(?<=})|(?=[),;}])","patterns":[{"include":"#intrusive"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#intrusive"},{"include":"#explicit-anonymous-function-parameter"},{"include":"#punctuation-comma"}]},{"include":"#block"}]}]},"anonymous-object-creation-expression":{"begin":"\\\\b(new)\\\\b\\\\s*(?=\\\\{|//|/\\\\*|$)","beginCaptures":{"1":{"name":"keyword.operator.expression.new.cs"}},"end":"(?<=})","patterns":[{"include":"#comment"},{"include":"#initializer-expression"}]},"argument":{"patterns":[{"match":"\\\\b(ref|in)\\\\b","name":"storage.modifier.$1.cs"},{"begin":"\\\\b(out)\\\\b","beginCaptures":{"1":{"name":"storage.modifier.out.cs"}},"end":"(?=[]),])","patterns":[{"include":"#declaration-expression-local"},{"include":"#expression"}]},{"include":"#expression"}]},"argument-list":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}]},"array-creation-expression":{"begin":"\\\\b(new|stackalloc)\\\\b\\\\s*(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\*\\\\s*)*(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)?\\\\s*(?=\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.expression.$1.cs"},"2":{"patterns":[{"include":"#type"}]}},"end":"(?<=])","patterns":[{"include":"#bracketed-argument-list"}]},"as-expression":{"captures":{"1":{"name":"keyword.operator.expression.as.cs"},"2":{"patterns":[{"include":"#type"}]}},"match":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?(?!\\\\?))?(?:\\\\s*\\\\[\\\\s*(?:,\\\\s*)*](?:\\\\s*\\\\?(?!\\\\?))?)*)?"},"assignment-expression":{"begin":"(?:[-%*+/]|\\\\?\\\\?|[\\\\&^]|<<|>>>?|\\\\|)?=(?![=>])","beginCaptures":{"0":{"patterns":[{"include":"#assignment-operators"}]}},"end":"(?=[]),;}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}]},"assignment-operators":{"patterns":[{"match":"(?:[-%*+/]|\\\\?\\\\?)=","name":"keyword.operator.assignment.compound.cs"},{"match":"(?:[\\\\&^]|<<|>>>?|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.cs"},{"match":"=","name":"keyword.operator.assignment.cs"}]},"attribute":{"patterns":[{"include":"#type-name"},{"include":"#type-arguments"},{"include":"#attribute-arguments"}]},"attribute-arguments":{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#attribute-named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}]},"attribute-named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?==)","beginCaptures":{"1":{"name":"entity.name.variable.property.cs"}},"end":"(?=([),]))","patterns":[{"include":"#operator-assignment"},{"include":"#expression"}]},"attribute-section":{"begin":"(\\\\[)(assembly|module|field|event|method|param|property|return|typevar|type)?(:)?","beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"},"2":{"name":"keyword.other.attribute-specifier.cs"},"3":{"name":"punctuation.separator.colon.cs"}},"end":"(])","endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}},"patterns":[{"include":"#comment"},{"include":"#attribute"},{"include":"#punctuation-comma"}]},"await-expression":{"match":"(?[^()<>]|\\\\((?:[^()<>]|<[^()<>]*>|\\\\([^()<>]*\\\\))*\\\\)|<\\\\g*>)*>\\\\s*)?(?=\\\\()","beginCaptures":{"1":{"name":"entity.name.type.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"entity.name.type.cs"},"4":{"patterns":[{"include":"#type-arguments"}]}},"end":"(?<=\\\\))","patterns":[{"include":"#argument-list"}]},"base-types":{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}},"end":"(?=\\\\{|where|;)","patterns":[{"include":"#base-class-constructor-call"},{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#preprocessor"}]},"block":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#statement"}]},"boolean-literal":{"patterns":[{"match":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s*(\\\\))(?=\\\\s*-*!*@?[(_[:alnum:]])"},"casted-constant-pattern":{"begin":"(\\\\()([.:@_\\\\s[:alnum:]]+)(\\\\))(?=[-!+~\\\\s]*@?[\\"\'(_[:alnum:]]+)","beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"},"2":{"patterns":[{"include":"#type-builtin"},{"include":"#type-name"}]},"3":{"name":"punctuation.parenthesis.close.cs"}},"end":"(?=[]\\\\&),:;=?^|}]|!=|\\\\b(and|or|when)\\\\b)","patterns":[{"include":"#casted-constant-pattern"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#constant-pattern"}]},{"include":"#constant-pattern"},{"captures":{"1":{"name":"entity.name.type.alias.cs"},"2":{"name":"punctuation.separator.coloncolon.cs"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(::)"},{"captures":{"1":{"name":"entity.name.type.cs"},"2":{"name":"punctuation.accessor.cs"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(\\\\.)"},{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"variable.other.constant.cs"}]},"catch-clause":{"begin":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s*(?:(\\\\g)\\\\b)?"}]},{"include":"#when-clause"},{"include":"#comment"},{"include":"#block"}]},"char-character-escape":{"match":"\\\\\\\\(x\\\\h{1,4}|u\\\\h{4}|.)","name":"constant.character.escape.cs"},"char-literal":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.char.begin.cs"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.char.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}},"name":"string.quoted.single.cs","patterns":[{"include":"#char-character-escape"}]},"class-declaration":{"begin":"(?=(\\\\brecord\\\\b\\\\s+)?\\\\bclass\\\\b)","end":"(?<=})|(?=;)","patterns":[{"begin":"(\\\\b(record)\\\\b\\\\s+)?\\\\b(class)\\\\b\\\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*","beginCaptures":{"2":{"name":"storage.type.record.cs"},"3":{"name":"storage.type.class.cs"},"4":{"name":"entity.name.type.class.cs"}},"end":"(?=\\\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#class-or-struct-members"}]},{"include":"#preprocessor"},{"include":"#comment"}]},"class-or-struct-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#storage-modifier"},{"include":"#type-declarations"},{"include":"#constructor-declaration"},{"include":"#property-declaration"},{"include":"#fixed-size-buffer-declaration"},{"include":"#field-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#variable-initializer"},{"include":"#destructor-declaration"},{"include":"#operator-declaration"},{"include":"#conversion-operator-declaration"},{"include":"#method-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"combinator-pattern":{"match":"\\\\b(and|or|not)\\\\b","name":"keyword.operator.expression.pattern.combinator.$1.cs"},"comment":{"patterns":[{"begin":"(^\\\\s+)?(///)(?!/)","captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}},"name":"comment.block.documentation.cs","patterns":[{"include":"#xml-doc-comment"}],"while":"^(\\\\s*)(///)(?!/)"},{"begin":"(^\\\\s+)?(/\\\\*\\\\*)(?!/)","captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}},"end":"(^\\\\s+)?(\\\\*/)","name":"comment.block.documentation.cs","patterns":[{"begin":"\\\\G(?=(?~\\\\*/)$)","patterns":[{"include":"#xml-doc-comment"}],"while":"^(\\\\s*+)(\\\\*(?!/))?(?=(?~\\\\*/)$)","whileCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}}},{"include":"#xml-doc-comment"}]},{"begin":"(^\\\\s+)?(//).*$","captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}},"name":"comment.line.double-slash.cs","while":"^(\\\\s*)(//).*$"},{"begin":"/\\\\*","captures":{"0":{"name":"punctuation.definition.comment.cs"}},"end":"\\\\*/","name":"comment.block.cs"}]},"conditional-operator":{"patterns":[{"match":"\\\\?(?!\\\\?|\\\\s*[.\\\\[])","name":"keyword.operator.conditional.question-mark.cs"},{"match":":","name":"keyword.operator.conditional.colon.cs"}]},"constant-pattern":{"patterns":[{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#numeric-literal"},{"include":"#char-literal"},{"include":"#string-literal"},{"include":"#raw-string-literal"},{"include":"#verbatim-string-literal"},{"include":"#type-operator-expression"},{"include":"#expression-operator-expression"},{"include":"#expression-operators"},{"include":"#casted-constant-pattern"}]},"constructor-declaration":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?=\\\\(|$)","beginCaptures":{"1":{"name":"entity.name.function.cs"}},"end":"(?<=})|(?=;)","patterns":[{"begin":"(:)","beginCaptures":{"1":{"name":"punctuation.separator.colon.cs"}},"end":"(?=\\\\{|=>)","patterns":[{"include":"#constructor-initializer"}]},{"include":"#parenthesized-parameter-list"},{"include":"#preprocessor"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"}]},"constructor-initializer":{"begin":"\\\\b(base|this)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"variable.language.$1.cs"}},"end":"(?<=\\\\))","patterns":[{"include":"#argument-list"}]},"context-control-paren-statement":{"patterns":[{"include":"#fixed-statement"},{"include":"#lock-statement"},{"include":"#using-statement"}]},"context-control-statement":{"match":"\\\\b(checked|unchecked|unsafe)\\\\b(?!\\\\s*[(@_[:alpha:]])","name":"keyword.control.context.$1.cs"},"conversion-operator-declaration":{"begin":"\\\\b(?(?:ex|im)plicit)\\\\s*\\\\b(?operator)\\\\s*(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s*(?=\\\\()","beginCaptures":{"1":{"patterns":[{"captures":{"1":{"name":"storage.modifier.explicit.cs"}},"match":"\\\\b(explicit)\\\\b"},{"captures":{"1":{"name":"storage.modifier.implicit.cs"}},"match":"\\\\b(implicit)\\\\b"}]},"2":{"name":"storage.type.operator.cs"},"3":{"patterns":[{"include":"#type"}]}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}]},"declaration-expression-local":{"captures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}},"match":"(?:\\\\b(var)\\\\b|(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*))\\\\s+(\\\\g)\\\\b\\\\s*(?=[]),])"},"declaration-expression-tuple":{"captures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.tuple-element.cs"}},"match":"(?:\\\\b(var)\\\\b|(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*))\\\\s+(\\\\g)\\\\b\\\\s*(?=[),])"},"declarations":{"patterns":[{"include":"#namespace-declaration"},{"include":"#type-declarations"},{"include":"#punctuation-semicolon"}]},"default-argument":{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.cs"}},"end":"(?=[),])","patterns":[{"include":"#expression"}]},"default-literal-expression":{"captures":{"1":{"name":"keyword.operator.expression.default.cs"}},"match":"\\\\b(default)\\\\b"},"delegate-declaration":{"begin":"\\\\b(delegate)\\\\b\\\\s+(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+(\\\\g)\\\\s*(<([^<>]+)>)?\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"storage.type.delegate.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.type.delegate.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}},"end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"}]},"designation-pattern":{"patterns":[{"include":"#intrusive"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#punctuation-comma"},{"include":"#designation-pattern"}]},{"include":"#simple-designation-pattern"}]},"destructor-declaration":{"begin":"(~)(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"punctuation.tilde.cs"},"2":{"name":"entity.name.function.cs"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}]},"directives":{"patterns":[{"include":"#extern-alias-directive"},{"include":"#using-directive"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"discard-pattern":{"match":"_(?![_[:alnum:]])","name":"variable.language.discard.cs"},"do-statement":{"begin":"(?)\\\\s*)?(?:(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*)?(?:(\\\\?)\\\\s*)?(?=\\\\[)","beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"punctuation.accessor.pointer.cs"},"4":{"name":"variable.other.object.property.cs"},"5":{"name":"keyword.operator.null-conditional.cs"}},"end":"(?<=])(?!\\\\s*\\\\[)","patterns":[{"include":"#bracketed-argument-list"}]},"else-part":{"begin":"(?|//|/\\\\*|$)","beginCaptures":{"1":{"name":"storage.type.accessor.$1.cs"}},"end":"(?<=[;}])|(?=})","patterns":[{"include":"#accessor-setter"}]}]},"event-declaration":{"begin":"\\\\b(event)\\\\b\\\\s*(?(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+)(?\\\\g\\\\s*\\\\.\\\\s*)?(\\\\g)\\\\s*(?=[,;={]|//|/\\\\*|$)","beginCaptures":{"1":{"name":"storage.type.event.cs"},"2":{"patterns":[{"include":"#type"}]},"8":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"9":{"name":"entity.name.variable.event.cs"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#event-accessors"},{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.event.cs"},{"include":"#punctuation-comma"},{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.cs"}},"end":"(?<=,)|(?=;)","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]}]},"explicit-anonymous-function-parameter":{"captures":{"1":{"name":"storage.modifier.$1.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}},"match":"(?:\\\\b(ref|params|out|in)\\\\b\\\\s*)?(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?<(?:[^<>]|\\\\g)*>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)*\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s*\\\\b(\\\\g)\\\\b"},"expression":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#expression-operator-expression"},{"include":"#type-operator-expression"},{"include":"#default-literal-expression"},{"include":"#throw-expression"},{"include":"#raw-interpolated-string"},{"include":"#interpolated-string"},{"include":"#verbatim-interpolated-string"},{"include":"#type-builtin"},{"include":"#language-variable"},{"include":"#switch-statement-or-expression"},{"include":"#with-expression"},{"include":"#conditional-operator"},{"include":"#assignment-expression"},{"include":"#expression-operators"},{"include":"#await-expression"},{"include":"#query-expression"},{"include":"#as-expression"},{"include":"#is-expression"},{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#anonymous-method-expression"},{"include":"#object-creation-expression"},{"include":"#array-creation-expression"},{"include":"#anonymous-object-creation-expression"},{"include":"#invocation-expression"},{"include":"#member-access-expression"},{"include":"#element-access-expression"},{"include":"#cast-expression"},{"include":"#literal"},{"include":"#parenthesized-expression"},{"include":"#tuple-deconstruction-assignment"},{"include":"#initializer-expression"},{"include":"#identifier"}]},"expression-body":{"begin":"=>","beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}},"end":"(?=[),;}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}]},"expression-operator-expression":{"begin":"\\\\b(checked|unchecked|nameof)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.expression.$1.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#expression"}]},"expression-operators":{"patterns":[{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.cs"},{"match":"[!=]=","name":"keyword.operator.comparison.cs"},{"match":"<=|>=|[<>]","name":"keyword.operator.relational.cs"},{"match":"!|&&|\\\\|\\\\|","name":"keyword.operator.logical.cs"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cs"},{"match":"--","name":"keyword.operator.decrement.cs"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.cs"},{"match":"\\\\+|-(?!>)|[%*/]","name":"keyword.operator.arithmetic.cs"},{"match":"\\\\?\\\\?","name":"keyword.operator.null-coalescing.cs"},{"match":"\\\\.\\\\.","name":"keyword.operator.range.cs"}]},"extern-alias-directive":{"begin":"\\\\b(extern)\\\\s+(alias)\\\\b","beginCaptures":{"1":{"name":"keyword.other.directive.extern.cs"},"2":{"name":"keyword.other.directive.alias.cs"}},"end":"(?=;)","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"variable.other.alias.cs"}]},"field-declaration":{"begin":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+(\\\\g)\\\\s*(?!=[=>])(?=[,;=]|$)","beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.field.cs"}},"end":"(?=;)","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.field.cs"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}]},"finally-clause":{"begin":"(?(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*)\\\\s+(\\\\g)\\\\s*(?=\\\\[)","beginCaptures":{"1":{"name":"storage.modifier.fixed.cs"},"2":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.field.cs"}},"end":"(?=;)","patterns":[{"include":"#bracketed-argument-list"},{"include":"#comment"}]},"fixed-statement":{"begin":"\\\\b(fixed)\\\\b","beginCaptures":{"1":{"name":"keyword.control.context.fixed.cs"}},"end":"(?<=\\\\))|(?=[;}])","patterns":[{"include":"#intrusive"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#intrusive"},{"include":"#local-variable-declaration"}]}]},"for-statement":{"begin":"\\\\b(for)\\\\b","beginCaptures":{"1":{"name":"keyword.control.loop.for.cs"}},"end":"(?<=\\\\))|(?=[;}])","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"begin":"(?=[^);])","end":"(?=[);])","patterns":[{"include":"#intrusive"},{"include":"#local-variable-declaration"},{"include":"#local-tuple-var-deconstruction"},{"include":"#tuple-deconstruction-assignment"},{"include":"#expression"}]},{"begin":"(?=;)","end":"(?=\\\\))","patterns":[{"include":"#intrusive"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"}]}]}]},"foreach-statement":{"begin":"\\\\b(foreach)\\\\b","beginCaptures":{"1":{"name":"keyword.control.loop.foreach.cs"}},"end":"(?<=\\\\))|(?=[;}])","patterns":[{"include":"#intrusive"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#intrusive"},{"captures":{"1":{"name":"storage.modifier.ref.cs"},"2":{"name":"storage.type.var.cs"},"3":{"patterns":[{"include":"#type"}]},"8":{"name":"entity.name.variable.local.cs"},"9":{"name":"keyword.control.loop.in.cs"}},"match":"(?:(?:\\\\b(ref)\\\\s+)?\\\\b(var)\\\\b|(?(?:ref\\\\s+)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*))\\\\s+(\\\\g)\\\\s+\\\\b(in)\\\\b"},{"captures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]},"3":{"name":"keyword.control.loop.in.cs"}},"match":"(?:\\\\b(var)\\\\b\\\\s*)?(?\\\\((?:[^()]|\\\\g)+\\\\))\\\\s+\\\\b(in)\\\\b"},{"include":"#expression"}]}]},"generic-constraints":{"begin":"(where)\\\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)","beginCaptures":{"1":{"name":"storage.modifier.where.cs"},"2":{"name":"entity.name.type.type-parameter.cs"},"3":{"name":"punctuation.separator.colon.cs"}},"end":"(?=\\\\{|where|;|=>)","patterns":[{"match":"\\\\bclass\\\\b","name":"storage.type.class.cs"},{"match":"\\\\bstruct\\\\b","name":"storage.type.struct.cs"},{"match":"\\\\bdefault\\\\b","name":"keyword.other.constraint.default.cs"},{"match":"\\\\bnotnull\\\\b","name":"keyword.other.constraint.notnull.cs"},{"match":"\\\\bunmanaged\\\\b","name":"keyword.other.constraint.unmanaged.cs"},{"captures":{"1":{"name":"keyword.operator.expression.new.cs"},"2":{"name":"punctuation.parenthesis.open.cs"},"3":{"name":"punctuation.parenthesis.close.cs"}},"match":"(new)\\\\s*(\\\\()\\\\s*(\\\\))"},{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#generic-constraints"}]},"goto-statement":{"begin":"(?(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+)(?\\\\g\\\\s*\\\\.\\\\s*)?(?this)\\\\s*(?=\\\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"variable.language.this.cs"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#bracketed-parameter-list"},{"include":"#property-accessors"},{"include":"#accessor-getter-expression"},{"include":"#variable-initializer"}]},"initializer-expression":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"interface-declaration":{"begin":"(?=\\\\binterface\\\\b)","end":"(?<=})|(?=;)","patterns":[{"begin":"(interface)\\\\b\\\\s+(@?[_[:alpha:]][_[:alnum:]]*)","beginCaptures":{"1":{"name":"storage.type.interface.cs"},"2":{"name":"entity.name.type.interface.cs"}},"end":"(?=\\\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#interface-members"}]},{"include":"#preprocessor"},{"include":"#comment"}]},"interface-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#storage-modifier"},{"include":"#property-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#method-declaration"},{"include":"#operator-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"interpolated-string":{"begin":"\\\\$\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"end":"(\\")|([^\\\\n\\\\\\\\{])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}},"name":"string.quoted.double.cs","patterns":[{"include":"#string-character-escape"},{"include":"#interpolation"}]},"interpolation":{"begin":"(?<=[^{]|^)((?:\\\\{\\\\{)*)(\\\\{)(?!\\\\{)","beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}},"name":"meta.embedded.interpolation.cs","patterns":[{"include":"#expression"}]},"intrusive":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"}]},"invocation-expression":{"begin":"(?:(?:(\\\\?)\\\\s*)?(\\\\.)\\\\s*|(->)\\\\s*)?(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(<(?[^()<>]|\\\\((?:[^()<>]|<[^()<>]*>|\\\\([^()<>]*\\\\))*\\\\)|<\\\\g*>)*>\\\\s*)?(?=\\\\()","beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"punctuation.accessor.pointer.cs"},"4":{"name":"entity.name.function.cs"},"5":{"patterns":[{"include":"#type-arguments"}]}},"end":"(?<=\\\\))","patterns":[{"include":"#argument-list"}]},"is-expression":{"begin":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)?\\\\s+(\\\\g)\\\\b\\\\s*\\\\b(in)\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.operator.expression.query.join.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.operator.expression.query.in.cs"}},"end":"(?=[);])","patterns":[{"include":"#join-on"},{"include":"#join-equals"},{"include":"#join-into"},{"include":"#query-body"},{"include":"#expression"}]},"join-equals":{"captures":{"1":{"name":"keyword.operator.expression.query.equals.cs"}},"match":"\\\\b(equals)\\\\b\\\\s*"},"join-into":{"captures":{"1":{"name":"keyword.operator.expression.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}},"match":"\\\\b(into)\\\\b\\\\s*(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*"},"join-on":{"captures":{"1":{"name":"keyword.operator.expression.query.on.cs"}},"match":"\\\\b(on)\\\\b\\\\s*"},"labeled-statement":{"captures":{"1":{"name":"entity.name.label.cs"},"2":{"name":"punctuation.separator.colon.cs"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)"},"language-variable":{"patterns":[{"match":"\\\\b(base|this)\\\\b","name":"variable.language.$1.cs"},{"match":"\\\\b(value)\\\\b","name":"variable.other.$1.cs"}]},"let-clause":{"begin":"\\\\b(let)\\\\b\\\\s*(@?[_[:alpha:]][_[:alnum:]]*)\\\\b\\\\s*(=)\\\\s*","beginCaptures":{"1":{"name":"keyword.operator.expression.query.let.cs"},"2":{"name":"entity.name.variable.range-variable.cs"},"3":{"name":"keyword.operator.assignment.cs"}},"end":"(?=[);])","patterns":[{"include":"#query-body"},{"include":"#expression"}]},"list-pattern":{"begin":"(?=\\\\[)","end":"(?=[]\\\\&),:;=?^|}]|!=|\\\\b(and|or|when)\\\\b)","patterns":[{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"end":"]","endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}},"patterns":[{"include":"#pattern"},{"include":"#punctuation-comma"}]},{"begin":"(?<=])","end":"(?=[]\\\\&),:;=?^|}]|!=|\\\\b(and|or|when)\\\\b)","patterns":[{"include":"#intrusive"},{"include":"#simple-designation-pattern"}]}]},"literal":{"patterns":[{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#numeric-literal"},{"include":"#char-literal"},{"include":"#raw-string-literal"},{"include":"#string-literal"},{"include":"#verbatim-string-literal"},{"include":"#tuple-literal"}]},"local-constant-declaration":{"begin":"\\\\b(?const)\\\\b\\\\s*(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+(\\\\g)\\\\s*(?=[,;=])","beginCaptures":{"1":{"name":"storage.modifier.const.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}},"end":"(?=;)","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.local.cs"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}]},"local-declaration":{"patterns":[{"include":"#local-constant-declaration"},{"include":"#local-variable-declaration"},{"include":"#local-function-declaration"},{"include":"#local-tuple-var-deconstruction"},{"include":"#local-tuple-declaration-deconstruction"}]},"local-function-declaration":{"begin":"\\\\b((?:(?:async|unsafe|static|extern)\\\\s+)*)(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?)?(?:\\\\s*\\\\[\\\\s*(?:,\\\\s*)*](?:\\\\s*\\\\?)?)*)\\\\s+(\\\\g)\\\\s*(<[^<>]+>)?\\\\s*(?=\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#storage-modifier"}]},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.function.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}]},"local-tuple-declaration-deconstruction":{"captures":{"1":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}},"match":"(?\\\\((?:[^()]|\\\\g)+\\\\))\\\\s*(?!=[=>])(?==)"},"local-tuple-var-deconstruction":{"begin":"\\\\b(var)\\\\b\\\\s*(?\\\\((?:[^()]|\\\\g)+\\\\))\\\\s*(?=[);=])","beginCaptures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}},"end":"(?=[);])","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}]},"local-variable-declaration":{"begin":"(?:(?:\\\\b(ref)\\\\s+(?:\\\\b(readonly)\\\\s+)?)?\\\\b(var)\\\\b|(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\*\\\\s*)*(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*))\\\\s+(\\\\g)\\\\s*(?!=>)(?=[),;=])","beginCaptures":{"1":{"name":"storage.modifier.ref.cs"},"2":{"name":"storage.modifier.readonly.cs"},"3":{"name":"storage.type.var.cs"},"4":{"patterns":[{"include":"#type"}]},"9":{"name":"entity.name.variable.local.cs"}},"end":"(?=[);}])","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.local.cs"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}]},"lock-statement":{"begin":"\\\\b(lock)\\\\b","beginCaptures":{"1":{"name":"keyword.control.context.lock.cs"}},"end":"(?<=\\\\))|(?=[;}])","patterns":[{"include":"#intrusive"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}},"patterns":[{"include":"#intrusive"},{"include":"#expression"}]}]},"member-access-expression":{"patterns":[{"captures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"punctuation.accessor.pointer.cs"},"4":{"name":"variable.other.object.property.cs"}},"match":"(?:(?:(\\\\?)\\\\s*)?(\\\\.)\\\\s*|(->)\\\\s*)(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(?![(_[:alnum:]]|(\\\\?)?\\\\[|<)"},{"captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"variable.other.object.cs"},"3":{"patterns":[{"include":"#type-arguments"}]}},"match":"(\\\\.)?\\\\s*(@?[_[:alpha:]][_[:alnum:]]*)(?\\\\s*<([^<>]|\\\\g)+>\\\\s*)(?=(\\\\s*\\\\?)?\\\\s*\\\\.\\\\s*@?[_[:alpha:]][_[:alnum:]]*)"},{"captures":{"1":{"name":"variable.other.object.cs"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)(?=\\\\s*(?:(?:\\\\?\\\\s*)?\\\\.|->)\\\\s*@?[_[:alpha:]][_[:alnum:]]*)"}]},"method-declaration":{"begin":"(?(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s+)(?\\\\g\\\\s*\\\\.\\\\s*)?(\\\\g)\\\\s*(<([^<>]+)>)?\\\\s*(?=\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.function.cs"},"9":{"patterns":[{"include":"#type-parameter-list"}]}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}]},"named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\\\s*(:)","beginCaptures":{"1":{"name":"entity.name.variable.parameter.cs"},"2":{"name":"punctuation.separator.colon.cs"}},"end":"(?=([]),]))","patterns":[{"include":"#argument"}]},"namespace-declaration":{"begin":"\\\\b(namespace)\\\\s+","beginCaptures":{"1":{"name":"storage.type.namespace.cs"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.type.namespace.cs"},{"include":"#punctuation-accessor"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}},"patterns":[{"include":"#declarations"},{"include":"#using-directive"},{"include":"#punctuation-semicolon"}]}]},"null-literal":{"match":"(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*)\\\\s*(?=\\\\{|//|/\\\\*|$)"},"object-creation-expression-with-parameters":{"begin":"(new)(?:\\\\s+(?(?:(?:(?@?[_[:alpha:]][_[:alnum:]]*)\\\\s*::\\\\s*)?(?\\\\g\\\\s*(?\\\\s*<(?:[^<>]|\\\\g)+>\\\\s*)?)(?:\\\\s*\\\\.\\\\s*\\\\g)*|(?\\\\s*\\\\((?:[^()]|\\\\g)+\\\\)))(?:\\\\s*\\\\?\\\\s*)?(?:\\\\s*\\\\[(?:\\\\s*,\\\\s*)*]\\\\s*\\\\??\\\\s*)*))?\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.operator.expression.new.cs"},"2":{"patterns":[{"include":"#type"}]}},"end":"(?<=\\\\))","patterns":[{"include":"#argument-list"}]},"operator-assignment":{"match":"(?(?:ref\\\\s+(?:readonly\\\\s+)?)?(?:(?:(?