@macintacos/caret 1.0.0 → 1.0.1

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.
Files changed (93) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +43 -81
  3. package/bin/caret-launcher +1 -1
  4. package/dist/cli.js +173 -86
  5. package/opencode/caret.plugin.ts +1 -1
  6. package/package.json +1 -1
  7. package/ui/dist/assets/{angular-html-BrP7X_fT.js → angular-html-CNIx69MF.js} +1 -1
  8. package/ui/dist/assets/{angular-ts-CWSXPJ8_.js → angular-ts-B6ob15kD.js} +1 -1
  9. package/ui/dist/assets/{apl-DcDu9VfL.js → apl-BzQg5wKE.js} +1 -1
  10. package/ui/dist/assets/{astro-ZWhUFE02.js → astro-DQ6PiTON.js} +1 -1
  11. package/ui/dist/assets/{blade-Bnfid1aX.js → blade-DdGMUzbN.js} +1 -1
  12. package/ui/dist/assets/{c-DGhlaWFa.js → c-DhrAH2di.js} +1 -1
  13. package/ui/dist/assets/{chapel-B80nA-Wv.js → chapel-BIJH6n90.js} +1 -1
  14. package/ui/dist/assets/{cobol-BxPmMgGq.js → cobol-CR-dFJ1T.js} +1 -1
  15. package/ui/dist/assets/{coffee-qvFLvdPC.js → coffee-DWT27RO5.js} +1 -1
  16. package/ui/dist/assets/{cpp-BGBu9Yb6.js → cpp-CuONTEvg.js} +1 -1
  17. package/ui/dist/assets/{crystal-CV45eR73.js → crystal-Bvc0l-OM.js} +1 -1
  18. package/ui/dist/assets/{css-CBPwQP3-.js → css-BYejQHVV.js} +1 -1
  19. package/ui/dist/assets/{dist-CpcSX-YP.js → dist-BbAsmjOe.js} +1 -1
  20. package/ui/dist/assets/{dist-Dfm7Znx4.js → dist-BgZhLp84.js} +1 -1
  21. package/ui/dist/assets/{dist-Dj96YS5k.js → dist-Bn_ExXCc.js} +1 -1
  22. package/ui/dist/assets/{dist-418qtW5O.js → dist-C-FIXuZc.js} +1 -1
  23. package/ui/dist/assets/{dist-1bUsa9So.js → dist-CCPLuvXB.js} +1 -1
  24. package/ui/dist/assets/{dist-DWzXdmaf.js → dist-COogZ9jg.js} +1 -1
  25. package/ui/dist/assets/{dist-Dz8bokki.js → dist-Cuerw0_4.js} +1 -1
  26. package/ui/dist/assets/{dist-cV3QBg-W.js → dist-D-lJ6tIg.js} +1 -1
  27. package/ui/dist/assets/{dist-BafAgSat.js → dist-DV7t-p4N.js} +1 -1
  28. package/ui/dist/assets/{dist-Cj-JdNZd.js → dist-RKZBj-sl.js} +1 -1
  29. package/ui/dist/assets/{edge-Co6ItTYI.js → edge-B_-8Eolr.js} +1 -1
  30. package/ui/dist/assets/{elixir-0YZEZ0gv.js → elixir-CAhwbI74.js} +1 -1
  31. package/ui/dist/assets/{elm-BkRJOygl.js → elm-yg-VSwEl.js} +1 -1
  32. package/ui/dist/assets/{erb-BI2P49U3.js → erb-CIMOpWGO.js} +1 -1
  33. package/ui/dist/assets/{git-rebase-Bq5iIXzt.js → git-rebase-DI22snkc.js} +1 -1
  34. package/ui/dist/assets/{glimmer-js-BbOUbDIt.js → glimmer-js-CZHZNAs-.js} +1 -1
  35. package/ui/dist/assets/{glimmer-ts-CNnsk0yJ.js → glimmer-ts-C2rq-JGq.js} +1 -1
  36. package/ui/dist/assets/{glsl-BGnMm0dJ.js → glsl-ByXN6hIN.js} +1 -1
  37. package/ui/dist/assets/{graphql-7Z7p0nC9.js → graphql-DiiJwLqR.js} +1 -1
  38. package/ui/dist/assets/{hack-DqHfN4B0.js → hack-hQSSm1D1.js} +1 -1
  39. package/ui/dist/assets/{haml-3nZzM1j8.js → haml-cf9hcOgw.js} +1 -1
  40. package/ui/dist/assets/{handlebars-D76GLv5_.js → handlebars-B3tg892p.js} +1 -1
  41. package/ui/dist/assets/{html-KRo6nO5U.js → html-CkIr2qlC.js} +1 -1
  42. package/ui/dist/assets/{html-derivative-45dsHZ7G.js → html-derivative-U1EOyk5J.js} +1 -1
  43. package/ui/dist/assets/{http-Cd6yAfd3.js → http-ek0-hDT8.js} +1 -1
  44. package/ui/dist/assets/{hurl-DMRd-22O.js → hurl-DbN52Bpk.js} +1 -1
  45. package/ui/dist/assets/{index-DqZ7qZxG.js → index-uBaTjG1U.js} +211 -211
  46. package/ui/dist/assets/{java-C5BRRLzP.js → java-DXEu0FGs.js} +1 -1
  47. package/ui/dist/assets/{javascript-BEwOFxBm.js → javascript-Bi95ibpN.js} +1 -1
  48. package/ui/dist/assets/{jinja-DC6SxQM2.js → jinja-BcKnkqjY.js} +1 -1
  49. package/ui/dist/assets/{jison-BpM_G12u.js → jison-CFaHQ730.js} +1 -1
  50. package/ui/dist/assets/{json-DhXVH33S.js → json--ulVurkL.js} +1 -1
  51. package/ui/dist/assets/{jsx-QIa_kGnJ.js → jsx-ZonywBBD.js} +1 -1
  52. package/ui/dist/assets/{julia-BuS1ndKd.js → julia-Bnt3bGqT.js} +1 -1
  53. package/ui/dist/assets/{just-Dms5nmY6.js → just-CBpil8Tz.js} +1 -1
  54. package/ui/dist/assets/{latex-d0FSRalE.js → latex-D-qwKUqq.js} +1 -1
  55. package/ui/dist/assets/{liquid-Bq_YWguE.js → liquid-Bu8cI_b1.js} +1 -1
  56. package/ui/dist/assets/{lua-CqusOKbI.js → lua-DO_5Mymc.js} +1 -1
  57. package/ui/dist/assets/{marko-CfvdDxZz.js → marko-DJfs6dcc.js} +1 -1
  58. package/ui/dist/assets/{mdc-B_vZdcRe.js → mdc-CnkU1WJT.js} +1 -1
  59. package/ui/dist/assets/{nginx-YhyPrYEc.js → nginx-B5LxXEA3.js} +1 -1
  60. package/ui/dist/assets/{nim-UGiA-q4U.js → nim-DLTorTuD.js} +1 -1
  61. package/ui/dist/assets/{org-BWLiCWoV.js → org-DnNvsXCU.js} +1 -1
  62. package/ui/dist/assets/{perl-CXeAyAx6.js → perl-Q5Q2rA31.js} +1 -1
  63. package/ui/dist/assets/{php-C0Y5OILf.js → php-S65hjGBt.js} +1 -1
  64. package/ui/dist/assets/{pug-pavIHhZT.js → pug-k-MB8PEo.js} +1 -1
  65. package/ui/dist/assets/{qml-CbMVL_Hw.js → qml-Bf9cLRPv.js} +1 -1
  66. package/ui/dist/assets/{r-VbESC49D.js → r-Cr3hDQkZ.js} +1 -1
  67. package/ui/dist/assets/{razor-B4zmReq6.js → razor-BO5-wpmp.js} +1 -1
  68. package/ui/dist/assets/{regexp-CvzL3gAC.js → regexp-ffQ9gsih.js} +1 -1
  69. package/ui/dist/assets/{rst-B0YBcjx2.js → rst-B4AQC5xj.js} +1 -1
  70. package/ui/dist/assets/{ruby-BFx1yg1l.js → ruby-Dr8kfvLX.js} +1 -1
  71. package/ui/dist/assets/{sas-Bdz0EWxy.js → sas-Kuo2pLeL.js} +1 -1
  72. package/ui/dist/assets/{scss-Ar5qG57q.js → scss-Ci63BQ8y.js} +1 -1
  73. package/ui/dist/assets/{shellscript-BxZn-g_C.js → shellscript-DBh4gnVx.js} +1 -1
  74. package/ui/dist/assets/{shellsession-DdGjCUDJ.js → shellsession-L5KFvHI3.js} +1 -1
  75. package/ui/dist/assets/{soy-DNbG_b-4.js → soy-D6F5ilyd.js} +1 -1
  76. package/ui/dist/assets/{sql-BbO6oYzq.js → sql-xwRblxjL.js} +1 -1
  77. package/ui/dist/assets/{stata-CrT9A-Oi.js → stata-l8sBIGPT.js} +1 -1
  78. package/ui/dist/assets/{surrealql-_tFV7pCn.js → surrealql-DL2sOSzB.js} +1 -1
  79. package/ui/dist/assets/{svelte-ZdvR-T2J.js → svelte-Dp5d2Ja3.js} +1 -1
  80. package/ui/dist/assets/{templ-CpOqX9Rk.js → templ-B3LfgeSM.js} +1 -1
  81. package/ui/dist/assets/{tex-BnYgu1Tm.js → tex-CfLQjgEV.js} +1 -1
  82. package/ui/dist/assets/{ts-tags-CII1fKoY.js → ts-tags-BCfi6Eh_.js} +1 -1
  83. package/ui/dist/assets/{tsx-CPIX6Zti.js → tsx-BXhT7ita.js} +1 -1
  84. package/ui/dist/assets/{twig-Cpr1_Fdx.js → twig-t6tdMpRg.js} +1 -1
  85. package/ui/dist/assets/{typescript-CS1A4fih.js → typescript-CFIlDlxn.js} +1 -1
  86. package/ui/dist/assets/{typst-BEc_7GFB.js → typst-CVQ9ief2.js} +1 -1
  87. package/ui/dist/assets/{vue-DLe2p-nw.js → vue-D92U7PL6.js} +1 -1
  88. package/ui/dist/assets/{vue-html-CBsH80UM.js → vue-html-B_-4d7cG.js} +1 -1
  89. package/ui/dist/assets/{vue-vine-C6KcK89Z.js → vue-vine-LaG8znAe.js} +1 -1
  90. package/ui/dist/assets/{xml-CMmb8ycU.js → xml-DgAE0jfV.js} +1 -1
  91. package/ui/dist/assets/{xsl-vCAAt3o3.js → xsl-DkD8aIzS.js} +1 -1
  92. package/ui/dist/assets/{yaml-Be7JvL54.js → yaml-CEG92fN8.js} +1 -1
  93. package/ui/dist/index.html +1 -1
