offsite 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/apps/server/dist/claude.js +38 -27
- package/apps/server/dist/config.js +2 -1
- package/apps/server/dist/db.js +13 -0
- package/apps/server/dist/history.js +49 -15
- package/apps/server/dist/projects.js +92 -0
- package/apps/server/dist/run.js +7 -3
- package/apps/server/dist/sessions.js +15 -14
- package/apps/server/dist/socket.js +15 -5
- package/apps/web/dist/assets/{angular-html-_TZra42G.js → angular-html-Oa9dnZbT.js} +1 -1
- package/apps/web/dist/assets/{angular-ts-CVVZOQsp.js → angular-ts-F_BIbY2H.js} +1 -1
- package/apps/web/dist/assets/{apl-Cyzt__4P.js → apl-D7AuiKiV.js} +1 -1
- package/apps/web/dist/assets/{astro-DvoD4nYz.js → astro-DnpymQyW.js} +1 -1
- package/apps/web/dist/assets/{blade-SFrvNJcM.js → blade-CZZrW0iI.js} +1 -1
- package/apps/web/dist/assets/{c-BzXljoEl.js → c-V_Rix0w2.js} +1 -1
- package/apps/web/dist/assets/{chapel-CSqeAvDr.js → chapel-fGtLLMYq.js} +1 -1
- package/apps/web/dist/assets/{cobol-DnK1h_4j.js → cobol-BFOTnbFa.js} +1 -1
- package/apps/web/dist/assets/{coffee-BrM2hs_V.js → coffee-BdvfipEg.js} +1 -1
- package/apps/web/dist/assets/{cpp-C_7gVSp4.js → cpp-D_NFR3H2.js} +1 -1
- package/apps/web/dist/assets/{crystal-DbpY_y_D.js → crystal-BM2vkBPa.js} +1 -1
- package/apps/web/dist/assets/{css-CcKWTG1c.js → css-Byur6C5q.js} +1 -1
- package/apps/web/dist/assets/{edge-CqcnepJa.js → edge-CP-KL2DQ.js} +1 -1
- package/apps/web/dist/assets/{elixir-DG0UMMTO.js → elixir-CiO075Fh.js} +1 -1
- package/apps/web/dist/assets/{elm-D81_16hi.js → elm-DIyG-d95.js} +1 -1
- package/apps/web/dist/assets/{erb-BHb0Ji2T.js → erb-DHZK6WKc.js} +1 -1
- package/apps/web/dist/assets/{git-rebase-Bzcz_AWI.js → git-rebase-CxXKbwiy.js} +1 -1
- package/apps/web/dist/assets/{glimmer-js-BbGaPXN7.js → glimmer-js-BUhQC_gD.js} +1 -1
- package/apps/web/dist/assets/{glimmer-ts-B2OBt1Cw.js → glimmer-ts-D2lLByyw.js} +1 -1
- package/apps/web/dist/assets/{glsl-Cuu3Xc_3.js → glsl-BMvlWqE_.js} +1 -1
- package/apps/web/dist/assets/{graphql-XBGrkq1T.js → graphql-D9UFk_fJ.js} +1 -1
- package/apps/web/dist/assets/{hack-D-n58M0B.js → hack-BZAO0Jc2.js} +1 -1
- package/apps/web/dist/assets/{haml-06aMoWFC.js → haml-Dm5wroII.js} +1 -1
- package/apps/web/dist/assets/{handlebars-BSCSPRHp.js → handlebars-C9L1Bn7f.js} +1 -1
- package/apps/web/dist/assets/{html-CRYhxgas.js → html-Bz91Luf0.js} +1 -1
- package/apps/web/dist/assets/{html-derivative-El-EKb6H.js → html-derivative-hIdjVrpA.js} +1 -1
- package/apps/web/dist/assets/{http-Cj-Wbb2c.js → http-AWG6aeFM.js} +1 -1
- package/apps/web/dist/assets/{hurl--dF5MzC1.js → hurl-pSGcpqgh.js} +1 -1
- package/apps/web/dist/assets/index-BiLbXfDN.js +899 -0
- package/apps/web/dist/assets/index-DQIK-TpZ.css +2 -0
- package/apps/web/dist/assets/{java-_zuIdTC3.js → java-D_CyC-X4.js} +1 -1
- package/apps/web/dist/assets/{javascript-Dw2bor_9.js → javascript-PK4jkG9t.js} +1 -1
- package/apps/web/dist/assets/{jinja-CtYhL6FS.js → jinja-Cu3wzgkz.js} +1 -1
- package/apps/web/dist/assets/{jison-BS6VCOAt.js → jison-CHevE1W8.js} +1 -1
- package/apps/web/dist/assets/{json-D6Mznwzn.js → json-DPTkd0bP.js} +1 -1
- package/apps/web/dist/assets/{jsx-DLuxOqjU.js → jsx-DcsDzCOA.js} +1 -1
- package/apps/web/dist/assets/{julia-CMgTtdec.js → julia-B9tMVOL0.js} +1 -1
- package/apps/web/dist/assets/{just-D_e2Cdol.js → just-BHIhrE9N.js} +1 -1
- package/apps/web/dist/assets/{latex-C7F9cbcZ.js → latex-CY05HK-G.js} +1 -1
- package/apps/web/dist/assets/{liquid-DZ0eHbL-.js → liquid-DJaL8XK2.js} +1 -1
- package/apps/web/dist/assets/{lua-DA_XbnYa.js → lua-BfaWUinJ.js} +1 -1
- package/apps/web/dist/assets/{marko-BOjbwMe_.js → marko-0Lc0z7w6.js} +1 -1
- package/apps/web/dist/assets/{mdc-BLQdrSL9.js → mdc-DEhXNYDZ.js} +1 -1
- package/apps/web/dist/assets/{nginx-CRuAoyv9.js → nginx-DLuBebI5.js} +1 -1
- package/apps/web/dist/assets/{nim--m3L_KpX.js → nim-BIJh7lZB.js} +1 -1
- package/apps/web/dist/assets/{org-BNxSv-BH.js → org-BFpxb2WJ.js} +1 -1
- package/apps/web/dist/assets/{perl-DEB_cAoG.js → perl-DHbDMq2q.js} +1 -1
- package/apps/web/dist/assets/{php-Cei4P5ds.js → php-BcVbiJpZ.js} +1 -1
- package/apps/web/dist/assets/{pug-BtkQ8Y8B.js → pug-bdfyK-rS.js} +1 -1
- package/apps/web/dist/assets/{qml-yI-6sShm.js → qml-BC2D8eWk.js} +1 -1
- package/apps/web/dist/assets/{r-CJ8zo4yy.js → r-O3zbZ-YT.js} +1 -1
- package/apps/web/dist/assets/{razor-CTPI_hHO.js → razor-Ffnu5_vD.js} +1 -1
- package/apps/web/dist/assets/{regexp-j43xPEIH.js → regexp-dnbUAgjx.js} +1 -1
- package/apps/web/dist/assets/{rst-CfIeFcNC.js → rst-DJfy2dSm.js} +1 -1
- package/apps/web/dist/assets/{ruby-CtmudUkS.js → ruby-DGEpA0mD.js} +1 -1
- package/apps/web/dist/assets/{sas-BBgd1Oa5.js → sas-CZvL8X8k.js} +1 -1
- package/apps/web/dist/assets/{scss-BOSyZrIf.js → scss-BtNSCzZB.js} +1 -1
- package/apps/web/dist/assets/{shellscript-BES_U9_l.js → shellscript-uR-sOZlr.js} +1 -1
- package/apps/web/dist/assets/{shellsession-CdF1AgdN.js → shellsession-BT-Jl4S5.js} +1 -1
- package/apps/web/dist/assets/{soy-hqjXYWz3.js → soy-BjfL_vrj.js} +1 -1
- package/apps/web/dist/assets/{sql-D5hYy2r7.js → sql-fa1gAeRF.js} +1 -1
- package/apps/web/dist/assets/{stata-GNNI7e-r.js → stata-DgTOpGhg.js} +1 -1
- package/apps/web/dist/assets/{surrealql-gm8__PDR.js → surrealql-DVqEkJeu.js} +1 -1
- package/apps/web/dist/assets/{svelte-DK6xQ-Vs.js → svelte-CyQ5sU9I.js} +1 -1
- package/apps/web/dist/assets/{templ-Dy-PHEH0.js → templ-DrztMbAf.js} +1 -1
- package/apps/web/dist/assets/{tex-gYu3IM_T.js → tex-NAwM8Kkh.js} +1 -1
- package/apps/web/dist/assets/{ts-tags-C8akqtaV.js → ts-tags-DX96dDxh.js} +1 -1
- package/apps/web/dist/assets/{tsx-CtF99HYc.js → tsx-D3PnhDHK.js} +1 -1
- package/apps/web/dist/assets/{twig-D7-O9s37.js → twig-FG0P9evf.js} +1 -1
- package/apps/web/dist/assets/{typescript-o4QHcKOF.js → typescript-Crqeuw0P.js} +1 -1
- package/apps/web/dist/assets/{typst-CsLzgkYX.js → typst-CO_2MFRr.js} +1 -1
- package/apps/web/dist/assets/{vue-C67X0ZYE.js → vue-fTNrS0Q3.js} +1 -1
- package/apps/web/dist/assets/{vue-html-3wcw93oK.js → vue-html-E0ptmXwc.js} +1 -1
- package/apps/web/dist/assets/{vue-vine-Bq8-4EKU.js → vue-vine-C34_rJIu.js} +1 -1
- package/apps/web/dist/assets/{xml-DXCI-6Wi.js → xml-BB9WbMMU.js} +1 -1
- package/apps/web/dist/assets/{xsl-Dr0qfgBg.js → xsl-B3w2P7LL.js} +1 -1
- package/apps/web/dist/assets/{yaml-DHhOWIuf.js → yaml-BKGRKqBA.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/package.json +1 -1
- package/apps/server/dist/folders.js +0 -12
- package/apps/web/dist/assets/index-CN9uEzWa.js +0 -899
- package/apps/web/dist/assets/index-Ck79gpc3.css +0 -2
package/README.md
CHANGED
|
@@ -25,10 +25,10 @@ Don't use the same session in offsite and the CLI at the same time. Switching be
|
|
|
25
25
|
|
|
26
26
|
## Separate instances
|
|
27
27
|
|
|
28
|
-
Give each instance its own port and `--dir`.
|
|
28
|
+
Give each instance its own port and `--dir`.
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
|
|
31
|
+
npx offsite --port 47850 --dir ~/.offsite-work
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Development
|
|
@@ -38,4 +38,4 @@ pnpm install
|
|
|
38
38
|
pnpm dev
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
The web app runs at [http://localhost:5173](http://localhost:5173). The server runs on port 47842 and keeps its data in `~/.offsite-dev
|
|
41
|
+
The web app runs at [http://localhost:5173](http://localhost:5173). The server runs on port 47842 and keeps its data in `~/.offsite-dev`, apart from your main instance.
|
|
@@ -5,7 +5,6 @@ import path from 'node:path';
|
|
|
5
5
|
import { query, } from '@anthropic-ai/claude-agent-sdk';
|
|
6
6
|
import { broadcast } from './hub.js';
|
|
7
7
|
import { readJson, writeJson } from './storage.js';
|
|
8
|
-
export const DEFAULT_ACCOUNT = 'default';
|
|
9
8
|
const probes = new Map();
|
|
10
9
|
const limits = new Map();
|
|
11
10
|
let executable = '';
|
|
@@ -21,19 +20,18 @@ export function findClaude() {
|
|
|
21
20
|
return null;
|
|
22
21
|
}
|
|
23
22
|
export function claudeOptions(accountId, cwd) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const account = storedAccounts().find((item) => item.id === accountId);
|
|
30
|
-
if (account === undefined)
|
|
31
|
-
throw new Error('That account was removed');
|
|
32
|
-
env.CLAUDE_CODE_OAUTH_TOKEN = account.token;
|
|
33
|
-
}
|
|
23
|
+
if (accountId === null)
|
|
24
|
+
throw new Error('Add a Claude account in Settings → Accounts');
|
|
25
|
+
const account = storedAccounts().find((item) => item.id === accountId);
|
|
26
|
+
if (account === undefined)
|
|
27
|
+
throw new Error('That account was removed');
|
|
34
28
|
return {
|
|
35
29
|
cwd,
|
|
36
|
-
env
|
|
30
|
+
env: {
|
|
31
|
+
...process.env,
|
|
32
|
+
CLAUDE_CODE_ENTRYPOINT: 'offsite',
|
|
33
|
+
CLAUDE_CONFIG_DIR: account.configDir,
|
|
34
|
+
},
|
|
37
35
|
pathToClaudeCodeExecutable: executable,
|
|
38
36
|
systemPrompt: { type: 'preset', preset: 'claude_code' },
|
|
39
37
|
hooks: {
|
|
@@ -87,11 +85,7 @@ export async function capabilities(accountId, cwd) {
|
|
|
87
85
|
};
|
|
88
86
|
}
|
|
89
87
|
export async function accounts() {
|
|
90
|
-
|
|
91
|
-
{ id: DEFAULT_ACCOUNT, name: 'Claude login' },
|
|
92
|
-
...storedAccounts().map(({ id, name }) => ({ id, name })),
|
|
93
|
-
];
|
|
94
|
-
return Promise.all(all.map(async (account) => {
|
|
88
|
+
return Promise.all(storedAccounts().map(async (account) => {
|
|
95
89
|
try {
|
|
96
90
|
const info = (await initialization(account.id, os.homedir())).account;
|
|
97
91
|
return {
|
|
@@ -113,22 +107,20 @@ export async function accounts() {
|
|
|
113
107
|
}
|
|
114
108
|
}));
|
|
115
109
|
}
|
|
116
|
-
export function addAccount(name,
|
|
117
|
-
if (name.trim() === '')
|
|
118
|
-
throw new Error('Give the account a name');
|
|
119
|
-
if (!token.trim().startsWith('sk-ant-'))
|
|
120
|
-
throw new Error('Paste the token printed by `claude setup-token`');
|
|
110
|
+
export function addAccount(name, configDir) {
|
|
121
111
|
saveAccounts([
|
|
122
112
|
...storedAccounts(),
|
|
123
|
-
{ id: randomUUID(), name
|
|
113
|
+
{ id: randomUUID(), ...validAccount(name, configDir) },
|
|
124
114
|
]);
|
|
125
115
|
}
|
|
116
|
+
export function updateAccount(id, name, configDir) {
|
|
117
|
+
const account = validAccount(name, configDir);
|
|
118
|
+
saveAccounts(storedAccounts().map((item) => (item.id === id ? { id, ...account } : item)));
|
|
119
|
+
forget(id);
|
|
120
|
+
}
|
|
126
121
|
export function removeAccount(id) {
|
|
127
122
|
saveAccounts(storedAccounts().filter((item) => item.id !== id));
|
|
128
|
-
|
|
129
|
-
if (key.startsWith(`${id}\n`))
|
|
130
|
-
probes.delete(key);
|
|
131
|
-
limits.delete(id);
|
|
123
|
+
forget(id);
|
|
132
124
|
}
|
|
133
125
|
export function recordLimit(accountId, info) {
|
|
134
126
|
const current = limits.get(accountId) ?? new Map();
|
|
@@ -154,6 +146,25 @@ export function recordLimit(accountId, info) {
|
|
|
154
146
|
limits.set(accountId, current);
|
|
155
147
|
return accountLimits(accountId);
|
|
156
148
|
}
|
|
149
|
+
function validAccount(name, configDir) {
|
|
150
|
+
if (name.trim() === '')
|
|
151
|
+
throw new Error('Give the account a name');
|
|
152
|
+
const dir = configDir.trim();
|
|
153
|
+
if (dir === '~' || dir.startsWith('~/'))
|
|
154
|
+
return {
|
|
155
|
+
name: name.trim(),
|
|
156
|
+
configDir: path.join(os.homedir(), dir.slice(1)),
|
|
157
|
+
};
|
|
158
|
+
if (path.isAbsolute(dir))
|
|
159
|
+
return { name: name.trim(), configDir: dir };
|
|
160
|
+
throw new Error('Use an absolute config directory or one starting with ~/');
|
|
161
|
+
}
|
|
162
|
+
function forget(accountId) {
|
|
163
|
+
for (const key of probes.keys())
|
|
164
|
+
if (key.startsWith(`${accountId}\n`))
|
|
165
|
+
probes.delete(key);
|
|
166
|
+
limits.delete(accountId);
|
|
167
|
+
}
|
|
157
168
|
function accountLimits(accountId) {
|
|
158
169
|
return [...(limits.get(accountId)?.values() ?? [])];
|
|
159
170
|
}
|
|
@@ -8,7 +8,7 @@ const configFile = path.join(home, 'config.json');
|
|
|
8
8
|
export const defaults = {
|
|
9
9
|
theme: schemes[0].id,
|
|
10
10
|
composer: {
|
|
11
|
-
accountId:
|
|
11
|
+
accountId: null,
|
|
12
12
|
model: 'haiku',
|
|
13
13
|
effort: 'low',
|
|
14
14
|
permissionMode: 'bypassPermissions',
|
|
@@ -56,6 +56,7 @@ const choices = {
|
|
|
56
56
|
'terminal.behavior.optionAsMeta': ['off', 'left', 'right', 'both'],
|
|
57
57
|
};
|
|
58
58
|
const nullable = [
|
|
59
|
+
'composer.accountId',
|
|
59
60
|
'composer.model',
|
|
60
61
|
'composer.effort',
|
|
61
62
|
'composer.permissionMode',
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { mkdirSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
+
import { home } from './storage.js';
|
|
5
|
+
mkdirSync(home, { recursive: true });
|
|
6
|
+
export const db = new DatabaseSync(path.join(home, 'offsite.db'));
|
|
7
|
+
db.exec(`
|
|
8
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
9
|
+
path TEXT PRIMARY KEY,
|
|
10
|
+
name TEXT NOT NULL,
|
|
11
|
+
logo TEXT
|
|
12
|
+
)
|
|
13
|
+
`);
|
|
@@ -4,9 +4,8 @@ import path from 'node:path';
|
|
|
4
4
|
import { getSessionMessages, getSubagentMessages, } from '@anthropic-ai/claude-agent-sdk';
|
|
5
5
|
import { contextTokens, toMessage } from './content.js';
|
|
6
6
|
import { runs } from './run.js';
|
|
7
|
-
const projectsDir = path.join(
|
|
8
|
-
async function
|
|
9
|
-
const times = new Map();
|
|
7
|
+
const projectsDir = path.join(os.homedir(), '.claude', 'projects');
|
|
8
|
+
async function sessionEntries(sessionId) {
|
|
10
9
|
for (const dir of await readdir(projectsDir)) {
|
|
11
10
|
let text;
|
|
12
11
|
try {
|
|
@@ -17,17 +16,31 @@ async function messageTimes(sessionId) {
|
|
|
17
16
|
continue;
|
|
18
17
|
throw error;
|
|
19
18
|
}
|
|
20
|
-
|
|
19
|
+
return text.split('\n').flatMap((line) => {
|
|
21
20
|
const entry = parseLine(line);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
return times;
|
|
21
|
+
return entry !== null && typeof entry.type === 'string'
|
|
22
|
+
? [{ ...entry, type: entry.type }]
|
|
23
|
+
: [];
|
|
24
|
+
});
|
|
28
25
|
}
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
function messageTimes(entries) {
|
|
29
|
+
const times = new Map();
|
|
30
|
+
for (const entry of entries)
|
|
31
|
+
if (typeof entry.uuid === 'string' && typeof entry.timestamp === 'string')
|
|
32
|
+
times.set(entry.uuid, Date.parse(entry.timestamp));
|
|
29
33
|
return times;
|
|
30
34
|
}
|
|
35
|
+
function compactedBefore(entries, uuid) {
|
|
36
|
+
if (uuid === undefined)
|
|
37
|
+
return null;
|
|
38
|
+
const start = entries.findIndex((entry) => entry.uuid === uuid);
|
|
39
|
+
const index = entries.findLastIndex((entry, position) => position < start &&
|
|
40
|
+
entry.type === 'system' &&
|
|
41
|
+
entry.subtype === 'compact_boundary');
|
|
42
|
+
return index < 0 ? null : index;
|
|
43
|
+
}
|
|
31
44
|
function parseLine(line) {
|
|
32
45
|
try {
|
|
33
46
|
return JSON.parse(line);
|
|
@@ -36,19 +49,22 @@ function parseLine(line) {
|
|
|
36
49
|
return null;
|
|
37
50
|
}
|
|
38
51
|
}
|
|
52
|
+
function mainMessages(disk, times) {
|
|
53
|
+
return disk.flatMap((item) => item.type === 'system' || item.parent_tool_use_id !== null
|
|
54
|
+
? []
|
|
55
|
+
: [toMessage(item.type, item, times.get(item.uuid) ?? null)]);
|
|
56
|
+
}
|
|
39
57
|
export async function history(sessionId, cwd) {
|
|
40
58
|
const run = runs.get(sessionId);
|
|
41
|
-
const [disk,
|
|
59
|
+
const [disk, entries] = await Promise.all([
|
|
42
60
|
getSessionMessages(sessionId, { dir: cwd }),
|
|
43
|
-
|
|
61
|
+
sessionEntries(sessionId),
|
|
44
62
|
]);
|
|
45
63
|
const resumeAt = run?.resumeAt ?? null;
|
|
46
64
|
const kept = resumeAt === null
|
|
47
65
|
? disk
|
|
48
66
|
: disk.slice(0, disk.findIndex((item) => item.uuid === resumeAt) + 1);
|
|
49
|
-
const messages = kept
|
|
50
|
-
? []
|
|
51
|
-
: [toMessage(item.type, item, times.get(item.uuid) ?? null)]);
|
|
67
|
+
const messages = mainMessages(kept, messageTimes(entries));
|
|
52
68
|
messages.push(...(await subagentMessages(sessionId, cwd, messages)));
|
|
53
69
|
const seen = new Set(messages.map((item) => item.uuid));
|
|
54
70
|
const last = kept.findLast((item) => item.type === 'assistant' && item.parent_tool_use_id === null);
|
|
@@ -67,8 +83,26 @@ export async function history(sessionId, cwd) {
|
|
|
67
83
|
(tokens === null
|
|
68
84
|
? null
|
|
69
85
|
: { tokens, window: null, model: null, categories: [], sections: [] }),
|
|
86
|
+
before: compactedBefore(entries, disk[0]?.uuid),
|
|
70
87
|
};
|
|
71
88
|
}
|
|
89
|
+
export async function earlier(sessionId, cwd, before) {
|
|
90
|
+
const entries = await sessionEntries(sessionId);
|
|
91
|
+
const kept = entries.slice(0, before);
|
|
92
|
+
const disk = await getSessionMessages(sessionId, {
|
|
93
|
+
sessionStore: { append: () => Promise.resolve(), load: async () => kept },
|
|
94
|
+
});
|
|
95
|
+
const messages = mainMessages(disk, messageTimes(entries));
|
|
96
|
+
messages.push(...(await subagentMessages(sessionId, cwd, messages)));
|
|
97
|
+
messages.push({
|
|
98
|
+
type: 'notice',
|
|
99
|
+
uuid: `compacted:${before}`,
|
|
100
|
+
time: null,
|
|
101
|
+
text: 'Conversation compacted',
|
|
102
|
+
isError: false,
|
|
103
|
+
});
|
|
104
|
+
return { messages, before: compactedBefore(entries, disk[0]?.uuid) };
|
|
105
|
+
}
|
|
72
106
|
async function subagentMessages(sessionId, cwd, messages) {
|
|
73
107
|
const agents = new Set(messages.flatMap((message) => message.type === 'assistant'
|
|
74
108
|
? message.content.flatMap((block) => block.type === 'tool_use' &&
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { db } from './db.js';
|
|
5
|
+
import { broadcast } from './hub.js';
|
|
6
|
+
const LOGO_TYPES = [
|
|
7
|
+
'image/png',
|
|
8
|
+
'image/jpeg',
|
|
9
|
+
'image/gif',
|
|
10
|
+
'image/webp',
|
|
11
|
+
'image/svg+xml',
|
|
12
|
+
'image/x-icon',
|
|
13
|
+
'image/vnd.microsoft.icon',
|
|
14
|
+
];
|
|
15
|
+
const LOGO_LIMIT = 512 * 1024;
|
|
16
|
+
export function projects() {
|
|
17
|
+
return db
|
|
18
|
+
.prepare('SELECT path, name, logo FROM projects')
|
|
19
|
+
.all()
|
|
20
|
+
.map(toProject);
|
|
21
|
+
}
|
|
22
|
+
export async function addProject(input) {
|
|
23
|
+
const folder = path.resolve(expandHome(input.trim()));
|
|
24
|
+
if (!(await stat(folder)).isDirectory())
|
|
25
|
+
throw new Error(`${folder} is not a folder`);
|
|
26
|
+
db.prepare('INSERT OR IGNORE INTO projects (path, name, logo) VALUES (?, ?, NULL)').run(folder, path.basename(folder) || folder);
|
|
27
|
+
publish();
|
|
28
|
+
const project = projects().find((item) => item.path === folder);
|
|
29
|
+
if (project === undefined)
|
|
30
|
+
throw new Error(`Could not add ${folder}`);
|
|
31
|
+
return project;
|
|
32
|
+
}
|
|
33
|
+
export function updateProject(folder, patch) {
|
|
34
|
+
if (patch.name !== undefined) {
|
|
35
|
+
const name = patch.name.trim();
|
|
36
|
+
if (name === '')
|
|
37
|
+
throw new Error('Project name cannot be empty');
|
|
38
|
+
db.prepare('UPDATE projects SET name = ? WHERE path = ?').run(name, folder);
|
|
39
|
+
}
|
|
40
|
+
if (patch.logo !== undefined) {
|
|
41
|
+
if (patch.logo !== null)
|
|
42
|
+
checkLogo(patch.logo);
|
|
43
|
+
db.prepare('UPDATE projects SET logo = ? WHERE path = ?').run(patch.logo, folder);
|
|
44
|
+
}
|
|
45
|
+
publish();
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
export function removeProject(folder) {
|
|
49
|
+
db.prepare('DELETE FROM projects WHERE path = ?').run(folder);
|
|
50
|
+
publish();
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
export async function directories(input) {
|
|
54
|
+
const folder = path.resolve(expandHome(input.trim()));
|
|
55
|
+
const entries = await readdir(folder, { withFileTypes: true });
|
|
56
|
+
const parent = path.dirname(folder);
|
|
57
|
+
return {
|
|
58
|
+
path: folder,
|
|
59
|
+
parent: parent === folder ? null : parent,
|
|
60
|
+
directories: entries
|
|
61
|
+
.filter((entry) => entry.isDirectory())
|
|
62
|
+
.map((entry) => ({
|
|
63
|
+
name: entry.name,
|
|
64
|
+
path: path.join(folder, entry.name),
|
|
65
|
+
}))
|
|
66
|
+
.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function publish() {
|
|
70
|
+
broadcast({ type: 'projects', projects: projects() });
|
|
71
|
+
}
|
|
72
|
+
function toProject(row) {
|
|
73
|
+
if (typeof row.path !== 'string' ||
|
|
74
|
+
typeof row.name !== 'string' ||
|
|
75
|
+
(typeof row.logo !== 'string' && row.logo !== null))
|
|
76
|
+
throw new Error('The projects table has an unexpected row');
|
|
77
|
+
return { path: row.path, name: row.name, logo: row.logo };
|
|
78
|
+
}
|
|
79
|
+
function checkLogo(logo) {
|
|
80
|
+
const type = /^data:([^;,]+);base64,/.exec(logo)?.[1];
|
|
81
|
+
if (type === undefined || !LOGO_TYPES.includes(type))
|
|
82
|
+
throw new Error('Use a PNG, JPEG, GIF, WebP, SVG or ICO image');
|
|
83
|
+
if (logo.length > LOGO_LIMIT)
|
|
84
|
+
throw new Error('Use an image smaller than 384 KB');
|
|
85
|
+
}
|
|
86
|
+
function expandHome(input) {
|
|
87
|
+
if (input === '~')
|
|
88
|
+
return os.homedir();
|
|
89
|
+
if (input.startsWith('~/'))
|
|
90
|
+
return path.join(os.homedir(), input.slice(2));
|
|
91
|
+
return input;
|
|
92
|
+
}
|
package/apps/server/dist/run.js
CHANGED
|
@@ -235,13 +235,17 @@ export class Run {
|
|
|
235
235
|
text: message.event.delta.text,
|
|
236
236
|
});
|
|
237
237
|
return;
|
|
238
|
-
case 'rate_limit_event':
|
|
238
|
+
case 'rate_limit_event': {
|
|
239
|
+
const accountId = this.settings.accountId;
|
|
240
|
+
if (accountId === null)
|
|
241
|
+
throw new Error('Rate limit event for a run without an account');
|
|
239
242
|
broadcast({
|
|
240
243
|
type: 'limits',
|
|
241
|
-
accountId
|
|
242
|
-
limits: recordLimit(
|
|
244
|
+
accountId,
|
|
245
|
+
limits: recordLimit(accountId, message.rate_limit_info),
|
|
243
246
|
});
|
|
244
247
|
return;
|
|
248
|
+
}
|
|
245
249
|
case 'result':
|
|
246
250
|
if (message.subtype !== 'success')
|
|
247
251
|
this.add(notice(message.errors.join('\n') || message.subtype));
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { deleteSession, forkSession, getSessionMessages, listSessions, renameSession, } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
+
import { projects } from './projects.js';
|
|
2
3
|
import { runs } from './run.js';
|
|
3
4
|
import { readJson, writeJson } from './storage.js';
|
|
4
5
|
export async function sessions() {
|
|
5
|
-
const items = await listSessions({ includeProgrammatic: false });
|
|
6
6
|
const marks = readMarks();
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
const lists = await Promise.all(projects().map(async (project) => (await listSessions({
|
|
8
|
+
dir: project.path,
|
|
9
|
+
includeWorktrees: false,
|
|
10
|
+
includeProgrammatic: false,
|
|
11
|
+
})).map((item) => ({
|
|
12
|
+
id: item.sessionId,
|
|
13
|
+
title: item.summary,
|
|
14
|
+
cwd: project.path,
|
|
15
|
+
branch: item.gitBranch ?? null,
|
|
16
|
+
updatedAt: item.lastModified,
|
|
17
|
+
pinned: marks.pinned.includes(item.sessionId),
|
|
18
|
+
archived: marks.archived.includes(item.sessionId),
|
|
19
|
+
}))));
|
|
20
|
+
return lists.flat();
|
|
20
21
|
}
|
|
21
22
|
export async function updateSession(id, patch) {
|
|
22
23
|
if (patch.title !== undefined)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { accounts, addAccount, capabilities, removeAccount } from './claude.js';
|
|
1
|
+
import { accounts, addAccount, capabilities, removeAccount, updateAccount, } from './claude.js';
|
|
2
2
|
import { configInfo, readConfig, saveConfig } from './config.js';
|
|
3
3
|
import { listFiles, saveUpload } from './files.js';
|
|
4
|
-
import { folders, saveFolders } from './folders.js';
|
|
5
4
|
import { commit, createPullRequest, gitStatus, push, suggestCommitMessage, workingDiff, } from './git.js';
|
|
5
|
+
import { earlier } from './history.js';
|
|
6
6
|
import { clients } from './hub.js';
|
|
7
|
+
import { addProject, directories, projects, removeProject, updateProject, } from './projects.js';
|
|
7
8
|
import { pushKey, subscribe, unsubscribe } from './push.js';
|
|
8
9
|
import { activity, runs } from './run.js';
|
|
9
10
|
import { open, rewind, send } from './runs.js';
|
|
@@ -14,7 +15,11 @@ const handlers = {
|
|
|
14
15
|
ping: () => null,
|
|
15
16
|
'config.get': () => configInfo(),
|
|
16
17
|
'config.save': (params) => saveConfig(params),
|
|
17
|
-
'
|
|
18
|
+
'projects.list': () => projects(),
|
|
19
|
+
'projects.add': (params) => addProject(params.path),
|
|
20
|
+
'projects.update': (params) => updateProject(params.path, params.patch),
|
|
21
|
+
'projects.remove': (params) => removeProject(params.path),
|
|
22
|
+
'directories.list': (params) => directories(params.path),
|
|
18
23
|
'sessions.list': () => sessions(),
|
|
19
24
|
'sessions.update': async (params) => {
|
|
20
25
|
await updateSession(params.id, params.patch);
|
|
@@ -28,6 +33,7 @@ const handlers = {
|
|
|
28
33
|
await open(client, params.sessionId, params.cwd);
|
|
29
34
|
return null;
|
|
30
35
|
},
|
|
36
|
+
'sessions.earlier': (params) => earlier(params.sessionId, params.cwd, params.before),
|
|
31
37
|
'sessions.send': async (params, client) => {
|
|
32
38
|
await send(client, params);
|
|
33
39
|
return null;
|
|
@@ -54,7 +60,11 @@ const handlers = {
|
|
|
54
60
|
'sessions.fork': (params) => fork(params.sessionId, params.cwd, params.messageId),
|
|
55
61
|
'accounts.list': () => accounts(),
|
|
56
62
|
'accounts.add': (params) => {
|
|
57
|
-
addAccount(params.name, params.
|
|
63
|
+
addAccount(params.name, params.configDir);
|
|
64
|
+
return accounts();
|
|
65
|
+
},
|
|
66
|
+
'accounts.update': (params) => {
|
|
67
|
+
updateAccount(params.id, params.name, params.configDir);
|
|
58
68
|
return accounts();
|
|
59
69
|
},
|
|
60
70
|
'accounts.remove': (params) => {
|
|
@@ -98,7 +108,7 @@ export function connectClient(socket) {
|
|
|
98
108
|
clients.add(client);
|
|
99
109
|
client.send({ type: 'activity', activity: activity() });
|
|
100
110
|
client.send({ type: 'config', config: readConfig() });
|
|
101
|
-
client.send({ type: '
|
|
111
|
+
client.send({ type: 'projects', projects: projects() });
|
|
102
112
|
socket.on('message', (data, isBinary) => {
|
|
103
113
|
client.heardAt = Date.now();
|
|
104
114
|
if (isBinary) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index-CN9uEzWa.js";import{t}from"./html-CRYhxgas.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.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"},{"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"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"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"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"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":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\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*)?`)","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":"#typeArguments"}]},{"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":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"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":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"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":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular 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":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
|
|
1
|
+
import{t as e}from"./index-BiLbXfDN.js";import{t}from"./html-Bz91Luf0.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.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"},{"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"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"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"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"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":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\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*)?`)","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":"#typeArguments"}]},{"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":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"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":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"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":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular 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":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
|