package/dist/cli.js CHANGED
@@ -22417,7 +22417,7 @@ var package_default;
22417
22417
  var init_package = __esm(() => {
22418
22418
  package_default = {
22419
22419
  name: "@macintacos/caret",
22420
- version: "1.0.0",
22420
+ version: "1.0.1",
22421
22421
  license: "MIT",
22422
22422
  type: "module",
22423
22423
  description: "A Claude Code plugin that replaces the terminal plan-approval prompt with a local web UI for inline review, annotation, and approval.",
@@ -27330,6 +27330,7 @@ function freeze(s) {
27330
27330
  Object.freeze(s.daemon);
27331
27331
  Object.freeze(s.review);
27332
27332
  Object.freeze(s.opencode);
27333
+ Object.freeze(s.updates);
27333
27334
  Object.freeze(s.dev.notify);
27334
27335
  Object.freeze(s.dev);
27335
27336
  return Object.freeze(s);
@@ -27514,10 +27515,13 @@ var init_settings = __esm(() => {
27514
27515
  opencode: exports_external.object({
27515
27516
  plans_dir: exports_external.string().min(1).optional()
27516
27517
  }).prefault({}),
27518
+ updates: exports_external.object({
27519
+ check: exports_external.boolean().default(true)
27520
+ }).prefault({}),
27517
27521
  dev: Dev
27518
27522
  });
27519
27523
  DEFAULTS = freeze(SettingsSchema.parse({}));
27520
- SETTINGS_TABLES = ["logging", "daemon", "review"];
27524
+ SETTINGS_TABLES = ["logging", "daemon", "review", "updates"];
27521
27525
  ENV_VARS = [
27522
27526
  ["CARET_PORT", Port],
27523
27527
  ["CARET_TIMEOUT", TimeoutS],
@@ -46214,14 +46218,15 @@ init_adapters();
46214
46218
  // src/commands/daemon.ts
46215
46219
  init_adapters();
46216
46220
  init_boot();
46217
- init_paths3();
46218
46221
  import { randomUUID } from "crypto";
46219
46222
  import { existsSync as existsSync9 } from "fs";
46220
46223
 
46221
- // src/config/prefs.ts
46224
+ // src/config/config-write.ts
46225
+ init_dist();
46222
46226
  init_paths3();
46223
- import { readFile as readFile3 } from "fs/promises";
46227
+ import { mkdir, readFile as readFile3, stat as stat2 } from "fs/promises";
46224
46228
  import { dirname as dirname4 } from "path";
46229
+ import { isDeepStrictEqual } from "util";
46225
46230
 
46226
46231
  // src/lib/atomic-write.ts
46227
46232
  import { realpath as realpath2, rename, rm, writeFile } from "fs/promises";
@@ -46238,9 +46243,6 @@ async function writeFileAtomic(path, data, opts) {
46238
46243
  }
46239
46244
  }
46240
46245
 
46241
- // src/config/prefs.ts
46242
- init_json_file();
46243
-
46244
46246
  // src/lib/keyed-queue.ts
46245
46247
  function createKeyedQueue(tails = new Map) {
46246
46248
  return {
@@ -46257,48 +46259,138 @@ function createKeyedQueue(tails = new Map) {
46257
46259
  };
46258
46260
  }
46259
46261
 
46260
- // src/config/prefs.ts
46261
- init_log();
46262
- var DEFAULT_SET = { valid: ["default"], fallback: "default" };
46263
- async function readApproveMode(file2 = prefsFile(), log = noopLogger, set2 = DEFAULT_SET) {
46262
+ // src/config/config-write.ts
46263
+ var NEW_FILE_MODE = 420;
46264
+ var TABLE_HEADER = /^\s*\[\[?[^\]]*\]\]?\s*(#[^\n]*)?$/;
46265
+ var UPDATES_HEADER = /^\s*\[updates\]\s*(#[^\n]*)?$/;
46266
+ var CHECK_LINE = /^(\s*check\s*=\s*)(true|false)([\s\S]*)$/;
46267
+ function withoutUpdatesCheck(parsed) {
46268
+ if (typeof parsed !== "object" || parsed === null)
46269
+ return parsed;
46270
+ const out = { ...parsed };
46271
+ const updates = out.updates;
46272
+ if (typeof updates === "object" && updates !== null) {
46273
+ const rest = { ...updates };
46274
+ delete rest.check;
46275
+ if (Object.keys(rest).length === 0)
46276
+ delete out.updates;
46277
+ else
46278
+ out.updates = rest;
46279
+ }
46280
+ return out;
46281
+ }
46282
+ function parseOrNull(text) {
46264
46283
  try {
46265
- const parsed = JSON.parse(await readFile3(file2, "utf-8"));
46266
- if (typeof parsed.approveMode === "string" && set2.valid.includes(parsed.approveMode)) {
46267
- return parsed.approveMode;
46268
- }
46269
- log.debug("prefs", "unrecognized approve mode; using default");
46270
- return set2.fallback;
46271
- } catch (err) {
46272
- const absent = err?.code === "ENOENT";
46273
- log.debug("prefs", absent ? "no prefs file; using default approve mode" : "prefs unreadable; using default approve mode");
46274
- return set2.fallback;
46284
+ return parse(text);
46285
+ } catch {
46286
+ return null;
46275
46287
  }
46276
46288
  }
46277
- async function readUpdatesCheck(file2 = prefsFile()) {
46278
- const parsed = await readJsonFile(file2);
46279
- return parsed?.updates?.check !== false;
46289
+ function withUpdatesCheck(text, check2) {
46290
+ const before = parseOrNull(text);
46291
+ if (before === null)
46292
+ return null;
46293
+ const eol = text.includes(`\r
46294
+ `) ? `\r
46295
+ ` : `
46296
+ `;
46297
+ const lines = text.split(`
46298
+ `);
46299
+ const headerLine = lines.findIndex((l) => UPDATES_HEADER.test(l));
46300
+ let next;
46301
+ if (headerLine === -1) {
46302
+ const separator = text === "" ? "" : text.endsWith(`
46303
+ `) ? eol : `${eol}${eol}`;
46304
+ next = `${text}${separator}[updates]${eol}check = ${check2}${eol}`;
46305
+ } else {
46306
+ const nextHeaderIndex = lines.findIndex((l, i) => i > headerLine && TABLE_HEADER.test(l));
46307
+ const tableEnd = nextHeaderIndex === -1 ? lines.length : nextHeaderIndex;
46308
+ const checkLineIndex = lines.findIndex((l, i) => i > headerLine && i < tableEnd && CHECK_LINE.test(l));
46309
+ if (checkLineIndex === -1) {
46310
+ lines.splice(headerLine + 1, 0, `check = ${check2}${eol === `\r
46311
+ ` ? "\r" : ""}`);
46312
+ } else {
46313
+ lines[checkLineIndex] = lines[checkLineIndex].replace(CHECK_LINE, `$1${check2}$3`);
46314
+ }
46315
+ next = lines.join(`
46316
+ `);
46317
+ }
46318
+ const after = parseOrNull(next);
46319
+ if (after === null)
46320
+ return null;
46321
+ if (after.updates?.check !== check2)
46322
+ return null;
46323
+ if (!isDeepStrictEqual(withoutUpdatesCheck(before), withoutUpdatesCheck(after)))
46324
+ return null;
46325
+ return next;
46280
46326
  }
46281
- function createPrefsWriter(file2 = prefsFile()) {
46327
+ function createConfigWriter(file2 = configFile()) {
46282
46328
  const writes = createKeyedQueue();
46283
46329
  return {
46284
- merge(patch) {
46285
- return writes.run(file2, async () => {
46286
- ensureStateDir(dirname4(file2));
46287
- const existing = await readJsonFile(file2) ?? {};
46288
- await writeFileAtomic(file2, JSON.stringify({ ...existing, ...patch }, null, 2), {
46289
- mode: 384
46290
- });
46330
+ async setUpdatesCheck(check2) {
46331
+ let refusal = null;
46332
+ await writes.run(file2, async () => {
46333
+ const current = await readFile3(file2, "utf-8").catch((e) => e.code === "ENOENT" ? "" : null);
46334
+ if (current === null) {
46335
+ refusal = "unreadable";
46336
+ return;
46337
+ }
46338
+ const next = withUpdatesCheck(current, check2);
46339
+ if (next === null) {
46340
+ refusal = "unverifiable";
46341
+ return;
46342
+ }
46343
+ if (next === current)
46344
+ return;
46345
+ const mode = await stat2(file2).then((s) => s.mode & 511, () => NEW_FILE_MODE);
46346
+ try {
46347
+ await mkdir(dirname4(file2), { recursive: true });
46348
+ await writeFileAtomic(file2, next, { mode });
46349
+ } catch {
46350
+ refusal = "unwritable";
46351
+ }
46291
46352
  });
46353
+ return refusal === null ? { ok: true } : { ok: false, reason: refusal };
46292
46354
  }
46293
46355
  };
46294
46356
  }
46295
- async function writeApproveMode(mode, writer, log = noopLogger, set2 = DEFAULT_SET) {
46296
- if (!set2.valid.includes(mode)) {
46297
- log.warn("prefs", "ignoring invalid approve mode");
46357
+
46358
+ // src/commands/daemon.ts
46359
+ init_paths3();
46360
+
46361
+ // src/config/prefs.ts
46362
+ import { readFile as readFile4, rm as rm2 } from "fs/promises";
46363
+ async function migratePrefsFile(opts) {
46364
+ const { prefs, config: config2, writer, log } = opts;
46365
+ let text;
46366
+ try {
46367
+ text = await readFile4(prefs, "utf-8");
46368
+ } catch (err) {
46369
+ if (err.code !== "ENOENT") {
46370
+ log.warn("settings", "cannot read prefs.json", { prefs });
46371
+ }
46298
46372
  return;
46299
46373
  }
46300
- await writer.merge({ approveMode: mode });
46301
- log.debug("prefs", `approve mode saved: ${mode}`);
46374
+ if (optedOut(text)) {
46375
+ const wrote = await writer.setUpdatesCheck(false);
46376
+ if (!wrote.ok) {
46377
+ log.warn("settings", "cannot move updates.check into config.toml", {
46378
+ config: config2,
46379
+ reason: wrote.reason,
46380
+ fix: "edit it by hand: check = false under an [updates] table header"
46381
+ });
46382
+ return;
46383
+ }
46384
+ log.info("settings", "moved updates.check into config.toml");
46385
+ }
46386
+ await rm2(prefs, { force: true }).catch(() => {});
46387
+ }
46388
+ function optedOut(text) {
46389
+ try {
46390
+ return JSON.parse(text)?.updates?.check === false;
46391
+ } catch {
46392
+ return false;
46393
+ }
46302
46394
  }
46303
46395
 
46304
46396
  // src/commands/daemon.ts
@@ -46343,10 +46435,10 @@ function buildDiagnostics(deps) {
46343
46435
  init_lifecycle();
46344
46436
 
46345
46437
  // src/daemon/server.ts
46346
- init_constants();
46347
- init_paths3();
46348
46438
  import { renameSync as renameSync3, unlinkSync as unlinkSync3, writeFileSync as writeFileSync5 } from "fs";
46349
46439
  import { dirname as dirname6 } from "path";
46440
+ init_constants();
46441
+ init_paths3();
46350
46442
  init_settings();
46351
46443
 
46352
46444
  // src/daemon/guards.ts
@@ -46451,15 +46543,6 @@ function createLiveness(deps) {
46451
46543
  });
46452
46544
  release();
46453
46545
  }
46454
- function detachedWrite(write) {
46455
- writesInFlight++;
46456
- const settled = () => {
46457
- writesInFlight--;
46458
- if (draining)
46459
- setTimeout(maybeReleaseDrain, 0);
46460
- };
46461
- write.then(settled, settled);
46462
- }
46463
46546
  function begin(method) {
46464
46547
  inFlight++;
46465
46548
  const isWrite = !isSafeMethod(method);
@@ -46486,7 +46569,7 @@ function createLiveness(deps) {
46486
46569
  stop();
46487
46570
  deps.release();
46488
46571
  }
46489
- return { arm: refreshIdle, begin, detachedWrite, isDraining: () => draining, drain, stop };
46572
+ return { arm: refreshIdle, begin, isDraining: () => draining, drain, stop };
46490
46573
  }
46491
46574
 
46492
46575
  // src/daemon/schemas.ts
@@ -46507,7 +46590,7 @@ var ResolveBodySchema = exports_external.object({
46507
46590
  feedback: exports_external.string().optional(),
46508
46591
  acceptMode: exports_external.string().optional().catch(undefined)
46509
46592
  }).catch({ behavior: "allow" });
46510
- var PrefsPatchSchema = exports_external.object({ updates: exports_external.object({ check: exports_external.boolean() }).strict().optional() }).strict();
46593
+ var ConfigPatchSchema = exports_external.object({ updates: exports_external.object({ check: exports_external.boolean() }).strict().optional() }).strict();
46511
46594
  var LineAnnotationSchema = exports_external.object({
46512
46595
  id: exports_external.string(),
46513
46596
  startLine: exports_external.number().int().min(1),
@@ -46603,7 +46686,7 @@ import { join as join11, relative as relative3, sep as sep4 } from "path";
46603
46686
  // src/plan/excerpt.ts
46604
46687
  init_constants();
46605
46688
  import { readFileSync as readFileSync9 } from "fs";
46606
- import { readdir as readdir3, realpath as realpath3, stat as stat2 } from "fs/promises";
46689
+ import { readdir as readdir3, realpath as realpath3, stat as stat3 } from "fs/promises";
46607
46690
  import { extname, isAbsolute, join as join10, relative as relative2, resolve, sep as sep3 } from "path";
46608
46691
  var EXCERPT_HEAD_LINES = 60;
46609
46692
  var MAX_EXCERPT_BYTES = 10 * 1024 * 1024;
@@ -46663,7 +46746,7 @@ function safeRealpath(path) {
46663
46746
  return realpath3(path).catch(() => null);
46664
46747
  }
46665
46748
  function safeStat(path) {
46666
- return stat2(path).catch(() => null);
46749
+ return stat3(path).catch(() => null);
46667
46750
  }
46668
46751
  async function contained(cwdReal, abs) {
46669
46752
  const real = await safeRealpath(abs);
@@ -48380,7 +48463,7 @@ init_log();
48380
48463
  init_paths3();
48381
48464
  import { createHash as createHash2 } from "crypto";
48382
48465
  import { chmodSync as chmodSync3, existsSync as existsSync8, mkdirSync as mkdirSync2, renameSync as renameSync2, writeFileSync as writeFileSync4 } from "fs";
48383
- import { mkdtemp, rm as rm2 } from "fs/promises";
48466
+ import { mkdtemp, rm as rm3 } from "fs/promises";
48384
48467
  import { tmpdir } from "os";
48385
48468
  import { dirname as dirname5, join as join13 } from "path";
48386
48469
  var RUMDL_VERSION = "0.2.73";
@@ -48442,7 +48525,7 @@ async function downloadRumdl(binPath, asset, fetchImpl = fetch) {
48442
48525
  renameSync2(tmp, binPath);
48443
48526
  return binPath;
48444
48527
  } finally {
48445
- await rm2(work, { recursive: true, force: true });
48528
+ await rm3(work, { recursive: true, force: true });
48446
48529
  }
48447
48530
  }
48448
48531
  var installPinnedRumdl = (binPath) => downloadRumdl(binPath, rumdlAsset());
@@ -48704,7 +48787,7 @@ function resolveOptions(opts) {
48704
48787
  assets: opts.assets,
48705
48788
  onShutdown: opts.onShutdown ?? (() => process.exit(0)),
48706
48789
  routePlan: opts.routePlan ?? routeIncomingPlan,
48707
- prefsPath: opts.prefsPath ?? prefsFile(),
48790
+ configPath: opts.configPath ?? configFile(),
48708
48791
  lockPath: opts.lockPath,
48709
48792
  buildId: opts.buildId,
48710
48793
  assetDigest: opts.assetDigest,
@@ -48737,12 +48820,11 @@ function ifNoneMatchHit(header, etag) {
48737
48820
  }
48738
48821
  function createServer(opts) {
48739
48822
  const cfg = resolveOptions(opts);
48740
- const { store, idle, heartbeat, resident, assets, onShutdown, routePlan, prefsPath, log } = cfg;
48823
+ const { store, idle, heartbeat, resident, assets, onShutdown, routePlan, configPath, log } = cfg;
48741
48824
  const { buildId, assetDigest, commit, stateDir: stateDir2, instanceId } = cfg;
48742
48825
  const { approveVariants, source, lockPath } = cfg;
48743
48826
  const { awaitDecision, resolveDecision, clearDecision, openDecisionCount, unreadDecisionCount } = createDecisions(log);
48744
- const approveModeSet = approveVariants && approveVariants.length > 0 ? { valid: approveVariants.map((v2) => v2.id), fallback: approveVariants[0]?.id ?? "default" } : { valid: ["default"], fallback: "default" };
48745
- const prefsWriter = opts.prefsWriter ?? createPrefsWriter(prefsPath);
48827
+ const configWriter = createConfigWriter(configPath);
48746
48828
  function raceDecision(id, ms) {
48747
48829
  return new Promise((resolve2) => {
48748
48830
  const t = setTimeout(() => resolve2(null), ms);
@@ -48890,22 +48972,28 @@ function createServer(opts) {
48890
48972
  log.debug("ui", "ui presence retracted");
48891
48973
  return new Response(null, { status: 204 });
48892
48974
  }
48893
- async function handlePrefs() {
48894
- const body = {
48895
- approveMode: await readApproveMode(prefsPath, log, approveModeSet)
48896
- };
48897
- return Response.json(body);
48898
- }
48899
- async function handleSetPrefs(req) {
48900
- const parsed = PrefsPatchSchema.safeParse(await req.json().catch(() => null));
48975
+ async function handleSetConfig(req) {
48976
+ const parsed = ConfigPatchSchema.safeParse(await req.json().catch(() => null));
48901
48977
  if (!parsed.success) {
48902
- const error61 = parsed.error.issues[0]?.message ?? "invalid prefs patch";
48903
- log.warn("prefs", "prefs patch rejected", { reason: error61 });
48978
+ const error61 = parsed.error.issues[0]?.message ?? "invalid config patch";
48979
+ log.warn("settings", "config patch rejected", { reason: error61 });
48904
48980
  return Response.json({ error: error61 }, { status: 400 });
48905
48981
  }
48906
- await prefsWriter.merge(parsed.data);
48907
- log.debug("prefs", "prefs saved");
48908
- if (parsed.data.updates?.check === true)
48982
+ const { updates } = parsed.data;
48983
+ if (updates === undefined) {
48984
+ if (Object.keys(parsed.data).length > 0) {
48985
+ return Response.json({ error: "unhandled config patch" }, { status: 400 });
48986
+ }
48987
+ return Response.json({ ok: true });
48988
+ }
48989
+ const { check: check2 } = updates;
48990
+ const wrote = await configWriter.setUpdatesCheck(check2);
48991
+ if (!wrote.ok) {
48992
+ log.warn("settings", "config.toml edit refused", { reason: wrote.reason });
48993
+ return Response.json({ error: "config.toml cannot be edited safely" }, { status: 409 });
48994
+ }
48995
+ log.debug("settings", "config saved");
48996
+ if (check2 === true)
48909
48997
  cfg.onUpdatesEnabled?.();
48910
48998
  return Response.json({ ok: true });
48911
48999
  }
@@ -49080,11 +49168,6 @@ function createServer(opts) {
49080
49168
  });
49081
49169
  if (decision.behavior === "allow") {
49082
49170
  await store.remove(id);
49083
- if (decision.acceptMode !== undefined && approveModeSet.valid.includes(decision.acceptMode)) {
49084
- liveness.detachedWrite(writeApproveMode(decision.acceptMode, prefsWriter, log, approveModeSet).catch(() => {
49085
- log.warn("prefs", "approve mode write failed");
49086
- }));
49087
- }
49088
49171
  }
49089
49172
  if (existing.cmux)
49090
49173
  cfg.markPaneRead(existing.cmux);
@@ -49136,10 +49219,8 @@ function createServer(opts) {
49136
49219
  return handleUiGone();
49137
49220
  if (method === "GET" && path === "/api/reviews")
49138
49221
  return handleListReviews();
49139
- if (method === "GET" && path === "/api/prefs")
49140
- return handlePrefs();
49141
- if (method === "POST" && path === "/api/prefs")
49142
- return handleSetPrefs(req);
49222
+ if (method === "POST" && path === "/api/config")
49223
+ return handleSetConfig(req);
49143
49224
  const route = matchIdRoute(path);
49144
49225
  if (route) {
49145
49226
  const { id, sub } = route;
@@ -49426,7 +49507,7 @@ async function commitsAheadOfTrunk(commit, fetchImpl = fetch) {
49426
49507
 
49427
49508
  // src/review/store.ts
49428
49509
  init_paths3();
49429
- import { readdir as readdir6, readFile as readFile4, stat as stat3 } from "fs/promises";
49510
+ import { readdir as readdir6, readFile as readFile5, stat as stat4 } from "fs/promises";
49430
49511
  import { join as join14 } from "path";
49431
49512
  init_json_file();
49432
49513
  init_log();
@@ -49520,9 +49601,9 @@ function createStore(dir, log = noopLogger) {
49520
49601
  continue;
49521
49602
  const path = join14(dir, file2);
49522
49603
  try {
49523
- if ((await stat3(path)).mtimeMs < now - STALE_AFTER_MS)
49604
+ if ((await stat4(path)).mtimeMs < now - STALE_AFTER_MS)
49524
49605
  continue;
49525
- const review = JSON.parse(await readFile4(path, "utf-8"));
49606
+ const review = JSON.parse(await readFile5(path, "utf-8"));
49526
49607
  if (isUnresolved(review.status)) {
49527
49608
  reviews.set(review.id, review);
49528
49609
  loaded++;
@@ -49546,6 +49627,12 @@ async function runDaemon(opts) {
49546
49627
  const cfg = configFile();
49547
49628
  const boot = svc.current();
49548
49629
  log.info("settings", existsSync9(cfg) ? `settings: reading ${cfg}` : `settings: no config at ${cfg}; using defaults`, { settings: boot });
49630
+ await migratePrefsFile({
49631
+ prefs: prefsFile(),
49632
+ config: cfg,
49633
+ writer: createConfigWriter(cfg),
49634
+ log
49635
+ });
49549
49636
  warnInvalidEnvVars((msg) => log.warn("env", msg));
49550
49637
  const adapter = selectAdapter();
49551
49638
  const install = buildKind();
@@ -49558,7 +49645,7 @@ async function runDaemon(opts) {
49558
49645
  kind: install,
49559
49646
  version: version2,
49560
49647
  commit,
49561
- enabled: () => readUpdatesCheck(),
49648
+ enabled: async () => svc.current().updates.check,
49562
49649
  now: Date.now,
49563
49650
  cache: updateCache,
49564
49651
  npmLatest: publishedCaretVersion,
@@ -49627,7 +49714,7 @@ async function runDaemon(opts) {
49627
49714
  settings: () => settings().current(),
49628
49715
  configPath: cfg
49629
49716
  })),
49630
- updateReport: async () => updateReportFor({ install, version: version2, commit }, updateStatus, await readUpdatesCheck()),
49717
+ updateReport: () => updateReportFor({ install, version: version2, commit }, updateStatus, svc.current().updates.check),
49631
49718
  onUpdatesEnabled: refreshUpdate,
49632
49719
  log
49633
49720
  });
@@ -291,7 +291,7 @@ export function shouldCheckForUpdate(lastCheckMs: number | null, nowMs: number):
291
291
  }
292
292
 
293
293
  /** Absolute path of the throttle file holding the last-check epoch-ms. Lives under
294
- * caret's state dir, beside caret's other small machine-global markers (prefs.json).
294
+ * caret's state dir, beside caret's other small machine-global markers (update-check.json).
295
295
  * The plugin stays self-contained and cannot import src/config/paths.ts, so that
296
296
  * convention is mirrored here by hand. */
297
297
  export function updateCheckCachePath(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macintacos/caret",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "A Claude Code plugin that replaces the terminal plan-approval prompt with a local web UI for inline review, annotation, and approval.",
@@ -1 +1 @@
1
- import{s as e}from"./index-DqZ7qZxG.js";import{t}from"./html-KRo6nO5U.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{s as e}from"./index-uBaTjG1U.js";import{t}from"./html-CkIr2qlC.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};