@macintacos/caret 0.2.0 → 0.4.0
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/.claude-plugin/plugin.json +1 -1
- package/README.md +51 -16
- package/commands/discovery.md +1 -1
- package/dist/cli.js +1608 -200
- package/opencode/caret.plugin.ts +238 -14
- package/opencode/index.ts +8 -0
- package/package.json +18 -2
- package/ui/dist/assets/{angular-html-Qbpn1MTX.js → angular-html-kKPIob-B.js} +1 -1
- package/ui/dist/assets/{angular-ts-DOJ1C-2P.js → angular-ts-CKjP4O1R.js} +1 -1
- package/ui/dist/assets/{apl-Y5-ddbi_.js → apl-DCRQgCPD.js} +1 -1
- package/ui/dist/assets/{astro-CT31GiG6.js → astro-BYbWYON5.js} +1 -1
- package/ui/dist/assets/{blade-DstC0Y7u.js → blade-CwhP_dxJ.js} +1 -1
- package/ui/dist/assets/{c-1h9wmDaJ.js → c-CJEVusFw.js} +1 -1
- package/ui/dist/assets/{cobol-BJsqFKRW.js → cobol-DIBOqviT.js} +1 -1
- package/ui/dist/assets/{coffee-lAZsrYrG.js → coffee-BS7TY60J.js} +1 -1
- package/ui/dist/assets/{cpp-BwPvHcji.js → cpp-D1DVYlIO.js} +1 -1
- package/ui/dist/assets/{crystal-C9nhMRLM.js → crystal-1wNBwJ9X.js} +1 -1
- package/ui/dist/assets/{css-zV5baxCq.js → css-DcRg7BqA.js} +1 -1
- package/ui/dist/assets/{dist-DGObAN16.js → dist-BPvuZVb2.js} +1 -1
- package/ui/dist/assets/{dist-CnTQMJTD.js → dist-BeSPrXBn.js} +1 -1
- package/ui/dist/assets/{dist-C94yZ6__.js → dist-Bm-_E_MU.js} +1 -1
- package/ui/dist/assets/{dist-BcfPYvB6.js → dist-Buh6GXb2.js} +1 -1
- package/ui/dist/assets/{dist-BL3PTdx3.js → dist-C0x7GorT.js} +1 -1
- package/ui/dist/assets/{dist-DTwEdaPW.js → dist-C2049AtS.js} +1 -1
- package/ui/dist/assets/{dist-D5aJA_uS.js → dist-C7ysmu-x.js} +1 -1
- package/ui/dist/assets/{dist-ap3lqXWD.js → dist-CA76eI1h.js} +1 -1
- package/ui/dist/assets/{dist-B2afH7tP.js → dist-CZ-hU0oG.js} +1 -1
- package/ui/dist/assets/{dist-ZPJnos5t.js → dist-Cyz1Y8uV.js} +1 -1
- package/ui/dist/assets/{dist-CWdEcyiK.js → dist-CzDZ2KMv.js} +1 -1
- package/ui/dist/assets/{dist-Ba7qEsX8.js → dist-DBvtZoff.js} +1 -1
- package/ui/dist/assets/{dist-D1Xb0cdg.js → dist-DNG5YE4w.js} +1 -1
- package/ui/dist/assets/{dist-CBdstVS8.js → dist-DPr7mnLy.js} +1 -1
- package/ui/dist/assets/{dist-eJbkdDpi.js → dist-Dhe__fm5.js} +1 -1
- package/ui/dist/assets/{dist-EeYINWCK.js → dist-afCEYO1j.js} +1 -1
- package/ui/dist/assets/{dist-Cuw-4MzZ.js → dist-fAkxRpOI.js} +1 -1
- package/ui/dist/assets/{edge-DtPr1ved.js → edge-DhG5RI3d.js} +1 -1
- package/ui/dist/assets/{elixir-DxdQpZmO.js → elixir-k8JKnHNU.js} +1 -1
- package/ui/dist/assets/{elm-PyFaNcFd.js → elm-BCt58sPl.js} +1 -1
- package/ui/dist/assets/{erb-4d0ztAHA.js → erb-gEaFK19o.js} +1 -1
- package/ui/dist/assets/{git-rebase-CF959Xij.js → git-rebase-PGNnuu_q.js} +1 -1
- package/ui/dist/assets/{glimmer-js-DOoPHQhz.js → glimmer-js-BShMa8kS.js} +1 -1
- package/ui/dist/assets/{glimmer-ts-B-wO1BbM.js → glimmer-ts-BBjvNufU.js} +1 -1
- package/ui/dist/assets/{glsl-DhUIrRGp.js → glsl-CVu5XUh6.js} +1 -1
- package/ui/dist/assets/{graphql-DHm0YGdI.js → graphql-CpSUkXDO.js} +1 -1
- package/ui/dist/assets/{hack-KmeknXZp.js → hack-vYYr_EuM.js} +1 -1
- package/ui/dist/assets/{haml-CqH8UVt6.js → haml-aiyqEFS_.js} +1 -1
- package/ui/dist/assets/{handlebars-xVW6rqZc.js → handlebars-vKdd7ZE6.js} +1 -1
- package/ui/dist/assets/{html-Dm0ku22r.js → html-BSDB9v3Y.js} +1 -1
- package/ui/dist/assets/{html-derivative-ByxJ1rMF.js → html-derivative-V8cBpxuT.js} +1 -1
- package/ui/dist/assets/{http--f7CCugj.js → http-DXSNVmLc.js} +1 -1
- package/ui/dist/assets/{hurl-hbsn4uwO.js → hurl-eKV70JUb.js} +1 -1
- package/ui/dist/assets/index-C3YoPLgV.js +896 -0
- package/ui/dist/assets/index-C6mdkhzF.css +1 -0
- package/ui/dist/assets/{java-DIuHCmu6.js → java-DGolWD2l.js} +1 -1
- package/ui/dist/assets/{javascript-gLvwRdLL.js → javascript-DcKrb1R6.js} +1 -1
- package/ui/dist/assets/{jinja-CllNBGTW.js → jinja-O0MduF1V.js} +1 -1
- package/ui/dist/assets/{jison--nGCTsNX.js → jison-BGBc5HtG.js} +1 -1
- package/ui/dist/assets/{json-C56ryB74.js → json-B-Q47BuG.js} +1 -1
- package/ui/dist/assets/{jsx-4Pk1mTn6.js → jsx-B__N5PZx.js} +1 -1
- package/ui/dist/assets/{julia-C0bepdRl.js → julia-BfiIt3AD.js} +1 -1
- package/ui/dist/assets/{just-DZULmPRj.js → just-CN940-eY.js} +1 -1
- package/ui/dist/assets/{latex-D16Jgu4V.js → latex-wUKEeqEd.js} +1 -1
- package/ui/dist/assets/{liquid-C8coUMRS.js → liquid-D2cnd1Ez.js} +1 -1
- package/ui/dist/assets/{lua-Cf5MxbTu.js → lua-BQiIdljT.js} +1 -1
- package/ui/dist/assets/{marko-Cb70KBLA.js → marko-BCqypbre.js} +1 -1
- package/ui/dist/assets/{mdc-C7MhKLIm.js → mdc-105-eiCZ.js} +1 -1
- package/ui/dist/assets/{nginx-BXtCcpzS.js → nginx-C5dkaLo6.js} +1 -1
- package/ui/dist/assets/{nim-DGCttsC9.js → nim-RJQN31Xa.js} +1 -1
- package/ui/dist/assets/{perl-QjSbxj8-.js → perl-DZkWjug_.js} +1 -1
- package/ui/dist/assets/{php-C3F5od73.js → php-OoKYDxlw.js} +1 -1
- package/ui/dist/assets/{pug-C5_Ubyev.js → pug-CDXuXfau.js} +1 -1
- package/ui/dist/assets/{qml-ClOBZo_4.js → qml-BSj8AX1e.js} +1 -1
- package/ui/dist/assets/{r-CRs34ME2.js → r-DlO747T6.js} +1 -1
- package/ui/dist/assets/{razor-Da5e4iwK.js → razor-D1gVuaXL.js} +1 -1
- package/ui/dist/assets/{regexp-CIgnY5KL.js → regexp-CGVqhulu.js} +1 -1
- package/ui/dist/assets/{rst-B8IBFGFC.js → rst-DtURuW7a.js} +1 -1
- package/ui/dist/assets/{ruby-DCWmsWCN.js → ruby-Bc3kUlvr.js} +1 -1
- package/ui/dist/assets/{sas-C6G9MYN0.js → sas-CFQgZChj.js} +1 -1
- package/ui/dist/assets/{scss-CNd_k2F5.js → scss-B8cq7hhb.js} +1 -1
- package/ui/dist/assets/{shellscript-CwXf9FTq.js → shellscript-C_GHS-ym.js} +1 -1
- package/ui/dist/assets/{shellsession-BJzcxmip.js → shellsession-CTplGpC8.js} +1 -1
- package/ui/dist/assets/{soy-KzIeqqPW.js → soy-BgD_ErAN.js} +1 -1
- package/ui/dist/assets/{sql-DBDZ7dWg.js → sql-BnGnr4ii.js} +1 -1
- package/ui/dist/assets/{stata-SsEZ25vz.js → stata-qCQsVpGc.js} +1 -1
- package/ui/dist/assets/{surrealql-C7tSrOv6.js → surrealql-BqH_LSaF.js} +1 -1
- package/ui/dist/assets/{svelte-BHETRygr.js → svelte-Bu1vTtJQ.js} +1 -1
- package/ui/dist/assets/{templ-mCQ9V1Fb.js → templ-B5jQzs9l.js} +1 -1
- package/ui/dist/assets/{tex-DgKGHlQ1.js → tex-BJ-wZPSn.js} +1 -1
- package/ui/dist/assets/{ts-tags-D-31aQRg.js → ts-tags-DuLm-TvJ.js} +1 -1
- package/ui/dist/assets/{tsx-CKRZAYYe.js → tsx-BPiBkGlY.js} +1 -1
- package/ui/dist/assets/{twig-COT1S6WR.js → twig-CdQnHxAS.js} +1 -1
- package/ui/dist/assets/{typescript-IBoewa4A.js → typescript-Dp_zdoqe.js} +1 -1
- package/ui/dist/assets/{vue-44M0YEZN.js → vue-BmKvlxSZ.js} +1 -1
- package/ui/dist/assets/{vue-html-C1gtv8Ck.js → vue-html-CizabNef.js} +1 -1
- package/ui/dist/assets/{vue-vine-DEW0Tzyn.js → vue-vine-JH1Msnx4.js} +1 -1
- package/ui/dist/assets/{xml-CSnYabNH.js → xml-DW7DdZow.js} +1 -1
- package/ui/dist/assets/{xsl-DrkZvWNe.js → xsl-6zDkD8bR.js} +1 -1
- package/ui/dist/assets/{yaml-D6QWa51n.js → yaml-W1qZ5vOg.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-2kPU99Wr.css +0 -1
- package/ui/dist/assets/index-CIXjaWlx.js +0 -744
package/dist/cli.js
CHANGED
|
@@ -1049,8 +1049,8 @@ var require_quick_format_unescaped = __commonJS((exports, module) => {
|
|
|
1049
1049
|
return '"[Circular]"';
|
|
1050
1050
|
}
|
|
1051
1051
|
}
|
|
1052
|
-
module.exports =
|
|
1053
|
-
function
|
|
1052
|
+
module.exports = format2;
|
|
1053
|
+
function format2(f, args, opts) {
|
|
1054
1054
|
var ss = opts && opts.stringify || tryStringify;
|
|
1055
1055
|
var offset = 1;
|
|
1056
1056
|
if (typeof f === "object" && f !== null) {
|
|
@@ -2507,7 +2507,7 @@ var require_thread_stream = __commonJS((exports, module) => {
|
|
|
2507
2507
|
var require_transport = __commonJS((exports, module) => {
|
|
2508
2508
|
var __dirname = "/Users/juliantorres/GitLocal/Play/caret/node_modules/.bun/pino@10.3.1/node_modules/pino/lib";
|
|
2509
2509
|
var { createRequire } = __require("module");
|
|
2510
|
-
var { existsSync:
|
|
2510
|
+
var { existsSync: existsSync3 } = __require("fs");
|
|
2511
2511
|
var getCallers = require_caller();
|
|
2512
2512
|
var { join: join6, isAbsolute, sep } = __require("path");
|
|
2513
2513
|
var { fileURLToPath: fileURLToPath2 } = __require("url");
|
|
@@ -2581,7 +2581,7 @@ var require_transport = __commonJS((exports, module) => {
|
|
|
2581
2581
|
return false;
|
|
2582
2582
|
}
|
|
2583
2583
|
}
|
|
2584
|
-
return isAbsolute(path) && !
|
|
2584
|
+
return isAbsolute(path) && !existsSync3(path);
|
|
2585
2585
|
}
|
|
2586
2586
|
function stripQuotes(value) {
|
|
2587
2587
|
const first = value[0];
|
|
@@ -2726,7 +2726,7 @@ var require_transport = __commonJS((exports, module) => {
|
|
|
2726
2726
|
// node_modules/.bun/pino@10.3.1/node_modules/pino/lib/tools.js
|
|
2727
2727
|
var require_tools = __commonJS((exports, module) => {
|
|
2728
2728
|
var diagChan = __require("diagnostics_channel");
|
|
2729
|
-
var
|
|
2729
|
+
var format2 = require_quick_format_unescaped();
|
|
2730
2730
|
var { mapHttpRequest, mapHttpResponse } = require_pino_std_serializers();
|
|
2731
2731
|
var SonicBoom = require_sonic_boom();
|
|
2732
2732
|
var onExit = require_on_exit_leak_free();
|
|
@@ -2780,13 +2780,13 @@ var require_tools = __commonJS((exports, module) => {
|
|
|
2780
2780
|
if (typeof this[msgPrefixSym] === "string" && msg !== undefined && msg !== null) {
|
|
2781
2781
|
msg = this[msgPrefixSym] + msg;
|
|
2782
2782
|
}
|
|
2783
|
-
this[writeSym](o,
|
|
2783
|
+
this[writeSym](o, format2(msg, formatParams, this[formatOptsSym]), level);
|
|
2784
2784
|
} else {
|
|
2785
2785
|
let msg = o === undefined ? n.shift() : o;
|
|
2786
2786
|
if (typeof this[msgPrefixSym] === "string" && msg !== undefined && msg !== null) {
|
|
2787
2787
|
msg = this[msgPrefixSym] + msg;
|
|
2788
2788
|
}
|
|
2789
|
-
this[writeSym](null,
|
|
2789
|
+
this[writeSym](null, format2(msg, n, this[formatOptsSym]), level);
|
|
2790
2790
|
}
|
|
2791
2791
|
}
|
|
2792
2792
|
}
|
|
@@ -5650,26 +5650,1343 @@ function fatalDenyLine3(reason) {
|
|
|
5650
5650
|
}
|
|
5651
5651
|
|
|
5652
5652
|
// src/adapters/opencode/install.ts
|
|
5653
|
-
import { existsSync, readFileSync as readFileSync3 } from "fs";
|
|
5653
|
+
import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
|
|
5654
5654
|
import { join as join4 } from "path";
|
|
5655
5655
|
|
|
5656
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
|
|
5657
|
+
function createScanner(text, ignoreTrivia = false) {
|
|
5658
|
+
const len = text.length;
|
|
5659
|
+
let pos = 0, value = "", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;
|
|
5660
|
+
function scanHexDigits(count, exact) {
|
|
5661
|
+
let digits = 0;
|
|
5662
|
+
let value2 = 0;
|
|
5663
|
+
while (digits < count || !exact) {
|
|
5664
|
+
let ch = text.charCodeAt(pos);
|
|
5665
|
+
if (ch >= 48 && ch <= 57) {
|
|
5666
|
+
value2 = value2 * 16 + ch - 48;
|
|
5667
|
+
} else if (ch >= 65 && ch <= 70) {
|
|
5668
|
+
value2 = value2 * 16 + ch - 65 + 10;
|
|
5669
|
+
} else if (ch >= 97 && ch <= 102) {
|
|
5670
|
+
value2 = value2 * 16 + ch - 97 + 10;
|
|
5671
|
+
} else {
|
|
5672
|
+
break;
|
|
5673
|
+
}
|
|
5674
|
+
pos++;
|
|
5675
|
+
digits++;
|
|
5676
|
+
}
|
|
5677
|
+
if (digits < count) {
|
|
5678
|
+
value2 = -1;
|
|
5679
|
+
}
|
|
5680
|
+
return value2;
|
|
5681
|
+
}
|
|
5682
|
+
function setPosition(newPosition) {
|
|
5683
|
+
pos = newPosition;
|
|
5684
|
+
value = "";
|
|
5685
|
+
tokenOffset = 0;
|
|
5686
|
+
token = 16;
|
|
5687
|
+
scanError = 0;
|
|
5688
|
+
}
|
|
5689
|
+
function scanNumber() {
|
|
5690
|
+
let start = pos;
|
|
5691
|
+
if (text.charCodeAt(pos) === 48) {
|
|
5692
|
+
pos++;
|
|
5693
|
+
} else {
|
|
5694
|
+
pos++;
|
|
5695
|
+
while (pos < text.length && isDigit(text.charCodeAt(pos))) {
|
|
5696
|
+
pos++;
|
|
5697
|
+
}
|
|
5698
|
+
}
|
|
5699
|
+
if (pos < text.length && text.charCodeAt(pos) === 46) {
|
|
5700
|
+
pos++;
|
|
5701
|
+
if (pos < text.length && isDigit(text.charCodeAt(pos))) {
|
|
5702
|
+
pos++;
|
|
5703
|
+
while (pos < text.length && isDigit(text.charCodeAt(pos))) {
|
|
5704
|
+
pos++;
|
|
5705
|
+
}
|
|
5706
|
+
} else {
|
|
5707
|
+
scanError = 3;
|
|
5708
|
+
return text.substring(start, pos);
|
|
5709
|
+
}
|
|
5710
|
+
}
|
|
5711
|
+
let end = pos;
|
|
5712
|
+
if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {
|
|
5713
|
+
pos++;
|
|
5714
|
+
if (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) {
|
|
5715
|
+
pos++;
|
|
5716
|
+
}
|
|
5717
|
+
if (pos < text.length && isDigit(text.charCodeAt(pos))) {
|
|
5718
|
+
pos++;
|
|
5719
|
+
while (pos < text.length && isDigit(text.charCodeAt(pos))) {
|
|
5720
|
+
pos++;
|
|
5721
|
+
}
|
|
5722
|
+
end = pos;
|
|
5723
|
+
} else {
|
|
5724
|
+
scanError = 3;
|
|
5725
|
+
}
|
|
5726
|
+
}
|
|
5727
|
+
return text.substring(start, end);
|
|
5728
|
+
}
|
|
5729
|
+
function scanString() {
|
|
5730
|
+
let result = "", start = pos;
|
|
5731
|
+
while (true) {
|
|
5732
|
+
if (pos >= len) {
|
|
5733
|
+
result += text.substring(start, pos);
|
|
5734
|
+
scanError = 2;
|
|
5735
|
+
break;
|
|
5736
|
+
}
|
|
5737
|
+
const ch = text.charCodeAt(pos);
|
|
5738
|
+
if (ch === 34) {
|
|
5739
|
+
result += text.substring(start, pos);
|
|
5740
|
+
pos++;
|
|
5741
|
+
break;
|
|
5742
|
+
}
|
|
5743
|
+
if (ch === 92) {
|
|
5744
|
+
result += text.substring(start, pos);
|
|
5745
|
+
pos++;
|
|
5746
|
+
if (pos >= len) {
|
|
5747
|
+
scanError = 2;
|
|
5748
|
+
break;
|
|
5749
|
+
}
|
|
5750
|
+
const ch2 = text.charCodeAt(pos++);
|
|
5751
|
+
switch (ch2) {
|
|
5752
|
+
case 34:
|
|
5753
|
+
result += '"';
|
|
5754
|
+
break;
|
|
5755
|
+
case 92:
|
|
5756
|
+
result += "\\";
|
|
5757
|
+
break;
|
|
5758
|
+
case 47:
|
|
5759
|
+
result += "/";
|
|
5760
|
+
break;
|
|
5761
|
+
case 98:
|
|
5762
|
+
result += "\b";
|
|
5763
|
+
break;
|
|
5764
|
+
case 102:
|
|
5765
|
+
result += "\f";
|
|
5766
|
+
break;
|
|
5767
|
+
case 110:
|
|
5768
|
+
result += `
|
|
5769
|
+
`;
|
|
5770
|
+
break;
|
|
5771
|
+
case 114:
|
|
5772
|
+
result += "\r";
|
|
5773
|
+
break;
|
|
5774
|
+
case 116:
|
|
5775
|
+
result += "\t";
|
|
5776
|
+
break;
|
|
5777
|
+
case 117:
|
|
5778
|
+
const ch3 = scanHexDigits(4, true);
|
|
5779
|
+
if (ch3 >= 0) {
|
|
5780
|
+
result += String.fromCharCode(ch3);
|
|
5781
|
+
} else {
|
|
5782
|
+
scanError = 4;
|
|
5783
|
+
}
|
|
5784
|
+
break;
|
|
5785
|
+
default:
|
|
5786
|
+
scanError = 5;
|
|
5787
|
+
}
|
|
5788
|
+
start = pos;
|
|
5789
|
+
continue;
|
|
5790
|
+
}
|
|
5791
|
+
if (ch >= 0 && ch <= 31) {
|
|
5792
|
+
if (isLineBreak(ch)) {
|
|
5793
|
+
result += text.substring(start, pos);
|
|
5794
|
+
scanError = 2;
|
|
5795
|
+
break;
|
|
5796
|
+
} else {
|
|
5797
|
+
scanError = 6;
|
|
5798
|
+
}
|
|
5799
|
+
}
|
|
5800
|
+
pos++;
|
|
5801
|
+
}
|
|
5802
|
+
return result;
|
|
5803
|
+
}
|
|
5804
|
+
function scanNext() {
|
|
5805
|
+
value = "";
|
|
5806
|
+
scanError = 0;
|
|
5807
|
+
tokenOffset = pos;
|
|
5808
|
+
lineStartOffset = lineNumber;
|
|
5809
|
+
prevTokenLineStartOffset = tokenLineStartOffset;
|
|
5810
|
+
if (pos >= len) {
|
|
5811
|
+
tokenOffset = len;
|
|
5812
|
+
return token = 17;
|
|
5813
|
+
}
|
|
5814
|
+
let code = text.charCodeAt(pos);
|
|
5815
|
+
if (isWhiteSpace(code)) {
|
|
5816
|
+
do {
|
|
5817
|
+
pos++;
|
|
5818
|
+
value += String.fromCharCode(code);
|
|
5819
|
+
code = text.charCodeAt(pos);
|
|
5820
|
+
} while (isWhiteSpace(code));
|
|
5821
|
+
return token = 15;
|
|
5822
|
+
}
|
|
5823
|
+
if (isLineBreak(code)) {
|
|
5824
|
+
pos++;
|
|
5825
|
+
value += String.fromCharCode(code);
|
|
5826
|
+
if (code === 13 && text.charCodeAt(pos) === 10) {
|
|
5827
|
+
pos++;
|
|
5828
|
+
value += `
|
|
5829
|
+
`;
|
|
5830
|
+
}
|
|
5831
|
+
lineNumber++;
|
|
5832
|
+
tokenLineStartOffset = pos;
|
|
5833
|
+
return token = 14;
|
|
5834
|
+
}
|
|
5835
|
+
switch (code) {
|
|
5836
|
+
case 123:
|
|
5837
|
+
pos++;
|
|
5838
|
+
return token = 1;
|
|
5839
|
+
case 125:
|
|
5840
|
+
pos++;
|
|
5841
|
+
return token = 2;
|
|
5842
|
+
case 91:
|
|
5843
|
+
pos++;
|
|
5844
|
+
return token = 3;
|
|
5845
|
+
case 93:
|
|
5846
|
+
pos++;
|
|
5847
|
+
return token = 4;
|
|
5848
|
+
case 58:
|
|
5849
|
+
pos++;
|
|
5850
|
+
return token = 6;
|
|
5851
|
+
case 44:
|
|
5852
|
+
pos++;
|
|
5853
|
+
return token = 5;
|
|
5854
|
+
case 34:
|
|
5855
|
+
pos++;
|
|
5856
|
+
value = scanString();
|
|
5857
|
+
return token = 10;
|
|
5858
|
+
case 47:
|
|
5859
|
+
const start = pos - 1;
|
|
5860
|
+
if (text.charCodeAt(pos + 1) === 47) {
|
|
5861
|
+
pos += 2;
|
|
5862
|
+
while (pos < len) {
|
|
5863
|
+
if (isLineBreak(text.charCodeAt(pos))) {
|
|
5864
|
+
break;
|
|
5865
|
+
}
|
|
5866
|
+
pos++;
|
|
5867
|
+
}
|
|
5868
|
+
value = text.substring(start, pos);
|
|
5869
|
+
return token = 12;
|
|
5870
|
+
}
|
|
5871
|
+
if (text.charCodeAt(pos + 1) === 42) {
|
|
5872
|
+
pos += 2;
|
|
5873
|
+
const safeLength = len - 1;
|
|
5874
|
+
let commentClosed = false;
|
|
5875
|
+
while (pos < safeLength) {
|
|
5876
|
+
const ch = text.charCodeAt(pos);
|
|
5877
|
+
if (ch === 42 && text.charCodeAt(pos + 1) === 47) {
|
|
5878
|
+
pos += 2;
|
|
5879
|
+
commentClosed = true;
|
|
5880
|
+
break;
|
|
5881
|
+
}
|
|
5882
|
+
pos++;
|
|
5883
|
+
if (isLineBreak(ch)) {
|
|
5884
|
+
if (ch === 13 && text.charCodeAt(pos) === 10) {
|
|
5885
|
+
pos++;
|
|
5886
|
+
}
|
|
5887
|
+
lineNumber++;
|
|
5888
|
+
tokenLineStartOffset = pos;
|
|
5889
|
+
}
|
|
5890
|
+
}
|
|
5891
|
+
if (!commentClosed) {
|
|
5892
|
+
pos++;
|
|
5893
|
+
scanError = 1;
|
|
5894
|
+
}
|
|
5895
|
+
value = text.substring(start, pos);
|
|
5896
|
+
return token = 13;
|
|
5897
|
+
}
|
|
5898
|
+
value += String.fromCharCode(code);
|
|
5899
|
+
pos++;
|
|
5900
|
+
return token = 16;
|
|
5901
|
+
case 45:
|
|
5902
|
+
value += String.fromCharCode(code);
|
|
5903
|
+
pos++;
|
|
5904
|
+
if (pos === len || !isDigit(text.charCodeAt(pos))) {
|
|
5905
|
+
return token = 16;
|
|
5906
|
+
}
|
|
5907
|
+
case 48:
|
|
5908
|
+
case 49:
|
|
5909
|
+
case 50:
|
|
5910
|
+
case 51:
|
|
5911
|
+
case 52:
|
|
5912
|
+
case 53:
|
|
5913
|
+
case 54:
|
|
5914
|
+
case 55:
|
|
5915
|
+
case 56:
|
|
5916
|
+
case 57:
|
|
5917
|
+
value += scanNumber();
|
|
5918
|
+
return token = 11;
|
|
5919
|
+
default:
|
|
5920
|
+
while (pos < len && isUnknownContentCharacter(code)) {
|
|
5921
|
+
pos++;
|
|
5922
|
+
code = text.charCodeAt(pos);
|
|
5923
|
+
}
|
|
5924
|
+
if (tokenOffset !== pos) {
|
|
5925
|
+
value = text.substring(tokenOffset, pos);
|
|
5926
|
+
switch (value) {
|
|
5927
|
+
case "true":
|
|
5928
|
+
return token = 8;
|
|
5929
|
+
case "false":
|
|
5930
|
+
return token = 9;
|
|
5931
|
+
case "null":
|
|
5932
|
+
return token = 7;
|
|
5933
|
+
}
|
|
5934
|
+
return token = 16;
|
|
5935
|
+
}
|
|
5936
|
+
value += String.fromCharCode(code);
|
|
5937
|
+
pos++;
|
|
5938
|
+
return token = 16;
|
|
5939
|
+
}
|
|
5940
|
+
}
|
|
5941
|
+
function isUnknownContentCharacter(code) {
|
|
5942
|
+
if (isWhiteSpace(code) || isLineBreak(code)) {
|
|
5943
|
+
return false;
|
|
5944
|
+
}
|
|
5945
|
+
switch (code) {
|
|
5946
|
+
case 125:
|
|
5947
|
+
case 93:
|
|
5948
|
+
case 123:
|
|
5949
|
+
case 91:
|
|
5950
|
+
case 34:
|
|
5951
|
+
case 58:
|
|
5952
|
+
case 44:
|
|
5953
|
+
case 47:
|
|
5954
|
+
return false;
|
|
5955
|
+
}
|
|
5956
|
+
return true;
|
|
5957
|
+
}
|
|
5958
|
+
function scanNextNonTrivia() {
|
|
5959
|
+
let result;
|
|
5960
|
+
do {
|
|
5961
|
+
result = scanNext();
|
|
5962
|
+
} while (result >= 12 && result <= 15);
|
|
5963
|
+
return result;
|
|
5964
|
+
}
|
|
5965
|
+
return {
|
|
5966
|
+
setPosition,
|
|
5967
|
+
getPosition: () => pos,
|
|
5968
|
+
scan: ignoreTrivia ? scanNextNonTrivia : scanNext,
|
|
5969
|
+
getToken: () => token,
|
|
5970
|
+
getTokenValue: () => value,
|
|
5971
|
+
getTokenOffset: () => tokenOffset,
|
|
5972
|
+
getTokenLength: () => pos - tokenOffset,
|
|
5973
|
+
getTokenStartLine: () => lineStartOffset,
|
|
5974
|
+
getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,
|
|
5975
|
+
getTokenError: () => scanError
|
|
5976
|
+
};
|
|
5977
|
+
}
|
|
5978
|
+
function isWhiteSpace(ch) {
|
|
5979
|
+
return ch === 32 || ch === 9;
|
|
5980
|
+
}
|
|
5981
|
+
function isLineBreak(ch) {
|
|
5982
|
+
return ch === 10 || ch === 13;
|
|
5983
|
+
}
|
|
5984
|
+
function isDigit(ch) {
|
|
5985
|
+
return ch >= 48 && ch <= 57;
|
|
5986
|
+
}
|
|
5987
|
+
var CharacterCodes;
|
|
5988
|
+
(function(CharacterCodes2) {
|
|
5989
|
+
CharacterCodes2[CharacterCodes2["lineFeed"] = 10] = "lineFeed";
|
|
5990
|
+
CharacterCodes2[CharacterCodes2["carriageReturn"] = 13] = "carriageReturn";
|
|
5991
|
+
CharacterCodes2[CharacterCodes2["space"] = 32] = "space";
|
|
5992
|
+
CharacterCodes2[CharacterCodes2["_0"] = 48] = "_0";
|
|
5993
|
+
CharacterCodes2[CharacterCodes2["_1"] = 49] = "_1";
|
|
5994
|
+
CharacterCodes2[CharacterCodes2["_2"] = 50] = "_2";
|
|
5995
|
+
CharacterCodes2[CharacterCodes2["_3"] = 51] = "_3";
|
|
5996
|
+
CharacterCodes2[CharacterCodes2["_4"] = 52] = "_4";
|
|
5997
|
+
CharacterCodes2[CharacterCodes2["_5"] = 53] = "_5";
|
|
5998
|
+
CharacterCodes2[CharacterCodes2["_6"] = 54] = "_6";
|
|
5999
|
+
CharacterCodes2[CharacterCodes2["_7"] = 55] = "_7";
|
|
6000
|
+
CharacterCodes2[CharacterCodes2["_8"] = 56] = "_8";
|
|
6001
|
+
CharacterCodes2[CharacterCodes2["_9"] = 57] = "_9";
|
|
6002
|
+
CharacterCodes2[CharacterCodes2["a"] = 97] = "a";
|
|
6003
|
+
CharacterCodes2[CharacterCodes2["b"] = 98] = "b";
|
|
6004
|
+
CharacterCodes2[CharacterCodes2["c"] = 99] = "c";
|
|
6005
|
+
CharacterCodes2[CharacterCodes2["d"] = 100] = "d";
|
|
6006
|
+
CharacterCodes2[CharacterCodes2["e"] = 101] = "e";
|
|
6007
|
+
CharacterCodes2[CharacterCodes2["f"] = 102] = "f";
|
|
6008
|
+
CharacterCodes2[CharacterCodes2["g"] = 103] = "g";
|
|
6009
|
+
CharacterCodes2[CharacterCodes2["h"] = 104] = "h";
|
|
6010
|
+
CharacterCodes2[CharacterCodes2["i"] = 105] = "i";
|
|
6011
|
+
CharacterCodes2[CharacterCodes2["j"] = 106] = "j";
|
|
6012
|
+
CharacterCodes2[CharacterCodes2["k"] = 107] = "k";
|
|
6013
|
+
CharacterCodes2[CharacterCodes2["l"] = 108] = "l";
|
|
6014
|
+
CharacterCodes2[CharacterCodes2["m"] = 109] = "m";
|
|
6015
|
+
CharacterCodes2[CharacterCodes2["n"] = 110] = "n";
|
|
6016
|
+
CharacterCodes2[CharacterCodes2["o"] = 111] = "o";
|
|
6017
|
+
CharacterCodes2[CharacterCodes2["p"] = 112] = "p";
|
|
6018
|
+
CharacterCodes2[CharacterCodes2["q"] = 113] = "q";
|
|
6019
|
+
CharacterCodes2[CharacterCodes2["r"] = 114] = "r";
|
|
6020
|
+
CharacterCodes2[CharacterCodes2["s"] = 115] = "s";
|
|
6021
|
+
CharacterCodes2[CharacterCodes2["t"] = 116] = "t";
|
|
6022
|
+
CharacterCodes2[CharacterCodes2["u"] = 117] = "u";
|
|
6023
|
+
CharacterCodes2[CharacterCodes2["v"] = 118] = "v";
|
|
6024
|
+
CharacterCodes2[CharacterCodes2["w"] = 119] = "w";
|
|
6025
|
+
CharacterCodes2[CharacterCodes2["x"] = 120] = "x";
|
|
6026
|
+
CharacterCodes2[CharacterCodes2["y"] = 121] = "y";
|
|
6027
|
+
CharacterCodes2[CharacterCodes2["z"] = 122] = "z";
|
|
6028
|
+
CharacterCodes2[CharacterCodes2["A"] = 65] = "A";
|
|
6029
|
+
CharacterCodes2[CharacterCodes2["B"] = 66] = "B";
|
|
6030
|
+
CharacterCodes2[CharacterCodes2["C"] = 67] = "C";
|
|
6031
|
+
CharacterCodes2[CharacterCodes2["D"] = 68] = "D";
|
|
6032
|
+
CharacterCodes2[CharacterCodes2["E"] = 69] = "E";
|
|
6033
|
+
CharacterCodes2[CharacterCodes2["F"] = 70] = "F";
|
|
6034
|
+
CharacterCodes2[CharacterCodes2["G"] = 71] = "G";
|
|
6035
|
+
CharacterCodes2[CharacterCodes2["H"] = 72] = "H";
|
|
6036
|
+
CharacterCodes2[CharacterCodes2["I"] = 73] = "I";
|
|
6037
|
+
CharacterCodes2[CharacterCodes2["J"] = 74] = "J";
|
|
6038
|
+
CharacterCodes2[CharacterCodes2["K"] = 75] = "K";
|
|
6039
|
+
CharacterCodes2[CharacterCodes2["L"] = 76] = "L";
|
|
6040
|
+
CharacterCodes2[CharacterCodes2["M"] = 77] = "M";
|
|
6041
|
+
CharacterCodes2[CharacterCodes2["N"] = 78] = "N";
|
|
6042
|
+
CharacterCodes2[CharacterCodes2["O"] = 79] = "O";
|
|
6043
|
+
CharacterCodes2[CharacterCodes2["P"] = 80] = "P";
|
|
6044
|
+
CharacterCodes2[CharacterCodes2["Q"] = 81] = "Q";
|
|
6045
|
+
CharacterCodes2[CharacterCodes2["R"] = 82] = "R";
|
|
6046
|
+
CharacterCodes2[CharacterCodes2["S"] = 83] = "S";
|
|
6047
|
+
CharacterCodes2[CharacterCodes2["T"] = 84] = "T";
|
|
6048
|
+
CharacterCodes2[CharacterCodes2["U"] = 85] = "U";
|
|
6049
|
+
CharacterCodes2[CharacterCodes2["V"] = 86] = "V";
|
|
6050
|
+
CharacterCodes2[CharacterCodes2["W"] = 87] = "W";
|
|
6051
|
+
CharacterCodes2[CharacterCodes2["X"] = 88] = "X";
|
|
6052
|
+
CharacterCodes2[CharacterCodes2["Y"] = 89] = "Y";
|
|
6053
|
+
CharacterCodes2[CharacterCodes2["Z"] = 90] = "Z";
|
|
6054
|
+
CharacterCodes2[CharacterCodes2["asterisk"] = 42] = "asterisk";
|
|
6055
|
+
CharacterCodes2[CharacterCodes2["backslash"] = 92] = "backslash";
|
|
6056
|
+
CharacterCodes2[CharacterCodes2["closeBrace"] = 125] = "closeBrace";
|
|
6057
|
+
CharacterCodes2[CharacterCodes2["closeBracket"] = 93] = "closeBracket";
|
|
6058
|
+
CharacterCodes2[CharacterCodes2["colon"] = 58] = "colon";
|
|
6059
|
+
CharacterCodes2[CharacterCodes2["comma"] = 44] = "comma";
|
|
6060
|
+
CharacterCodes2[CharacterCodes2["dot"] = 46] = "dot";
|
|
6061
|
+
CharacterCodes2[CharacterCodes2["doubleQuote"] = 34] = "doubleQuote";
|
|
6062
|
+
CharacterCodes2[CharacterCodes2["minus"] = 45] = "minus";
|
|
6063
|
+
CharacterCodes2[CharacterCodes2["openBrace"] = 123] = "openBrace";
|
|
6064
|
+
CharacterCodes2[CharacterCodes2["openBracket"] = 91] = "openBracket";
|
|
6065
|
+
CharacterCodes2[CharacterCodes2["plus"] = 43] = "plus";
|
|
6066
|
+
CharacterCodes2[CharacterCodes2["slash"] = 47] = "slash";
|
|
6067
|
+
CharacterCodes2[CharacterCodes2["formFeed"] = 12] = "formFeed";
|
|
6068
|
+
CharacterCodes2[CharacterCodes2["tab"] = 9] = "tab";
|
|
6069
|
+
})(CharacterCodes || (CharacterCodes = {}));
|
|
6070
|
+
|
|
6071
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/string-intern.js
|
|
6072
|
+
var cachedSpaces = new Array(20).fill(0).map((_, index) => {
|
|
6073
|
+
return " ".repeat(index);
|
|
6074
|
+
});
|
|
6075
|
+
var maxCachedValues = 200;
|
|
6076
|
+
var cachedBreakLinesWithSpaces = {
|
|
6077
|
+
" ": {
|
|
6078
|
+
"\n": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6079
|
+
return `
|
|
6080
|
+
` + " ".repeat(index);
|
|
6081
|
+
}),
|
|
6082
|
+
"\r": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6083
|
+
return "\r" + " ".repeat(index);
|
|
6084
|
+
}),
|
|
6085
|
+
"\r\n": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6086
|
+
return `\r
|
|
6087
|
+
` + " ".repeat(index);
|
|
6088
|
+
})
|
|
6089
|
+
},
|
|
6090
|
+
"\t": {
|
|
6091
|
+
"\n": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6092
|
+
return `
|
|
6093
|
+
` + "\t".repeat(index);
|
|
6094
|
+
}),
|
|
6095
|
+
"\r": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6096
|
+
return "\r" + "\t".repeat(index);
|
|
6097
|
+
}),
|
|
6098
|
+
"\r\n": new Array(maxCachedValues).fill(0).map((_, index) => {
|
|
6099
|
+
return `\r
|
|
6100
|
+
` + "\t".repeat(index);
|
|
6101
|
+
})
|
|
6102
|
+
}
|
|
6103
|
+
};
|
|
6104
|
+
var supportedEols = [`
|
|
6105
|
+
`, "\r", `\r
|
|
6106
|
+
`];
|
|
6107
|
+
|
|
6108
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/format.js
|
|
6109
|
+
function format(documentText, range, options) {
|
|
6110
|
+
let initialIndentLevel;
|
|
6111
|
+
let formatText;
|
|
6112
|
+
let formatTextStart;
|
|
6113
|
+
let rangeStart;
|
|
6114
|
+
let rangeEnd;
|
|
6115
|
+
if (range) {
|
|
6116
|
+
rangeStart = range.offset;
|
|
6117
|
+
rangeEnd = rangeStart + range.length;
|
|
6118
|
+
formatTextStart = rangeStart;
|
|
6119
|
+
while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {
|
|
6120
|
+
formatTextStart--;
|
|
6121
|
+
}
|
|
6122
|
+
let endOffset = rangeEnd;
|
|
6123
|
+
while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {
|
|
6124
|
+
endOffset++;
|
|
6125
|
+
}
|
|
6126
|
+
formatText = documentText.substring(formatTextStart, endOffset);
|
|
6127
|
+
initialIndentLevel = computeIndentLevel(formatText, options);
|
|
6128
|
+
} else {
|
|
6129
|
+
formatText = documentText;
|
|
6130
|
+
initialIndentLevel = 0;
|
|
6131
|
+
formatTextStart = 0;
|
|
6132
|
+
rangeStart = 0;
|
|
6133
|
+
rangeEnd = documentText.length;
|
|
6134
|
+
}
|
|
6135
|
+
const eol = getEOL(options, documentText);
|
|
6136
|
+
const eolFastPathSupported = supportedEols.includes(eol);
|
|
6137
|
+
let numberLineBreaks = 0;
|
|
6138
|
+
let indentLevel = 0;
|
|
6139
|
+
let indentValue;
|
|
6140
|
+
if (options.insertSpaces) {
|
|
6141
|
+
indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);
|
|
6142
|
+
} else {
|
|
6143
|
+
indentValue = "\t";
|
|
6144
|
+
}
|
|
6145
|
+
const indentType = indentValue === "\t" ? "\t" : " ";
|
|
6146
|
+
let scanner = createScanner(formatText, false);
|
|
6147
|
+
let hasError = false;
|
|
6148
|
+
function newLinesAndIndent() {
|
|
6149
|
+
if (numberLineBreaks > 1) {
|
|
6150
|
+
return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);
|
|
6151
|
+
}
|
|
6152
|
+
const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);
|
|
6153
|
+
if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) {
|
|
6154
|
+
return eol + repeat(indentValue, initialIndentLevel + indentLevel);
|
|
6155
|
+
}
|
|
6156
|
+
if (amountOfSpaces <= 0) {
|
|
6157
|
+
return eol;
|
|
6158
|
+
}
|
|
6159
|
+
return cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];
|
|
6160
|
+
}
|
|
6161
|
+
function scanNext() {
|
|
6162
|
+
let token = scanner.scan();
|
|
6163
|
+
numberLineBreaks = 0;
|
|
6164
|
+
while (token === 15 || token === 14) {
|
|
6165
|
+
if (token === 14 && options.keepLines) {
|
|
6166
|
+
numberLineBreaks += 1;
|
|
6167
|
+
} else if (token === 14) {
|
|
6168
|
+
numberLineBreaks = 1;
|
|
6169
|
+
}
|
|
6170
|
+
token = scanner.scan();
|
|
6171
|
+
}
|
|
6172
|
+
hasError = token === 16 || scanner.getTokenError() !== 0;
|
|
6173
|
+
return token;
|
|
6174
|
+
}
|
|
6175
|
+
const editOperations = [];
|
|
6176
|
+
function addEdit(text, startOffset, endOffset) {
|
|
6177
|
+
if (!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text) {
|
|
6178
|
+
editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
|
|
6179
|
+
}
|
|
6180
|
+
}
|
|
6181
|
+
let firstToken = scanNext();
|
|
6182
|
+
if (options.keepLines && numberLineBreaks > 0) {
|
|
6183
|
+
addEdit(repeat(eol, numberLineBreaks), 0, 0);
|
|
6184
|
+
}
|
|
6185
|
+
if (firstToken !== 17) {
|
|
6186
|
+
let firstTokenStart = scanner.getTokenOffset() + formatTextStart;
|
|
6187
|
+
let initialIndent = indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel);
|
|
6188
|
+
addEdit(initialIndent, formatTextStart, firstTokenStart);
|
|
6189
|
+
}
|
|
6190
|
+
while (firstToken !== 17) {
|
|
6191
|
+
let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
|
|
6192
|
+
let secondToken = scanNext();
|
|
6193
|
+
let replaceContent = "";
|
|
6194
|
+
let needsLineBreak = false;
|
|
6195
|
+
while (numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13)) {
|
|
6196
|
+
let commentTokenStart = scanner.getTokenOffset() + formatTextStart;
|
|
6197
|
+
addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart);
|
|
6198
|
+
firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
|
|
6199
|
+
needsLineBreak = secondToken === 12;
|
|
6200
|
+
replaceContent = needsLineBreak ? newLinesAndIndent() : "";
|
|
6201
|
+
secondToken = scanNext();
|
|
6202
|
+
}
|
|
6203
|
+
if (secondToken === 2) {
|
|
6204
|
+
if (firstToken !== 1) {
|
|
6205
|
+
indentLevel--;
|
|
6206
|
+
}
|
|
6207
|
+
if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) {
|
|
6208
|
+
replaceContent = newLinesAndIndent();
|
|
6209
|
+
} else if (options.keepLines) {
|
|
6210
|
+
replaceContent = cachedSpaces[1];
|
|
6211
|
+
}
|
|
6212
|
+
} else if (secondToken === 4) {
|
|
6213
|
+
if (firstToken !== 3) {
|
|
6214
|
+
indentLevel--;
|
|
6215
|
+
}
|
|
6216
|
+
if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) {
|
|
6217
|
+
replaceContent = newLinesAndIndent();
|
|
6218
|
+
} else if (options.keepLines) {
|
|
6219
|
+
replaceContent = cachedSpaces[1];
|
|
6220
|
+
}
|
|
6221
|
+
} else {
|
|
6222
|
+
switch (firstToken) {
|
|
6223
|
+
case 3:
|
|
6224
|
+
case 1:
|
|
6225
|
+
indentLevel++;
|
|
6226
|
+
if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {
|
|
6227
|
+
replaceContent = newLinesAndIndent();
|
|
6228
|
+
} else {
|
|
6229
|
+
replaceContent = cachedSpaces[1];
|
|
6230
|
+
}
|
|
6231
|
+
break;
|
|
6232
|
+
case 5:
|
|
6233
|
+
if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {
|
|
6234
|
+
replaceContent = newLinesAndIndent();
|
|
6235
|
+
} else {
|
|
6236
|
+
replaceContent = cachedSpaces[1];
|
|
6237
|
+
}
|
|
6238
|
+
break;
|
|
6239
|
+
case 12:
|
|
6240
|
+
replaceContent = newLinesAndIndent();
|
|
6241
|
+
break;
|
|
6242
|
+
case 13:
|
|
6243
|
+
if (numberLineBreaks > 0) {
|
|
6244
|
+
replaceContent = newLinesAndIndent();
|
|
6245
|
+
} else if (!needsLineBreak) {
|
|
6246
|
+
replaceContent = cachedSpaces[1];
|
|
6247
|
+
}
|
|
6248
|
+
break;
|
|
6249
|
+
case 6:
|
|
6250
|
+
if (options.keepLines && numberLineBreaks > 0) {
|
|
6251
|
+
replaceContent = newLinesAndIndent();
|
|
6252
|
+
} else if (!needsLineBreak) {
|
|
6253
|
+
replaceContent = cachedSpaces[1];
|
|
6254
|
+
}
|
|
6255
|
+
break;
|
|
6256
|
+
case 10:
|
|
6257
|
+
if (options.keepLines && numberLineBreaks > 0) {
|
|
6258
|
+
replaceContent = newLinesAndIndent();
|
|
6259
|
+
} else if (secondToken === 6 && !needsLineBreak) {
|
|
6260
|
+
replaceContent = "";
|
|
6261
|
+
}
|
|
6262
|
+
break;
|
|
6263
|
+
case 7:
|
|
6264
|
+
case 8:
|
|
6265
|
+
case 9:
|
|
6266
|
+
case 11:
|
|
6267
|
+
case 2:
|
|
6268
|
+
case 4:
|
|
6269
|
+
if (options.keepLines && numberLineBreaks > 0) {
|
|
6270
|
+
replaceContent = newLinesAndIndent();
|
|
6271
|
+
} else {
|
|
6272
|
+
if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) {
|
|
6273
|
+
replaceContent = cachedSpaces[1];
|
|
6274
|
+
} else if (secondToken !== 5 && secondToken !== 17) {
|
|
6275
|
+
hasError = true;
|
|
6276
|
+
}
|
|
6277
|
+
}
|
|
6278
|
+
break;
|
|
6279
|
+
case 16:
|
|
6280
|
+
hasError = true;
|
|
6281
|
+
break;
|
|
6282
|
+
}
|
|
6283
|
+
if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) {
|
|
6284
|
+
replaceContent = newLinesAndIndent();
|
|
6285
|
+
}
|
|
6286
|
+
}
|
|
6287
|
+
if (secondToken === 17) {
|
|
6288
|
+
if (options.keepLines && numberLineBreaks > 0) {
|
|
6289
|
+
replaceContent = newLinesAndIndent();
|
|
6290
|
+
} else {
|
|
6291
|
+
replaceContent = options.insertFinalNewline ? eol : "";
|
|
6292
|
+
}
|
|
6293
|
+
}
|
|
6294
|
+
const secondTokenStart = scanner.getTokenOffset() + formatTextStart;
|
|
6295
|
+
addEdit(replaceContent, firstTokenEnd, secondTokenStart);
|
|
6296
|
+
firstToken = secondToken;
|
|
6297
|
+
}
|
|
6298
|
+
return editOperations;
|
|
6299
|
+
}
|
|
6300
|
+
function repeat(s, count) {
|
|
6301
|
+
let result = "";
|
|
6302
|
+
for (let i = 0;i < count; i++) {
|
|
6303
|
+
result += s;
|
|
6304
|
+
}
|
|
6305
|
+
return result;
|
|
6306
|
+
}
|
|
6307
|
+
function computeIndentLevel(content, options) {
|
|
6308
|
+
let i = 0;
|
|
6309
|
+
let nChars = 0;
|
|
6310
|
+
const tabSize = options.tabSize || 4;
|
|
6311
|
+
while (i < content.length) {
|
|
6312
|
+
let ch = content.charAt(i);
|
|
6313
|
+
if (ch === cachedSpaces[1]) {
|
|
6314
|
+
nChars++;
|
|
6315
|
+
} else if (ch === "\t") {
|
|
6316
|
+
nChars += tabSize;
|
|
6317
|
+
} else {
|
|
6318
|
+
break;
|
|
6319
|
+
}
|
|
6320
|
+
i++;
|
|
6321
|
+
}
|
|
6322
|
+
return Math.floor(nChars / tabSize);
|
|
6323
|
+
}
|
|
6324
|
+
function getEOL(options, text) {
|
|
6325
|
+
for (let i = 0;i < text.length; i++) {
|
|
6326
|
+
const ch = text.charAt(i);
|
|
6327
|
+
if (ch === "\r") {
|
|
6328
|
+
if (i + 1 < text.length && text.charAt(i + 1) === `
|
|
6329
|
+
`) {
|
|
6330
|
+
return `\r
|
|
6331
|
+
`;
|
|
6332
|
+
}
|
|
6333
|
+
return "\r";
|
|
6334
|
+
} else if (ch === `
|
|
6335
|
+
`) {
|
|
6336
|
+
return `
|
|
6337
|
+
`;
|
|
6338
|
+
}
|
|
6339
|
+
}
|
|
6340
|
+
return options && options.eol || `
|
|
6341
|
+
`;
|
|
6342
|
+
}
|
|
6343
|
+
function isEOL(text, offset) {
|
|
6344
|
+
return `\r
|
|
6345
|
+
`.indexOf(text.charAt(offset)) !== -1;
|
|
6346
|
+
}
|
|
6347
|
+
|
|
6348
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/parser.js
|
|
6349
|
+
var ParseOptions;
|
|
6350
|
+
(function(ParseOptions2) {
|
|
6351
|
+
ParseOptions2.DEFAULT = {
|
|
6352
|
+
allowTrailingComma: false
|
|
6353
|
+
};
|
|
6354
|
+
})(ParseOptions || (ParseOptions = {}));
|
|
6355
|
+
function parse2(text, errors = [], options = ParseOptions.DEFAULT) {
|
|
6356
|
+
let currentProperty = null;
|
|
6357
|
+
let currentParent = [];
|
|
6358
|
+
const previousParents = [];
|
|
6359
|
+
function onValue(value) {
|
|
6360
|
+
if (Array.isArray(currentParent)) {
|
|
6361
|
+
currentParent.push(value);
|
|
6362
|
+
} else if (currentProperty !== null) {
|
|
6363
|
+
currentParent[currentProperty] = value;
|
|
6364
|
+
}
|
|
6365
|
+
}
|
|
6366
|
+
const visitor = {
|
|
6367
|
+
onObjectBegin: () => {
|
|
6368
|
+
const object = {};
|
|
6369
|
+
onValue(object);
|
|
6370
|
+
previousParents.push(currentParent);
|
|
6371
|
+
currentParent = object;
|
|
6372
|
+
currentProperty = null;
|
|
6373
|
+
},
|
|
6374
|
+
onObjectProperty: (name) => {
|
|
6375
|
+
currentProperty = name;
|
|
6376
|
+
},
|
|
6377
|
+
onObjectEnd: () => {
|
|
6378
|
+
currentParent = previousParents.pop();
|
|
6379
|
+
},
|
|
6380
|
+
onArrayBegin: () => {
|
|
6381
|
+
const array = [];
|
|
6382
|
+
onValue(array);
|
|
6383
|
+
previousParents.push(currentParent);
|
|
6384
|
+
currentParent = array;
|
|
6385
|
+
currentProperty = null;
|
|
6386
|
+
},
|
|
6387
|
+
onArrayEnd: () => {
|
|
6388
|
+
currentParent = previousParents.pop();
|
|
6389
|
+
},
|
|
6390
|
+
onLiteralValue: onValue,
|
|
6391
|
+
onError: (error, offset, length) => {
|
|
6392
|
+
errors.push({ error, offset, length });
|
|
6393
|
+
}
|
|
6394
|
+
};
|
|
6395
|
+
visit(text, visitor, options);
|
|
6396
|
+
return currentParent[0];
|
|
6397
|
+
}
|
|
6398
|
+
function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {
|
|
6399
|
+
let currentParent = { type: "array", offset: -1, length: -1, children: [], parent: undefined };
|
|
6400
|
+
function ensurePropertyComplete(endOffset) {
|
|
6401
|
+
if (currentParent.type === "property") {
|
|
6402
|
+
currentParent.length = endOffset - currentParent.offset;
|
|
6403
|
+
currentParent = currentParent.parent;
|
|
6404
|
+
}
|
|
6405
|
+
}
|
|
6406
|
+
function onValue(valueNode) {
|
|
6407
|
+
currentParent.children.push(valueNode);
|
|
6408
|
+
return valueNode;
|
|
6409
|
+
}
|
|
6410
|
+
const visitor = {
|
|
6411
|
+
onObjectBegin: (offset) => {
|
|
6412
|
+
currentParent = onValue({ type: "object", offset, length: -1, parent: currentParent, children: [] });
|
|
6413
|
+
},
|
|
6414
|
+
onObjectProperty: (name, offset, length) => {
|
|
6415
|
+
currentParent = onValue({ type: "property", offset, length: -1, parent: currentParent, children: [] });
|
|
6416
|
+
currentParent.children.push({ type: "string", value: name, offset, length, parent: currentParent });
|
|
6417
|
+
},
|
|
6418
|
+
onObjectEnd: (offset, length) => {
|
|
6419
|
+
ensurePropertyComplete(offset + length);
|
|
6420
|
+
currentParent.length = offset + length - currentParent.offset;
|
|
6421
|
+
currentParent = currentParent.parent;
|
|
6422
|
+
ensurePropertyComplete(offset + length);
|
|
6423
|
+
},
|
|
6424
|
+
onArrayBegin: (offset, length) => {
|
|
6425
|
+
currentParent = onValue({ type: "array", offset, length: -1, parent: currentParent, children: [] });
|
|
6426
|
+
},
|
|
6427
|
+
onArrayEnd: (offset, length) => {
|
|
6428
|
+
currentParent.length = offset + length - currentParent.offset;
|
|
6429
|
+
currentParent = currentParent.parent;
|
|
6430
|
+
ensurePropertyComplete(offset + length);
|
|
6431
|
+
},
|
|
6432
|
+
onLiteralValue: (value, offset, length) => {
|
|
6433
|
+
onValue({ type: getNodeType(value), offset, length, parent: currentParent, value });
|
|
6434
|
+
ensurePropertyComplete(offset + length);
|
|
6435
|
+
},
|
|
6436
|
+
onSeparator: (sep, offset, length) => {
|
|
6437
|
+
if (currentParent.type === "property") {
|
|
6438
|
+
if (sep === ":") {
|
|
6439
|
+
currentParent.colonOffset = offset;
|
|
6440
|
+
} else if (sep === ",") {
|
|
6441
|
+
ensurePropertyComplete(offset);
|
|
6442
|
+
}
|
|
6443
|
+
}
|
|
6444
|
+
},
|
|
6445
|
+
onError: (error, offset, length) => {
|
|
6446
|
+
errors.push({ error, offset, length });
|
|
6447
|
+
}
|
|
6448
|
+
};
|
|
6449
|
+
visit(text, visitor, options);
|
|
6450
|
+
const result = currentParent.children[0];
|
|
6451
|
+
if (result) {
|
|
6452
|
+
delete result.parent;
|
|
6453
|
+
}
|
|
6454
|
+
return result;
|
|
6455
|
+
}
|
|
6456
|
+
function findNodeAtLocation(root, path) {
|
|
6457
|
+
if (!root) {
|
|
6458
|
+
return;
|
|
6459
|
+
}
|
|
6460
|
+
let node = root;
|
|
6461
|
+
for (let segment of path) {
|
|
6462
|
+
if (typeof segment === "string") {
|
|
6463
|
+
if (node.type !== "object" || !Array.isArray(node.children)) {
|
|
6464
|
+
return;
|
|
6465
|
+
}
|
|
6466
|
+
let found = false;
|
|
6467
|
+
for (const propertyNode of node.children) {
|
|
6468
|
+
if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {
|
|
6469
|
+
node = propertyNode.children[1];
|
|
6470
|
+
found = true;
|
|
6471
|
+
break;
|
|
6472
|
+
}
|
|
6473
|
+
}
|
|
6474
|
+
if (!found) {
|
|
6475
|
+
return;
|
|
6476
|
+
}
|
|
6477
|
+
} else {
|
|
6478
|
+
const index = segment;
|
|
6479
|
+
if (node.type !== "array" || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {
|
|
6480
|
+
return;
|
|
6481
|
+
}
|
|
6482
|
+
node = node.children[index];
|
|
6483
|
+
}
|
|
6484
|
+
}
|
|
6485
|
+
return node;
|
|
6486
|
+
}
|
|
6487
|
+
function visit(text, visitor, options = ParseOptions.DEFAULT) {
|
|
6488
|
+
const _scanner = createScanner(text, false);
|
|
6489
|
+
const _jsonPath = [];
|
|
6490
|
+
let suppressedCallbacks = 0;
|
|
6491
|
+
function toNoArgVisit(visitFunction) {
|
|
6492
|
+
return visitFunction ? () => suppressedCallbacks === 0 && visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;
|
|
6493
|
+
}
|
|
6494
|
+
function toOneArgVisit(visitFunction) {
|
|
6495
|
+
return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;
|
|
6496
|
+
}
|
|
6497
|
+
function toOneArgVisitWithPath(visitFunction) {
|
|
6498
|
+
return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;
|
|
6499
|
+
}
|
|
6500
|
+
function toBeginVisit(visitFunction) {
|
|
6501
|
+
return visitFunction ? () => {
|
|
6502
|
+
if (suppressedCallbacks > 0) {
|
|
6503
|
+
suppressedCallbacks++;
|
|
6504
|
+
} else {
|
|
6505
|
+
let cbReturn = visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice());
|
|
6506
|
+
if (cbReturn === false) {
|
|
6507
|
+
suppressedCallbacks = 1;
|
|
6508
|
+
}
|
|
6509
|
+
}
|
|
6510
|
+
} : () => true;
|
|
6511
|
+
}
|
|
6512
|
+
function toEndVisit(visitFunction) {
|
|
6513
|
+
return visitFunction ? () => {
|
|
6514
|
+
if (suppressedCallbacks > 0) {
|
|
6515
|
+
suppressedCallbacks--;
|
|
6516
|
+
}
|
|
6517
|
+
if (suppressedCallbacks === 0) {
|
|
6518
|
+
visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter());
|
|
6519
|
+
}
|
|
6520
|
+
} : () => true;
|
|
6521
|
+
}
|
|
6522
|
+
const onObjectBegin = toBeginVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toEndVisit(visitor.onObjectEnd), onArrayBegin = toBeginVisit(visitor.onArrayBegin), onArrayEnd = toEndVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);
|
|
6523
|
+
const disallowComments = options && options.disallowComments;
|
|
6524
|
+
const allowTrailingComma = options && options.allowTrailingComma;
|
|
6525
|
+
function scanNext() {
|
|
6526
|
+
while (true) {
|
|
6527
|
+
const token = _scanner.scan();
|
|
6528
|
+
switch (_scanner.getTokenError()) {
|
|
6529
|
+
case 4:
|
|
6530
|
+
handleError(14);
|
|
6531
|
+
break;
|
|
6532
|
+
case 5:
|
|
6533
|
+
handleError(15);
|
|
6534
|
+
break;
|
|
6535
|
+
case 3:
|
|
6536
|
+
handleError(13);
|
|
6537
|
+
break;
|
|
6538
|
+
case 1:
|
|
6539
|
+
if (!disallowComments) {
|
|
6540
|
+
handleError(11);
|
|
6541
|
+
}
|
|
6542
|
+
break;
|
|
6543
|
+
case 2:
|
|
6544
|
+
handleError(12);
|
|
6545
|
+
break;
|
|
6546
|
+
case 6:
|
|
6547
|
+
handleError(16);
|
|
6548
|
+
break;
|
|
6549
|
+
}
|
|
6550
|
+
switch (token) {
|
|
6551
|
+
case 12:
|
|
6552
|
+
case 13:
|
|
6553
|
+
if (disallowComments) {
|
|
6554
|
+
handleError(10);
|
|
6555
|
+
} else {
|
|
6556
|
+
onComment();
|
|
6557
|
+
}
|
|
6558
|
+
break;
|
|
6559
|
+
case 16:
|
|
6560
|
+
handleError(1);
|
|
6561
|
+
break;
|
|
6562
|
+
case 15:
|
|
6563
|
+
case 14:
|
|
6564
|
+
break;
|
|
6565
|
+
default:
|
|
6566
|
+
return token;
|
|
6567
|
+
}
|
|
6568
|
+
}
|
|
6569
|
+
}
|
|
6570
|
+
function handleError(error, skipUntilAfter = [], skipUntil2 = []) {
|
|
6571
|
+
onError(error);
|
|
6572
|
+
if (skipUntilAfter.length + skipUntil2.length > 0) {
|
|
6573
|
+
let token = _scanner.getToken();
|
|
6574
|
+
while (token !== 17) {
|
|
6575
|
+
if (skipUntilAfter.indexOf(token) !== -1) {
|
|
6576
|
+
scanNext();
|
|
6577
|
+
break;
|
|
6578
|
+
} else if (skipUntil2.indexOf(token) !== -1) {
|
|
6579
|
+
break;
|
|
6580
|
+
}
|
|
6581
|
+
token = scanNext();
|
|
6582
|
+
}
|
|
6583
|
+
}
|
|
6584
|
+
}
|
|
6585
|
+
function parseString2(isValue) {
|
|
6586
|
+
const value = _scanner.getTokenValue();
|
|
6587
|
+
if (isValue) {
|
|
6588
|
+
onLiteralValue(value);
|
|
6589
|
+
} else {
|
|
6590
|
+
onObjectProperty(value);
|
|
6591
|
+
_jsonPath.push(value);
|
|
6592
|
+
}
|
|
6593
|
+
scanNext();
|
|
6594
|
+
return true;
|
|
6595
|
+
}
|
|
6596
|
+
function parseLiteral() {
|
|
6597
|
+
switch (_scanner.getToken()) {
|
|
6598
|
+
case 11:
|
|
6599
|
+
const tokenValue = _scanner.getTokenValue();
|
|
6600
|
+
let value = Number(tokenValue);
|
|
6601
|
+
if (isNaN(value)) {
|
|
6602
|
+
handleError(2);
|
|
6603
|
+
value = 0;
|
|
6604
|
+
}
|
|
6605
|
+
onLiteralValue(value);
|
|
6606
|
+
break;
|
|
6607
|
+
case 7:
|
|
6608
|
+
onLiteralValue(null);
|
|
6609
|
+
break;
|
|
6610
|
+
case 8:
|
|
6611
|
+
onLiteralValue(true);
|
|
6612
|
+
break;
|
|
6613
|
+
case 9:
|
|
6614
|
+
onLiteralValue(false);
|
|
6615
|
+
break;
|
|
6616
|
+
default:
|
|
6617
|
+
return false;
|
|
6618
|
+
}
|
|
6619
|
+
scanNext();
|
|
6620
|
+
return true;
|
|
6621
|
+
}
|
|
6622
|
+
function parseProperty() {
|
|
6623
|
+
if (_scanner.getToken() !== 10) {
|
|
6624
|
+
handleError(3, [], [2, 5]);
|
|
6625
|
+
return false;
|
|
6626
|
+
}
|
|
6627
|
+
parseString2(false);
|
|
6628
|
+
if (_scanner.getToken() === 6) {
|
|
6629
|
+
onSeparator(":");
|
|
6630
|
+
scanNext();
|
|
6631
|
+
if (!parseValue2()) {
|
|
6632
|
+
handleError(4, [], [2, 5]);
|
|
6633
|
+
}
|
|
6634
|
+
} else {
|
|
6635
|
+
handleError(5, [], [2, 5]);
|
|
6636
|
+
}
|
|
6637
|
+
_jsonPath.pop();
|
|
6638
|
+
return true;
|
|
6639
|
+
}
|
|
6640
|
+
function parseObject() {
|
|
6641
|
+
onObjectBegin();
|
|
6642
|
+
scanNext();
|
|
6643
|
+
let needsComma = false;
|
|
6644
|
+
while (_scanner.getToken() !== 2 && _scanner.getToken() !== 17) {
|
|
6645
|
+
if (_scanner.getToken() === 5) {
|
|
6646
|
+
if (!needsComma) {
|
|
6647
|
+
handleError(4, [], []);
|
|
6648
|
+
}
|
|
6649
|
+
onSeparator(",");
|
|
6650
|
+
scanNext();
|
|
6651
|
+
if (_scanner.getToken() === 2 && allowTrailingComma) {
|
|
6652
|
+
break;
|
|
6653
|
+
}
|
|
6654
|
+
} else if (needsComma) {
|
|
6655
|
+
handleError(6, [], []);
|
|
6656
|
+
}
|
|
6657
|
+
if (!parseProperty()) {
|
|
6658
|
+
handleError(4, [], [2, 5]);
|
|
6659
|
+
}
|
|
6660
|
+
needsComma = true;
|
|
6661
|
+
}
|
|
6662
|
+
onObjectEnd();
|
|
6663
|
+
if (_scanner.getToken() !== 2) {
|
|
6664
|
+
handleError(7, [2], []);
|
|
6665
|
+
} else {
|
|
6666
|
+
scanNext();
|
|
6667
|
+
}
|
|
6668
|
+
return true;
|
|
6669
|
+
}
|
|
6670
|
+
function parseArray2() {
|
|
6671
|
+
onArrayBegin();
|
|
6672
|
+
scanNext();
|
|
6673
|
+
let isFirstElement = true;
|
|
6674
|
+
let needsComma = false;
|
|
6675
|
+
while (_scanner.getToken() !== 4 && _scanner.getToken() !== 17) {
|
|
6676
|
+
if (_scanner.getToken() === 5) {
|
|
6677
|
+
if (!needsComma) {
|
|
6678
|
+
handleError(4, [], []);
|
|
6679
|
+
}
|
|
6680
|
+
onSeparator(",");
|
|
6681
|
+
scanNext();
|
|
6682
|
+
if (_scanner.getToken() === 4 && allowTrailingComma) {
|
|
6683
|
+
break;
|
|
6684
|
+
}
|
|
6685
|
+
} else if (needsComma) {
|
|
6686
|
+
handleError(6, [], []);
|
|
6687
|
+
}
|
|
6688
|
+
if (isFirstElement) {
|
|
6689
|
+
_jsonPath.push(0);
|
|
6690
|
+
isFirstElement = false;
|
|
6691
|
+
} else {
|
|
6692
|
+
_jsonPath[_jsonPath.length - 1]++;
|
|
6693
|
+
}
|
|
6694
|
+
if (!parseValue2()) {
|
|
6695
|
+
handleError(4, [], [4, 5]);
|
|
6696
|
+
}
|
|
6697
|
+
needsComma = true;
|
|
6698
|
+
}
|
|
6699
|
+
onArrayEnd();
|
|
6700
|
+
if (!isFirstElement) {
|
|
6701
|
+
_jsonPath.pop();
|
|
6702
|
+
}
|
|
6703
|
+
if (_scanner.getToken() !== 4) {
|
|
6704
|
+
handleError(8, [4], []);
|
|
6705
|
+
} else {
|
|
6706
|
+
scanNext();
|
|
6707
|
+
}
|
|
6708
|
+
return true;
|
|
6709
|
+
}
|
|
6710
|
+
function parseValue2() {
|
|
6711
|
+
switch (_scanner.getToken()) {
|
|
6712
|
+
case 3:
|
|
6713
|
+
return parseArray2();
|
|
6714
|
+
case 1:
|
|
6715
|
+
return parseObject();
|
|
6716
|
+
case 10:
|
|
6717
|
+
return parseString2(true);
|
|
6718
|
+
default:
|
|
6719
|
+
return parseLiteral();
|
|
6720
|
+
}
|
|
6721
|
+
}
|
|
6722
|
+
scanNext();
|
|
6723
|
+
if (_scanner.getToken() === 17) {
|
|
6724
|
+
if (options.allowEmptyContent) {
|
|
6725
|
+
return true;
|
|
6726
|
+
}
|
|
6727
|
+
handleError(4, [], []);
|
|
6728
|
+
return false;
|
|
6729
|
+
}
|
|
6730
|
+
if (!parseValue2()) {
|
|
6731
|
+
handleError(4, [], []);
|
|
6732
|
+
return false;
|
|
6733
|
+
}
|
|
6734
|
+
if (_scanner.getToken() !== 17) {
|
|
6735
|
+
handleError(9, [], []);
|
|
6736
|
+
}
|
|
6737
|
+
return true;
|
|
6738
|
+
}
|
|
6739
|
+
function getNodeType(value) {
|
|
6740
|
+
switch (typeof value) {
|
|
6741
|
+
case "boolean":
|
|
6742
|
+
return "boolean";
|
|
6743
|
+
case "number":
|
|
6744
|
+
return "number";
|
|
6745
|
+
case "string":
|
|
6746
|
+
return "string";
|
|
6747
|
+
case "object": {
|
|
6748
|
+
if (!value) {
|
|
6749
|
+
return "null";
|
|
6750
|
+
} else if (Array.isArray(value)) {
|
|
6751
|
+
return "array";
|
|
6752
|
+
}
|
|
6753
|
+
return "object";
|
|
6754
|
+
}
|
|
6755
|
+
default:
|
|
6756
|
+
return "null";
|
|
6757
|
+
}
|
|
6758
|
+
}
|
|
6759
|
+
|
|
6760
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/edit.js
|
|
6761
|
+
function setProperty(text, originalPath, value, options) {
|
|
6762
|
+
const path = originalPath.slice();
|
|
6763
|
+
const errors = [];
|
|
6764
|
+
const root = parseTree(text, errors);
|
|
6765
|
+
let parent = undefined;
|
|
6766
|
+
let lastSegment = undefined;
|
|
6767
|
+
while (path.length > 0) {
|
|
6768
|
+
lastSegment = path.pop();
|
|
6769
|
+
parent = findNodeAtLocation(root, path);
|
|
6770
|
+
if (parent === undefined && value !== undefined) {
|
|
6771
|
+
if (typeof lastSegment === "string") {
|
|
6772
|
+
value = { [lastSegment]: value };
|
|
6773
|
+
} else {
|
|
6774
|
+
value = [value];
|
|
6775
|
+
}
|
|
6776
|
+
} else {
|
|
6777
|
+
break;
|
|
6778
|
+
}
|
|
6779
|
+
}
|
|
6780
|
+
if (!parent) {
|
|
6781
|
+
if (value === undefined) {
|
|
6782
|
+
throw new Error("Can not delete in empty document");
|
|
6783
|
+
}
|
|
6784
|
+
return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);
|
|
6785
|
+
} else if (parent.type === "object" && typeof lastSegment === "string" && Array.isArray(parent.children)) {
|
|
6786
|
+
const existing = findNodeAtLocation(parent, [lastSegment]);
|
|
6787
|
+
if (existing !== undefined) {
|
|
6788
|
+
if (value === undefined) {
|
|
6789
|
+
if (!existing.parent) {
|
|
6790
|
+
throw new Error("Malformed AST");
|
|
6791
|
+
}
|
|
6792
|
+
const propertyIndex = parent.children.indexOf(existing.parent);
|
|
6793
|
+
let removeBegin;
|
|
6794
|
+
let removeEnd = existing.parent.offset + existing.parent.length;
|
|
6795
|
+
if (propertyIndex > 0) {
|
|
6796
|
+
let previous = parent.children[propertyIndex - 1];
|
|
6797
|
+
removeBegin = previous.offset + previous.length;
|
|
6798
|
+
} else {
|
|
6799
|
+
removeBegin = parent.offset + 1;
|
|
6800
|
+
if (parent.children.length > 1) {
|
|
6801
|
+
let next = parent.children[1];
|
|
6802
|
+
removeEnd = next.offset;
|
|
6803
|
+
}
|
|
6804
|
+
}
|
|
6805
|
+
return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: "" }, options);
|
|
6806
|
+
} else {
|
|
6807
|
+
return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);
|
|
6808
|
+
}
|
|
6809
|
+
} else {
|
|
6810
|
+
if (value === undefined) {
|
|
6811
|
+
return [];
|
|
6812
|
+
}
|
|
6813
|
+
const newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;
|
|
6814
|
+
const index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map((p) => p.children[0].value)) : parent.children.length;
|
|
6815
|
+
let edit;
|
|
6816
|
+
if (index > 0) {
|
|
6817
|
+
let previous = parent.children[index - 1];
|
|
6818
|
+
edit = { offset: previous.offset + previous.length, length: 0, content: "," + newProperty };
|
|
6819
|
+
} else if (parent.children.length === 0) {
|
|
6820
|
+
edit = { offset: parent.offset + 1, length: 0, content: newProperty };
|
|
6821
|
+
} else {
|
|
6822
|
+
edit = { offset: parent.offset + 1, length: 0, content: newProperty + "," };
|
|
6823
|
+
}
|
|
6824
|
+
return withFormatting(text, edit, options);
|
|
6825
|
+
}
|
|
6826
|
+
} else if (parent.type === "array" && typeof lastSegment === "number" && Array.isArray(parent.children)) {
|
|
6827
|
+
const insertIndex = lastSegment;
|
|
6828
|
+
if (insertIndex === -1) {
|
|
6829
|
+
const newProperty = `${JSON.stringify(value)}`;
|
|
6830
|
+
let edit;
|
|
6831
|
+
if (parent.children.length === 0) {
|
|
6832
|
+
edit = { offset: parent.offset + 1, length: 0, content: newProperty };
|
|
6833
|
+
} else {
|
|
6834
|
+
const previous = parent.children[parent.children.length - 1];
|
|
6835
|
+
edit = { offset: previous.offset + previous.length, length: 0, content: "," + newProperty };
|
|
6836
|
+
}
|
|
6837
|
+
return withFormatting(text, edit, options);
|
|
6838
|
+
} else if (value === undefined && parent.children.length >= 0) {
|
|
6839
|
+
const removalIndex = lastSegment;
|
|
6840
|
+
const toRemove = parent.children[removalIndex];
|
|
6841
|
+
let edit;
|
|
6842
|
+
if (parent.children.length === 1) {
|
|
6843
|
+
edit = { offset: parent.offset + 1, length: parent.length - 2, content: "" };
|
|
6844
|
+
} else if (parent.children.length - 1 === removalIndex) {
|
|
6845
|
+
let previous = parent.children[removalIndex - 1];
|
|
6846
|
+
let offset = previous.offset + previous.length;
|
|
6847
|
+
let parentEndOffset = parent.offset + parent.length;
|
|
6848
|
+
edit = { offset, length: parentEndOffset - 2 - offset, content: "" };
|
|
6849
|
+
} else {
|
|
6850
|
+
edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: "" };
|
|
6851
|
+
}
|
|
6852
|
+
return withFormatting(text, edit, options);
|
|
6853
|
+
} else if (value !== undefined) {
|
|
6854
|
+
let edit;
|
|
6855
|
+
const newProperty = `${JSON.stringify(value)}`;
|
|
6856
|
+
if (!options.isArrayInsertion && parent.children.length > lastSegment) {
|
|
6857
|
+
const toModify = parent.children[lastSegment];
|
|
6858
|
+
edit = { offset: toModify.offset, length: toModify.length, content: newProperty };
|
|
6859
|
+
} else if (parent.children.length === 0 || lastSegment === 0) {
|
|
6860
|
+
edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + "," };
|
|
6861
|
+
} else {
|
|
6862
|
+
const index = lastSegment > parent.children.length ? parent.children.length : lastSegment;
|
|
6863
|
+
const previous = parent.children[index - 1];
|
|
6864
|
+
edit = { offset: previous.offset + previous.length, length: 0, content: "," + newProperty };
|
|
6865
|
+
}
|
|
6866
|
+
return withFormatting(text, edit, options);
|
|
6867
|
+
} else {
|
|
6868
|
+
throw new Error(`Can not ${value === undefined ? "remove" : options.isArrayInsertion ? "insert" : "modify"} Array index ${insertIndex} as length is not sufficient`);
|
|
6869
|
+
}
|
|
6870
|
+
} else {
|
|
6871
|
+
throw new Error(`Can not add ${typeof lastSegment !== "number" ? "index" : "property"} to parent of type ${parent.type}`);
|
|
6872
|
+
}
|
|
6873
|
+
}
|
|
6874
|
+
function withFormatting(text, edit, options) {
|
|
6875
|
+
if (!options.formattingOptions) {
|
|
6876
|
+
return [edit];
|
|
6877
|
+
}
|
|
6878
|
+
let newText = applyEdit(text, edit);
|
|
6879
|
+
let begin = edit.offset;
|
|
6880
|
+
let end = edit.offset + edit.content.length;
|
|
6881
|
+
if (edit.length === 0 || edit.content.length === 0) {
|
|
6882
|
+
while (begin > 0 && !isEOL(newText, begin - 1)) {
|
|
6883
|
+
begin--;
|
|
6884
|
+
}
|
|
6885
|
+
while (end < newText.length && !isEOL(newText, end)) {
|
|
6886
|
+
end++;
|
|
6887
|
+
}
|
|
6888
|
+
}
|
|
6889
|
+
const edits = format(newText, { offset: begin, length: end - begin }, { ...options.formattingOptions, keepLines: false });
|
|
6890
|
+
for (let i = edits.length - 1;i >= 0; i--) {
|
|
6891
|
+
const edit2 = edits[i];
|
|
6892
|
+
newText = applyEdit(newText, edit2);
|
|
6893
|
+
begin = Math.min(begin, edit2.offset);
|
|
6894
|
+
end = Math.max(end, edit2.offset + edit2.length);
|
|
6895
|
+
end += edit2.content.length - edit2.length;
|
|
6896
|
+
}
|
|
6897
|
+
const editLength = text.length - (newText.length - end) - begin;
|
|
6898
|
+
return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];
|
|
6899
|
+
}
|
|
6900
|
+
function applyEdit(text, edit) {
|
|
6901
|
+
return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);
|
|
6902
|
+
}
|
|
6903
|
+
|
|
6904
|
+
// node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/main.js
|
|
6905
|
+
var ScanError;
|
|
6906
|
+
(function(ScanError2) {
|
|
6907
|
+
ScanError2[ScanError2["None"] = 0] = "None";
|
|
6908
|
+
ScanError2[ScanError2["UnexpectedEndOfComment"] = 1] = "UnexpectedEndOfComment";
|
|
6909
|
+
ScanError2[ScanError2["UnexpectedEndOfString"] = 2] = "UnexpectedEndOfString";
|
|
6910
|
+
ScanError2[ScanError2["UnexpectedEndOfNumber"] = 3] = "UnexpectedEndOfNumber";
|
|
6911
|
+
ScanError2[ScanError2["InvalidUnicode"] = 4] = "InvalidUnicode";
|
|
6912
|
+
ScanError2[ScanError2["InvalidEscapeCharacter"] = 5] = "InvalidEscapeCharacter";
|
|
6913
|
+
ScanError2[ScanError2["InvalidCharacter"] = 6] = "InvalidCharacter";
|
|
6914
|
+
})(ScanError || (ScanError = {}));
|
|
6915
|
+
var SyntaxKind;
|
|
6916
|
+
(function(SyntaxKind2) {
|
|
6917
|
+
SyntaxKind2[SyntaxKind2["OpenBraceToken"] = 1] = "OpenBraceToken";
|
|
6918
|
+
SyntaxKind2[SyntaxKind2["CloseBraceToken"] = 2] = "CloseBraceToken";
|
|
6919
|
+
SyntaxKind2[SyntaxKind2["OpenBracketToken"] = 3] = "OpenBracketToken";
|
|
6920
|
+
SyntaxKind2[SyntaxKind2["CloseBracketToken"] = 4] = "CloseBracketToken";
|
|
6921
|
+
SyntaxKind2[SyntaxKind2["CommaToken"] = 5] = "CommaToken";
|
|
6922
|
+
SyntaxKind2[SyntaxKind2["ColonToken"] = 6] = "ColonToken";
|
|
6923
|
+
SyntaxKind2[SyntaxKind2["NullKeyword"] = 7] = "NullKeyword";
|
|
6924
|
+
SyntaxKind2[SyntaxKind2["TrueKeyword"] = 8] = "TrueKeyword";
|
|
6925
|
+
SyntaxKind2[SyntaxKind2["FalseKeyword"] = 9] = "FalseKeyword";
|
|
6926
|
+
SyntaxKind2[SyntaxKind2["StringLiteral"] = 10] = "StringLiteral";
|
|
6927
|
+
SyntaxKind2[SyntaxKind2["NumericLiteral"] = 11] = "NumericLiteral";
|
|
6928
|
+
SyntaxKind2[SyntaxKind2["LineCommentTrivia"] = 12] = "LineCommentTrivia";
|
|
6929
|
+
SyntaxKind2[SyntaxKind2["BlockCommentTrivia"] = 13] = "BlockCommentTrivia";
|
|
6930
|
+
SyntaxKind2[SyntaxKind2["LineBreakTrivia"] = 14] = "LineBreakTrivia";
|
|
6931
|
+
SyntaxKind2[SyntaxKind2["Trivia"] = 15] = "Trivia";
|
|
6932
|
+
SyntaxKind2[SyntaxKind2["Unknown"] = 16] = "Unknown";
|
|
6933
|
+
SyntaxKind2[SyntaxKind2["EOF"] = 17] = "EOF";
|
|
6934
|
+
})(SyntaxKind || (SyntaxKind = {}));
|
|
6935
|
+
var parse3 = parse2;
|
|
6936
|
+
var ParseErrorCode;
|
|
6937
|
+
(function(ParseErrorCode2) {
|
|
6938
|
+
ParseErrorCode2[ParseErrorCode2["InvalidSymbol"] = 1] = "InvalidSymbol";
|
|
6939
|
+
ParseErrorCode2[ParseErrorCode2["InvalidNumberFormat"] = 2] = "InvalidNumberFormat";
|
|
6940
|
+
ParseErrorCode2[ParseErrorCode2["PropertyNameExpected"] = 3] = "PropertyNameExpected";
|
|
6941
|
+
ParseErrorCode2[ParseErrorCode2["ValueExpected"] = 4] = "ValueExpected";
|
|
6942
|
+
ParseErrorCode2[ParseErrorCode2["ColonExpected"] = 5] = "ColonExpected";
|
|
6943
|
+
ParseErrorCode2[ParseErrorCode2["CommaExpected"] = 6] = "CommaExpected";
|
|
6944
|
+
ParseErrorCode2[ParseErrorCode2["CloseBraceExpected"] = 7] = "CloseBraceExpected";
|
|
6945
|
+
ParseErrorCode2[ParseErrorCode2["CloseBracketExpected"] = 8] = "CloseBracketExpected";
|
|
6946
|
+
ParseErrorCode2[ParseErrorCode2["EndOfFileExpected"] = 9] = "EndOfFileExpected";
|
|
6947
|
+
ParseErrorCode2[ParseErrorCode2["InvalidCommentToken"] = 10] = "InvalidCommentToken";
|
|
6948
|
+
ParseErrorCode2[ParseErrorCode2["UnexpectedEndOfComment"] = 11] = "UnexpectedEndOfComment";
|
|
6949
|
+
ParseErrorCode2[ParseErrorCode2["UnexpectedEndOfString"] = 12] = "UnexpectedEndOfString";
|
|
6950
|
+
ParseErrorCode2[ParseErrorCode2["UnexpectedEndOfNumber"] = 13] = "UnexpectedEndOfNumber";
|
|
6951
|
+
ParseErrorCode2[ParseErrorCode2["InvalidUnicode"] = 14] = "InvalidUnicode";
|
|
6952
|
+
ParseErrorCode2[ParseErrorCode2["InvalidEscapeCharacter"] = 15] = "InvalidEscapeCharacter";
|
|
6953
|
+
ParseErrorCode2[ParseErrorCode2["InvalidCharacter"] = 16] = "InvalidCharacter";
|
|
6954
|
+
})(ParseErrorCode || (ParseErrorCode = {}));
|
|
6955
|
+
function modify(text, path, value, options) {
|
|
6956
|
+
return setProperty(text, path, value, options);
|
|
6957
|
+
}
|
|
6958
|
+
function applyEdits(text, edits) {
|
|
6959
|
+
let sortedEdits = edits.slice(0).sort((a, b) => {
|
|
6960
|
+
const diff = a.offset - b.offset;
|
|
6961
|
+
if (diff === 0) {
|
|
6962
|
+
return a.length - b.length;
|
|
6963
|
+
}
|
|
6964
|
+
return diff;
|
|
6965
|
+
});
|
|
6966
|
+
let lastModifiedOffset = text.length;
|
|
6967
|
+
for (let i = sortedEdits.length - 1;i >= 0; i--) {
|
|
6968
|
+
let e = sortedEdits[i];
|
|
6969
|
+
if (e.offset + e.length <= lastModifiedOffset) {
|
|
6970
|
+
text = applyEdit(text, e);
|
|
6971
|
+
} else {
|
|
6972
|
+
throw new Error("Overlapping edit");
|
|
6973
|
+
}
|
|
6974
|
+
lastModifiedOffset = e.offset;
|
|
6975
|
+
}
|
|
6976
|
+
return text;
|
|
6977
|
+
}
|
|
6978
|
+
|
|
5656
6979
|
// src/adapters/opencode/paths.ts
|
|
6980
|
+
import { existsSync } from "fs";
|
|
5657
6981
|
import { homedir as homedir3 } from "os";
|
|
5658
6982
|
import { join as join3 } from "path";
|
|
5659
|
-
var
|
|
5660
|
-
var PLUGIN_DIRNAME = "plugins";
|
|
6983
|
+
var CARET_PACKAGE = "@macintacos/caret";
|
|
5661
6984
|
var COMMAND_DIRNAME = "commands";
|
|
5662
6985
|
var COMMAND_NAMESPACE = "caret:";
|
|
5663
6986
|
function namespacedCommandFilename(sourceName) {
|
|
5664
6987
|
return `${COMMAND_NAMESPACE}${sourceName}`;
|
|
5665
6988
|
}
|
|
5666
|
-
var CONFIG_FILENAMES = ["
|
|
5667
|
-
var OPENCODE_PLUGIN_DEP = "@opencode-ai/plugin";
|
|
5668
|
-
var OPENCODE_PLUGIN_DEP_VERSION = "1.16.2";
|
|
5669
|
-
var PACKAGE_JSON_FILENAME = "package.json";
|
|
5670
|
-
function packageJsonPath(configDir) {
|
|
5671
|
-
return join3(configDir, PACKAGE_JSON_FILENAME);
|
|
5672
|
-
}
|
|
6989
|
+
var CONFIG_FILENAMES = ["opencode.jsonc", "opencode.json", "config.json"];
|
|
5673
6990
|
function opencodeConfigDir() {
|
|
5674
6991
|
const override = process.env.OPENCODE_CONFIG_DIR?.trim();
|
|
5675
6992
|
if (override)
|
|
@@ -5677,44 +6994,60 @@ function opencodeConfigDir() {
|
|
|
5677
6994
|
const xdg = process.env.XDG_CONFIG_HOME?.trim();
|
|
5678
6995
|
return join3(xdg || join3(homedir3(), ".config"), "opencode");
|
|
5679
6996
|
}
|
|
5680
|
-
function
|
|
5681
|
-
|
|
6997
|
+
function resolveConfigFile(configDir) {
|
|
6998
|
+
for (const name of CONFIG_FILENAMES) {
|
|
6999
|
+
const p = join3(configDir, name);
|
|
7000
|
+
if (existsSync(p))
|
|
7001
|
+
return p;
|
|
7002
|
+
}
|
|
7003
|
+
return join3(configDir, "opencode.json");
|
|
5682
7004
|
}
|
|
5683
7005
|
function commandDir(configDir) {
|
|
5684
7006
|
return join3(configDir, COMMAND_DIRNAME);
|
|
5685
7007
|
}
|
|
7008
|
+
function opencodeCachePackageDir(pkg = CARET_PACKAGE) {
|
|
7009
|
+
const xdg = process.env.XDG_CACHE_HOME?.trim();
|
|
7010
|
+
const base = xdg || join3(homedir3(), ".cache");
|
|
7011
|
+
return join3(base, "opencode", "node_modules", pkg);
|
|
7012
|
+
}
|
|
5686
7013
|
|
|
5687
7014
|
// src/adapters/opencode/install.ts
|
|
5688
|
-
var VERSION_MARKER = /CARET_PLUGIN_VERSION\s*=\s*["']([^"']+)["']/;
|
|
5689
7015
|
function readOpencodeInstallState() {
|
|
5690
7016
|
const dir = opencodeConfigDir();
|
|
5691
|
-
if (!
|
|
7017
|
+
if (!existsSync2(dir)) {
|
|
5692
7018
|
return { pluginVersion: "unknown", pluginEnabled: "unknown", hookInUserSettings: "unknown" };
|
|
5693
7019
|
}
|
|
5694
|
-
const
|
|
7020
|
+
const cacheDir = opencodeCachePackageDir();
|
|
5695
7021
|
return {
|
|
5696
|
-
pluginVersion:
|
|
5697
|
-
pluginEnabled:
|
|
5698
|
-
hookInUserSettings:
|
|
7022
|
+
pluginVersion: readCachedVersion(cacheDir),
|
|
7023
|
+
pluginEnabled: existsSync2(cacheDir),
|
|
7024
|
+
hookInUserSettings: readCaretInPluginArray(dir)
|
|
5699
7025
|
};
|
|
5700
7026
|
}
|
|
5701
|
-
function
|
|
5702
|
-
let text;
|
|
7027
|
+
function readCachedVersion(cachePackageDir) {
|
|
5703
7028
|
try {
|
|
5704
|
-
|
|
7029
|
+
const v = JSON.parse(readFileSync3(join4(cachePackageDir, "package.json"), "utf-8")).version;
|
|
7030
|
+
return typeof v === "string" ? v : "unknown";
|
|
5705
7031
|
} catch {
|
|
5706
7032
|
return "unknown";
|
|
5707
7033
|
}
|
|
5708
|
-
return text.match(VERSION_MARKER)?.[1] ?? "unknown";
|
|
5709
7034
|
}
|
|
5710
|
-
function
|
|
7035
|
+
function readCaretInPluginArray(dir) {
|
|
5711
7036
|
let sawConfig = false;
|
|
5712
7037
|
for (const name of CONFIG_FILENAMES) {
|
|
5713
|
-
const
|
|
5714
|
-
if (
|
|
7038
|
+
const path = join4(dir, name);
|
|
7039
|
+
if (!existsSync2(path))
|
|
7040
|
+
continue;
|
|
7041
|
+
let cfg;
|
|
7042
|
+
try {
|
|
7043
|
+
cfg = parse3(readFileSync3(path, "utf-8"));
|
|
7044
|
+
} catch {
|
|
7045
|
+
continue;
|
|
7046
|
+
}
|
|
7047
|
+
if (cfg === undefined || cfg === null)
|
|
5715
7048
|
continue;
|
|
5716
7049
|
sawConfig = true;
|
|
5717
|
-
const arr =
|
|
7050
|
+
const arr = cfg.plugin;
|
|
5718
7051
|
if (Array.isArray(arr) && arr.some((e) => typeof e === "string" && e.includes("caret"))) {
|
|
5719
7052
|
return true;
|
|
5720
7053
|
}
|
|
@@ -5790,10 +7123,17 @@ import { createHash } from "crypto";
|
|
|
5790
7123
|
// package.json
|
|
5791
7124
|
var package_default = {
|
|
5792
7125
|
name: "@macintacos/caret",
|
|
5793
|
-
version: "0.
|
|
7126
|
+
version: "0.4.0",
|
|
5794
7127
|
license: "MIT",
|
|
5795
7128
|
type: "module",
|
|
5796
7129
|
description: "A Claude Code plugin that replaces the terminal plan-approval prompt with a local web UI for inline review, annotation, and approval.",
|
|
7130
|
+
main: "./opencode/index.ts",
|
|
7131
|
+
exports: {
|
|
7132
|
+
".": "./opencode/index.ts"
|
|
7133
|
+
},
|
|
7134
|
+
bin: {
|
|
7135
|
+
caret: "./bin/caret"
|
|
7136
|
+
},
|
|
5797
7137
|
homepage: "https://github.com/macintacos/caret",
|
|
5798
7138
|
repository: {
|
|
5799
7139
|
type: "git",
|
|
@@ -5819,9 +7159,9 @@ var package_default = {
|
|
|
5819
7159
|
},
|
|
5820
7160
|
devDependencies: {
|
|
5821
7161
|
"@happy-dom/global-registrator": "^20.9.0",
|
|
5822
|
-
"@opencode-ai/plugin": "^1.16.2",
|
|
5823
7162
|
"@playwright/test": "^1.60.0",
|
|
5824
7163
|
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
7164
|
+
"@tailwindcss/vite": "^4.3.2",
|
|
5825
7165
|
"@types/bun": "^1.3.14",
|
|
5826
7166
|
"@types/semver": "^7.7.1",
|
|
5827
7167
|
"happy-dom": "^20.9.0",
|
|
@@ -5829,6 +7169,8 @@ var package_default = {
|
|
|
5829
7169
|
"pino-pretty": "^13.1.3",
|
|
5830
7170
|
svelte: "^5.55.9",
|
|
5831
7171
|
"svelte-check": "^4.4.8",
|
|
7172
|
+
tailwindcss: "^4.3.2",
|
|
7173
|
+
"tw-animate-css": "^1.4.0",
|
|
5832
7174
|
typescript: "^6.0.3",
|
|
5833
7175
|
vite: "^8.0.14"
|
|
5834
7176
|
},
|
|
@@ -5840,15 +7182,22 @@ var package_default = {
|
|
|
5840
7182
|
"@codemirror/state": "^6.6.0",
|
|
5841
7183
|
"@codemirror/view": "^6.43.0",
|
|
5842
7184
|
"@commander-js/extra-typings": "^15.0.0",
|
|
7185
|
+
"@internationalized/date": "^3.12.2",
|
|
5843
7186
|
"@lezer/highlight": "^1.2.3",
|
|
7187
|
+
"@opencode-ai/plugin": "^1.16.2",
|
|
5844
7188
|
"@pierre/diffs": "1.2.7",
|
|
7189
|
+
"bits-ui": "^2.18.1",
|
|
7190
|
+
clsx: "^2.1.1",
|
|
5845
7191
|
commander: "^15.0.0",
|
|
7192
|
+
"jsonc-parser": "^3.3.1",
|
|
5846
7193
|
marked: "^18.0.4",
|
|
5847
7194
|
pino: "^10.3.1",
|
|
5848
7195
|
prettier: "3.8.3",
|
|
5849
7196
|
semver: "^7.8.1",
|
|
5850
7197
|
shiki: "^4.1.0",
|
|
5851
7198
|
"smol-toml": "1.6.1",
|
|
7199
|
+
"tailwind-merge": "^3.6.0",
|
|
7200
|
+
"tailwind-variants": "^3.2.2",
|
|
5852
7201
|
xss: "^1.0.15",
|
|
5853
7202
|
zod: "4.4.3"
|
|
5854
7203
|
}
|
|
@@ -5981,7 +7330,7 @@ function currentCommit() {
|
|
|
5981
7330
|
|
|
5982
7331
|
// src/commands/daemon.ts
|
|
5983
7332
|
import { randomUUID } from "crypto";
|
|
5984
|
-
import { existsSync as
|
|
7333
|
+
import { existsSync as existsSync4, unlinkSync as unlinkSync3 } from "fs";
|
|
5985
7334
|
|
|
5986
7335
|
// src/daemon-lifecycle.ts
|
|
5987
7336
|
import { openSync, unlinkSync } from "fs";
|
|
@@ -6393,7 +7742,7 @@ __export(exports_external, {
|
|
|
6393
7742
|
pipe: () => pipe,
|
|
6394
7743
|
partialRecord: () => partialRecord,
|
|
6395
7744
|
parseAsync: () => parseAsync2,
|
|
6396
|
-
parse: () =>
|
|
7745
|
+
parse: () => parse6,
|
|
6397
7746
|
overwrite: () => _overwrite,
|
|
6398
7747
|
optional: () => optional,
|
|
6399
7748
|
object: () => object,
|
|
@@ -6595,7 +7944,7 @@ __export(exports_core2, {
|
|
|
6595
7944
|
process: () => process2,
|
|
6596
7945
|
prettifyError: () => prettifyError,
|
|
6597
7946
|
parseAsync: () => parseAsync,
|
|
6598
|
-
parse: () =>
|
|
7947
|
+
parse: () => parse4,
|
|
6599
7948
|
meta: () => meta,
|
|
6600
7949
|
locales: () => exports_locales,
|
|
6601
7950
|
isValidJWT: () => isValidJWT,
|
|
@@ -7779,7 +9128,7 @@ var _parse = (_Err) => (schema, value, _ctx, _params) => {
|
|
|
7779
9128
|
}
|
|
7780
9129
|
return result.value;
|
|
7781
9130
|
};
|
|
7782
|
-
var
|
|
9131
|
+
var parse4 = /* @__PURE__ */ _parse($ZodRealError);
|
|
7783
9132
|
var _parseAsync = (_Err) => async (schema, value, _ctx, params) => {
|
|
7784
9133
|
const ctx = _ctx ? { ..._ctx, async: true } : { async: true };
|
|
7785
9134
|
let result = schema._zod.run({ value, issues: [] }, ctx);
|
|
@@ -10566,10 +11915,10 @@ var $ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => {
|
|
|
10566
11915
|
throw new Error("implement() must be called with a function");
|
|
10567
11916
|
}
|
|
10568
11917
|
return function(...args) {
|
|
10569
|
-
const parsedArgs = inst._def.input ?
|
|
11918
|
+
const parsedArgs = inst._def.input ? parse4(inst._def.input, args) : args;
|
|
10570
11919
|
const result = Reflect.apply(func, this, parsedArgs);
|
|
10571
11920
|
if (inst._def.output) {
|
|
10572
|
-
return
|
|
11921
|
+
return parse4(inst._def.output, result);
|
|
10573
11922
|
}
|
|
10574
11923
|
return result;
|
|
10575
11924
|
};
|
|
@@ -17542,13 +18891,13 @@ function _stringbool(Classes, _params) {
|
|
|
17542
18891
|
});
|
|
17543
18892
|
return codec;
|
|
17544
18893
|
}
|
|
17545
|
-
function _stringFormat(Class2,
|
|
18894
|
+
function _stringFormat(Class2, format2, fnOrRegex, _params = {}) {
|
|
17546
18895
|
const params = normalizeParams(_params);
|
|
17547
18896
|
const def = {
|
|
17548
18897
|
...normalizeParams(_params),
|
|
17549
18898
|
check: "string_format",
|
|
17550
18899
|
type: "string",
|
|
17551
|
-
format,
|
|
18900
|
+
format: format2,
|
|
17552
18901
|
fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
|
|
17553
18902
|
...params
|
|
17554
18903
|
};
|
|
@@ -17921,16 +19270,16 @@ var formatMap = {
|
|
|
17921
19270
|
var stringProcessor = (schema, ctx, _json, _params) => {
|
|
17922
19271
|
const json = _json;
|
|
17923
19272
|
json.type = "string";
|
|
17924
|
-
const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;
|
|
19273
|
+
const { minimum, maximum, format: format2, patterns, contentEncoding } = schema._zod.bag;
|
|
17925
19274
|
if (typeof minimum === "number")
|
|
17926
19275
|
json.minLength = minimum;
|
|
17927
19276
|
if (typeof maximum === "number")
|
|
17928
19277
|
json.maxLength = maximum;
|
|
17929
|
-
if (
|
|
17930
|
-
json.format = formatMap[
|
|
19278
|
+
if (format2) {
|
|
19279
|
+
json.format = formatMap[format2] ?? format2;
|
|
17931
19280
|
if (json.format === "")
|
|
17932
19281
|
delete json.format;
|
|
17933
|
-
if (
|
|
19282
|
+
if (format2 === "time") {
|
|
17934
19283
|
delete json.format;
|
|
17935
19284
|
}
|
|
17936
19285
|
}
|
|
@@ -17952,8 +19301,8 @@ var stringProcessor = (schema, ctx, _json, _params) => {
|
|
|
17952
19301
|
};
|
|
17953
19302
|
var numberProcessor = (schema, ctx, _json, _params) => {
|
|
17954
19303
|
const json = _json;
|
|
17955
|
-
const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
|
|
17956
|
-
if (typeof
|
|
19304
|
+
const { minimum, maximum, format: format2, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
|
|
19305
|
+
if (typeof format2 === "string" && format2.includes("int"))
|
|
17957
19306
|
json.type = "integer";
|
|
17958
19307
|
else
|
|
17959
19308
|
json.type = "number";
|
|
@@ -18791,7 +20140,7 @@ var ZodRealError = /* @__PURE__ */ $constructor("ZodError", initializer2, {
|
|
|
18791
20140
|
});
|
|
18792
20141
|
|
|
18793
20142
|
// node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/parse.js
|
|
18794
|
-
var
|
|
20143
|
+
var parse6 = /* @__PURE__ */ _parse(ZodRealError);
|
|
18795
20144
|
var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
|
|
18796
20145
|
var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
18797
20146
|
var safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError);
|
|
@@ -18854,7 +20203,7 @@ var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
|
18854
20203
|
inst.def = def;
|
|
18855
20204
|
inst.type = def.type;
|
|
18856
20205
|
Object.defineProperty(inst, "_def", { value: def });
|
|
18857
|
-
inst.parse = (data, params) =>
|
|
20206
|
+
inst.parse = (data, params) => parse6(inst, data, params, { callee: inst.parse });
|
|
18858
20207
|
inst.safeParse = (data, params) => safeParse2(inst, data, params);
|
|
18859
20208
|
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
|
|
18860
20209
|
inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params);
|
|
@@ -19225,8 +20574,8 @@ var ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat"
|
|
|
19225
20574
|
$ZodCustomStringFormat.init(inst, def);
|
|
19226
20575
|
ZodStringFormat.init(inst, def);
|
|
19227
20576
|
});
|
|
19228
|
-
function stringFormat(
|
|
19229
|
-
return _stringFormat(ZodCustomStringFormat,
|
|
20577
|
+
function stringFormat(format2, fnOrRegex, _params = {}) {
|
|
20578
|
+
return _stringFormat(ZodCustomStringFormat, format2, fnOrRegex, _params);
|
|
19230
20579
|
}
|
|
19231
20580
|
function hostname2(_params) {
|
|
19232
20581
|
return _stringFormat(ZodCustomStringFormat, "hostname", exports_regexes.hostname, _params);
|
|
@@ -19236,11 +20585,11 @@ function hex2(_params) {
|
|
|
19236
20585
|
}
|
|
19237
20586
|
function hash(alg, params) {
|
|
19238
20587
|
const enc = params?.enc ?? "hex";
|
|
19239
|
-
const
|
|
19240
|
-
const regex = exports_regexes[
|
|
20588
|
+
const format2 = `${alg}_${enc}`;
|
|
20589
|
+
const regex = exports_regexes[format2];
|
|
19241
20590
|
if (!regex)
|
|
19242
|
-
throw new Error(`Unrecognized hash format: ${
|
|
19243
|
-
return _stringFormat(ZodCustomStringFormat,
|
|
20591
|
+
throw new Error(`Unrecognized hash format: ${format2}`);
|
|
20592
|
+
return _stringFormat(ZodCustomStringFormat, format2, regex, params);
|
|
19244
20593
|
}
|
|
19245
20594
|
var ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => {
|
|
19246
20595
|
$ZodNumber.init(inst, def);
|
|
@@ -20295,52 +21644,52 @@ function convertBaseSchema(schema, ctx) {
|
|
|
20295
21644
|
case "string": {
|
|
20296
21645
|
let stringSchema = z.string();
|
|
20297
21646
|
if (schema.format) {
|
|
20298
|
-
const
|
|
20299
|
-
if (
|
|
21647
|
+
const format2 = schema.format;
|
|
21648
|
+
if (format2 === "email") {
|
|
20300
21649
|
stringSchema = stringSchema.check(z.email());
|
|
20301
|
-
} else if (
|
|
21650
|
+
} else if (format2 === "uri" || format2 === "uri-reference") {
|
|
20302
21651
|
stringSchema = stringSchema.check(z.url());
|
|
20303
|
-
} else if (
|
|
21652
|
+
} else if (format2 === "uuid" || format2 === "guid") {
|
|
20304
21653
|
stringSchema = stringSchema.check(z.uuid());
|
|
20305
|
-
} else if (
|
|
21654
|
+
} else if (format2 === "date-time") {
|
|
20306
21655
|
stringSchema = stringSchema.check(z.iso.datetime());
|
|
20307
|
-
} else if (
|
|
21656
|
+
} else if (format2 === "date") {
|
|
20308
21657
|
stringSchema = stringSchema.check(z.iso.date());
|
|
20309
|
-
} else if (
|
|
21658
|
+
} else if (format2 === "time") {
|
|
20310
21659
|
stringSchema = stringSchema.check(z.iso.time());
|
|
20311
|
-
} else if (
|
|
21660
|
+
} else if (format2 === "duration") {
|
|
20312
21661
|
stringSchema = stringSchema.check(z.iso.duration());
|
|
20313
|
-
} else if (
|
|
21662
|
+
} else if (format2 === "ipv4") {
|
|
20314
21663
|
stringSchema = stringSchema.check(z.ipv4());
|
|
20315
|
-
} else if (
|
|
21664
|
+
} else if (format2 === "ipv6") {
|
|
20316
21665
|
stringSchema = stringSchema.check(z.ipv6());
|
|
20317
|
-
} else if (
|
|
21666
|
+
} else if (format2 === "mac") {
|
|
20318
21667
|
stringSchema = stringSchema.check(z.mac());
|
|
20319
|
-
} else if (
|
|
21668
|
+
} else if (format2 === "cidr") {
|
|
20320
21669
|
stringSchema = stringSchema.check(z.cidrv4());
|
|
20321
|
-
} else if (
|
|
21670
|
+
} else if (format2 === "cidr-v6") {
|
|
20322
21671
|
stringSchema = stringSchema.check(z.cidrv6());
|
|
20323
|
-
} else if (
|
|
21672
|
+
} else if (format2 === "base64") {
|
|
20324
21673
|
stringSchema = stringSchema.check(z.base64());
|
|
20325
|
-
} else if (
|
|
21674
|
+
} else if (format2 === "base64url") {
|
|
20326
21675
|
stringSchema = stringSchema.check(z.base64url());
|
|
20327
|
-
} else if (
|
|
21676
|
+
} else if (format2 === "e164") {
|
|
20328
21677
|
stringSchema = stringSchema.check(z.e164());
|
|
20329
|
-
} else if (
|
|
21678
|
+
} else if (format2 === "jwt") {
|
|
20330
21679
|
stringSchema = stringSchema.check(z.jwt());
|
|
20331
|
-
} else if (
|
|
21680
|
+
} else if (format2 === "emoji") {
|
|
20332
21681
|
stringSchema = stringSchema.check(z.emoji());
|
|
20333
|
-
} else if (
|
|
21682
|
+
} else if (format2 === "nanoid") {
|
|
20334
21683
|
stringSchema = stringSchema.check(z.nanoid());
|
|
20335
|
-
} else if (
|
|
21684
|
+
} else if (format2 === "cuid") {
|
|
20336
21685
|
stringSchema = stringSchema.check(z.cuid());
|
|
20337
|
-
} else if (
|
|
21686
|
+
} else if (format2 === "cuid2") {
|
|
20338
21687
|
stringSchema = stringSchema.check(z.cuid2());
|
|
20339
|
-
} else if (
|
|
21688
|
+
} else if (format2 === "ulid") {
|
|
20340
21689
|
stringSchema = stringSchema.check(z.ulid());
|
|
20341
|
-
} else if (
|
|
21690
|
+
} else if (format2 === "xid") {
|
|
20342
21691
|
stringSchema = stringSchema.check(z.xid());
|
|
20343
|
-
} else if (
|
|
21692
|
+
} else if (format2 === "ksuid") {
|
|
20344
21693
|
stringSchema = stringSchema.check(z.ksuid());
|
|
20345
21694
|
}
|
|
20346
21695
|
}
|
|
@@ -21168,14 +22517,14 @@ async function writeApproveMode(mode, file2 = prefsFile(), log = noopLogger, set
|
|
|
21168
22517
|
import { randomBytes } from "crypto";
|
|
21169
22518
|
|
|
21170
22519
|
// src/plan-file.ts
|
|
21171
|
-
import { existsSync as
|
|
22520
|
+
import { existsSync as existsSync3, statSync as statSync3, writeFileSync as writeFileSync2 } from "fs";
|
|
21172
22521
|
function writeCanonicalPlanFile(planFilePath, canonical, log) {
|
|
21173
22522
|
if (!planFilePath)
|
|
21174
22523
|
return;
|
|
21175
22524
|
try {
|
|
21176
22525
|
if (!planFilePath.endsWith(".md"))
|
|
21177
22526
|
return;
|
|
21178
|
-
if (!
|
|
22527
|
+
if (!existsSync3(planFilePath) || !statSync3(planFilePath).isFile())
|
|
21179
22528
|
return;
|
|
21180
22529
|
writeFileSync2(planFilePath, canonical);
|
|
21181
22530
|
} catch (err) {
|
|
@@ -28682,7 +30031,7 @@ async function runDaemon(opts) {
|
|
|
28682
30031
|
const log = createDaemonLogger(() => svc.current().logging.level, undefined, () => svc.current().logging.redact);
|
|
28683
30032
|
const cfg = configFile();
|
|
28684
30033
|
const boot = svc.current();
|
|
28685
|
-
log.info("settings",
|
|
30034
|
+
log.info("settings", existsSync4(cfg) ? `settings: reading ${cfg}` : `settings: no config at ${cfg}; using defaults`, { settings: boot });
|
|
28686
30035
|
warnInvalidEnvVars((msg) => log.warn("env", msg));
|
|
28687
30036
|
const adapter = selectAdapter();
|
|
28688
30037
|
const store = createStore(reviewsDir(), log);
|
|
@@ -28741,7 +30090,7 @@ async function runDaemon(opts) {
|
|
|
28741
30090
|
}
|
|
28742
30091
|
|
|
28743
30092
|
// src/commands/discovery.ts
|
|
28744
|
-
import { existsSync as
|
|
30093
|
+
import { existsSync as existsSync5 } from "fs";
|
|
28745
30094
|
import { release } from "os";
|
|
28746
30095
|
|
|
28747
30096
|
// src/discovery.ts
|
|
@@ -29019,7 +30368,7 @@ function prodDiscoveryDeps(s) {
|
|
|
29019
30368
|
}),
|
|
29020
30369
|
settings: () => s,
|
|
29021
30370
|
configPath: configFile(),
|
|
29022
|
-
configExists: () =>
|
|
30371
|
+
configExists: () => existsSync5(configFile()),
|
|
29023
30372
|
effective: () => ({
|
|
29024
30373
|
port: getPort(s),
|
|
29025
30374
|
idleMs: idleMs(s),
|
|
@@ -29053,42 +30402,111 @@ async function runDiscoverySubcommand(opts) {
|
|
|
29053
30402
|
}
|
|
29054
30403
|
}
|
|
29055
30404
|
|
|
30405
|
+
// src/commands/install-claude.ts
|
|
30406
|
+
var MARKETPLACE_SOURCE = "macintacos/caret";
|
|
30407
|
+
var PLUGIN_REF = "caret@caret";
|
|
30408
|
+
var claudeCli = (args) => {
|
|
30409
|
+
try {
|
|
30410
|
+
const res = Bun.spawnSync(["claude", ...args], { stdout: "pipe", stderr: "pipe" });
|
|
30411
|
+
if (res.exitCode === 0)
|
|
30412
|
+
return { ok: true, detail: "" };
|
|
30413
|
+
const err = new TextDecoder().decode(res.stderr).trim();
|
|
30414
|
+
return { ok: false, detail: err || `claude exited ${res.exitCode}` };
|
|
30415
|
+
} catch (e) {
|
|
30416
|
+
const missing = e instanceof Error && e.code === "ENOENT";
|
|
30417
|
+
return { ok: false, missing, detail: e instanceof Error ? e.message : String(e) };
|
|
30418
|
+
}
|
|
30419
|
+
};
|
|
30420
|
+
function runInstallClaudeTarget(opts, deps = {}) {
|
|
30421
|
+
const run = deps.claude ?? claudeCli;
|
|
30422
|
+
const steps = opts.uninstall ? [["plugin", "uninstall", PLUGIN_REF]] : [
|
|
30423
|
+
["plugin", "marketplace", "add", MARKETPLACE_SOURCE],
|
|
30424
|
+
["plugin", "install", PLUGIN_REF, "--scope", "user"],
|
|
30425
|
+
["plugin", "enable", PLUGIN_REF]
|
|
30426
|
+
];
|
|
30427
|
+
if (opts.dryRun) {
|
|
30428
|
+
process.stdout.write(`caret: [dry-run] would run for Claude Code:
|
|
30429
|
+
`);
|
|
30430
|
+
for (const s of steps)
|
|
30431
|
+
process.stdout.write(` claude ${s.join(" ")}
|
|
30432
|
+
`);
|
|
30433
|
+
return;
|
|
30434
|
+
}
|
|
30435
|
+
for (const args of steps) {
|
|
30436
|
+
const r = run(args);
|
|
30437
|
+
if (r.ok)
|
|
30438
|
+
continue;
|
|
30439
|
+
if (r.missing) {
|
|
30440
|
+
process.stderr.write(`caret: the \`claude\` CLI was not found. Install Claude Code (https://claude.com/claude-code) and re-run \`caret install --target claude\`, or add caret in Claude Code via \`/plugin marketplace add ${MARKETPLACE_SOURCE}\`.
|
|
30441
|
+
`);
|
|
30442
|
+
return;
|
|
30443
|
+
}
|
|
30444
|
+
if (args[1] !== "install")
|
|
30445
|
+
continue;
|
|
30446
|
+
process.stderr.write(`caret: \`claude ${args.join(" ")}\` failed: ${r.detail}
|
|
30447
|
+
`);
|
|
30448
|
+
return;
|
|
30449
|
+
}
|
|
30450
|
+
const verb = opts.uninstall ? "removed" : "installed";
|
|
30451
|
+
process.stdout.write(`caret: ${verb} caret in Claude Code (${PLUGIN_REF}).
|
|
30452
|
+
`);
|
|
30453
|
+
}
|
|
30454
|
+
|
|
29056
30455
|
// src/commands/install-opencode.ts
|
|
29057
|
-
import { existsSync as
|
|
30456
|
+
import { existsSync as existsSync8, readFileSync as readFileSync8, writeFileSync as writeFileSync5 } from "fs";
|
|
29058
30457
|
import { join as join10 } from "path";
|
|
29059
30458
|
|
|
29060
|
-
// src/adapters/opencode/
|
|
29061
|
-
|
|
29062
|
-
|
|
29063
|
-
|
|
29064
|
-
return
|
|
29065
|
-
}
|
|
29066
|
-
function
|
|
29067
|
-
|
|
29068
|
-
|
|
29069
|
-
|
|
29070
|
-
|
|
30459
|
+
// src/adapters/opencode/config-plugin.ts
|
|
30460
|
+
var FORMATTING = { insertSpaces: true, tabSize: 2 };
|
|
30461
|
+
function pluginArray(text) {
|
|
30462
|
+
const cfg = parse3(text);
|
|
30463
|
+
return Array.isArray(cfg?.plugin) ? cfg.plugin : [];
|
|
30464
|
+
}
|
|
30465
|
+
function packageName(spec) {
|
|
30466
|
+
if (spec.startsWith("@")) {
|
|
30467
|
+
const slash = spec.indexOf("/");
|
|
30468
|
+
if (slash === -1)
|
|
30469
|
+
return spec;
|
|
30470
|
+
const at3 = spec.indexOf("@", slash + 1);
|
|
30471
|
+
return at3 === -1 ? spec : spec.slice(0, at3);
|
|
30472
|
+
}
|
|
30473
|
+
const at2 = spec.indexOf("@");
|
|
30474
|
+
return at2 === -1 ? spec : spec.slice(0, at2);
|
|
30475
|
+
}
|
|
30476
|
+
function entryNames(entry, pkg) {
|
|
30477
|
+
return typeof entry === "string" && packageName(entry) === packageName(pkg);
|
|
30478
|
+
}
|
|
30479
|
+
function addPluginToConfigText(existing, pkg) {
|
|
30480
|
+
const text = existing ?? `{}
|
|
29071
30481
|
`;
|
|
30482
|
+
const current = parse3(text)?.plugin;
|
|
30483
|
+
if (Array.isArray(current)) {
|
|
30484
|
+
if (current.some((e) => entryNames(e, pkg)))
|
|
30485
|
+
return text;
|
|
30486
|
+
const path = ["plugin", current.length];
|
|
30487
|
+
const edits2 = modify(text, path, pkg, {
|
|
30488
|
+
isArrayInsertion: true,
|
|
30489
|
+
formattingOptions: FORMATTING
|
|
30490
|
+
});
|
|
30491
|
+
return applyEdits(text, edits2);
|
|
30492
|
+
}
|
|
30493
|
+
const edits = modify(text, ["plugin"], [pkg], { formattingOptions: FORMATTING });
|
|
30494
|
+
return applyEdits(text, edits);
|
|
29072
30495
|
}
|
|
29073
|
-
function
|
|
29074
|
-
|
|
29075
|
-
|
|
29076
|
-
const obj = JSON.parse(existing);
|
|
29077
|
-
if (!isObject2(obj.dependencies) || !(pkg in obj.dependencies))
|
|
30496
|
+
function removePluginFromConfigText(existing, pkg) {
|
|
30497
|
+
const arr = pluginArray(existing);
|
|
30498
|
+
if (!arr.some((e) => entryNames(e, pkg)))
|
|
29078
30499
|
return existing;
|
|
29079
|
-
|
|
29080
|
-
|
|
29081
|
-
|
|
29082
|
-
if (Object.keys(obj).length === 0)
|
|
29083
|
-
return null;
|
|
29084
|
-
return `${JSON.stringify(obj, null, 2)}
|
|
29085
|
-
`;
|
|
29086
|
-
}
|
|
29087
|
-
function isObject2(v2) {
|
|
29088
|
-
return typeof v2 === "object" && v2 !== null && !Array.isArray(v2);
|
|
30500
|
+
const next = arr.filter((e) => !entryNames(e, pkg));
|
|
30501
|
+
const edits = modify(existing, ["plugin"], next, { formattingOptions: FORMATTING });
|
|
30502
|
+
return applyEdits(existing, edits);
|
|
29089
30503
|
}
|
|
29090
|
-
|
|
29091
|
-
|
|
30504
|
+
|
|
30505
|
+
// src/adapters/opencode/deploy.ts
|
|
30506
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync2, rmSync, writeFileSync as writeFileSync4 } from "fs";
|
|
30507
|
+
import { dirname as dirname5 } from "path";
|
|
30508
|
+
function renderPlugin(source, opts) {
|
|
30509
|
+
return source.replaceAll("__CARET_VERSION__", () => opts.version).replaceAll("__CARET_BIN__", () => opts.binPath);
|
|
29092
30510
|
}
|
|
29093
30511
|
function deployFiles(files, opts) {
|
|
29094
30512
|
const paths = [];
|
|
@@ -29104,7 +30522,7 @@ function deployFiles(files, opts) {
|
|
|
29104
30522
|
function removeFiles(targets, opts) {
|
|
29105
30523
|
const paths = [];
|
|
29106
30524
|
for (const p of targets) {
|
|
29107
|
-
if (!
|
|
30525
|
+
if (!existsSync6(p))
|
|
29108
30526
|
continue;
|
|
29109
30527
|
if (!opts.dryRun)
|
|
29110
30528
|
rmSync(p, { force: true });
|
|
@@ -29114,7 +30532,7 @@ function removeFiles(targets, opts) {
|
|
|
29114
30532
|
}
|
|
29115
30533
|
|
|
29116
30534
|
// src/adapters/opencode/packaging.ts
|
|
29117
|
-
import { existsSync as
|
|
30535
|
+
import { existsSync as existsSync7, readdirSync as readdirSync4, readFileSync as readFileSync7 } from "fs";
|
|
29118
30536
|
import { dirname as dirname6, join as join9 } from "path";
|
|
29119
30537
|
function resolveCaretRoot() {
|
|
29120
30538
|
const candidates = [];
|
|
@@ -29123,13 +30541,12 @@ function resolveCaretRoot() {
|
|
|
29123
30541
|
candidates.push(join9(dirname6(script), ".."));
|
|
29124
30542
|
candidates.push(join9(dirname6(process.execPath), ".."));
|
|
29125
30543
|
for (const root of candidates) {
|
|
29126
|
-
if (
|
|
30544
|
+
if (existsSync7(join9(root, "opencode", "caret.plugin.ts")))
|
|
29127
30545
|
return root;
|
|
29128
30546
|
}
|
|
29129
30547
|
throw new Error(`caret OpenCode packaging not found (no opencode/caret.plugin.ts under: ${candidates.join(", ") || "(none)"}). The OpenCode plugin source must ship with caret.`);
|
|
29130
30548
|
}
|
|
29131
30549
|
function loadOpencodePackaging(root = resolveCaretRoot()) {
|
|
29132
|
-
const pluginSource = readFileSync7(join9(root, "opencode", "caret.plugin.ts"), "utf-8");
|
|
29133
30550
|
const binPath = join9(root, "bin", "caret");
|
|
29134
30551
|
const commandsDir = join9(root, "opencode", "commands");
|
|
29135
30552
|
let commands = [];
|
|
@@ -29138,105 +30555,95 @@ function loadOpencodePackaging(root = resolveCaretRoot()) {
|
|
|
29138
30555
|
} catch {
|
|
29139
30556
|
commands = [];
|
|
29140
30557
|
}
|
|
29141
|
-
return {
|
|
30558
|
+
return { binPath, commands };
|
|
29142
30559
|
}
|
|
29143
30560
|
|
|
29144
30561
|
// src/commands/install-opencode.ts
|
|
29145
|
-
function
|
|
30562
|
+
function runInstallOpencodeTarget(opts, deps = {}) {
|
|
29146
30563
|
const dir = deps.configDir ?? opencodeConfigDir();
|
|
29147
30564
|
const pkg = deps.packaging ?? loadOpencodePackaging();
|
|
29148
|
-
const
|
|
30565
|
+
const configFile2 = resolveConfigFile(dir);
|
|
29149
30566
|
const commandPaths = pkg.commands.map((c) => join10(commandDir(dir), namespacedCommandFilename(c.name)));
|
|
29150
30567
|
if (opts.uninstall) {
|
|
29151
|
-
const
|
|
29152
|
-
const
|
|
29153
|
-
printResult("removed", [...
|
|
30568
|
+
const changed2 = editConfig(configFile2, (text) => text === null ? null : removePluginFromConfigText(text, CARET_PACKAGE), opts.dryRun);
|
|
30569
|
+
const removed = removeFiles(commandPaths, { dryRun: opts.dryRun });
|
|
30570
|
+
printResult("removed", [...changed2, ...removed.paths], opts.dryRun, dir);
|
|
29154
30571
|
return;
|
|
29155
30572
|
}
|
|
29156
|
-
const
|
|
29157
|
-
|
|
29158
|
-
|
|
29159
|
-
|
|
29160
|
-
|
|
29161
|
-
|
|
29162
|
-
|
|
29163
|
-
contents: renderPlugin(c.contents, { version: VERSION, binPath: pkg.binPath })
|
|
29164
|
-
}))
|
|
29165
|
-
];
|
|
29166
|
-
const result = deployFiles(files, { dryRun: opts.dryRun });
|
|
29167
|
-
const manifest = installManifest(dir, opts.dryRun);
|
|
29168
|
-
if (!opts.dryRun)
|
|
29169
|
-
ensureDependencyInstalled(dir, deps.installDeps ?? bunInstall);
|
|
29170
|
-
printResult("installed", [...result.paths, ...manifest], opts.dryRun, dir);
|
|
29171
|
-
}
|
|
29172
|
-
function ensureDependencyInstalled(dir, install) {
|
|
29173
|
-
const r = install(dir);
|
|
29174
|
-
if (r.ok) {
|
|
29175
|
-
process.stdout.write(`caret: installed the plugin dependency (${OPENCODE_PLUGIN_DEP}).
|
|
29176
|
-
`);
|
|
29177
|
-
} else {
|
|
29178
|
-
process.stderr.write(`caret: could not auto-install the plugin dependency (${r.detail}). Run \`bun install\` in ${dir} to finish, then restart OpenCode.
|
|
29179
|
-
`);
|
|
29180
|
-
}
|
|
30573
|
+
const changed = editConfig(configFile2, (text) => addPluginToConfigText(text, CARET_PACKAGE), opts.dryRun);
|
|
30574
|
+
const files = pkg.commands.map((c) => ({
|
|
30575
|
+
path: join10(commandDir(dir), namespacedCommandFilename(c.name)),
|
|
30576
|
+
contents: renderPlugin(c.contents, { version: VERSION, binPath: pkg.binPath })
|
|
30577
|
+
}));
|
|
30578
|
+
const deployed = deployFiles(files, { dryRun: opts.dryRun });
|
|
30579
|
+
printResult("installed", [...changed, ...deployed.paths], opts.dryRun, dir);
|
|
29181
30580
|
}
|
|
29182
|
-
|
|
29183
|
-
|
|
29184
|
-
|
|
29185
|
-
|
|
29186
|
-
stdout: "pipe",
|
|
29187
|
-
stderr: "pipe"
|
|
29188
|
-
});
|
|
29189
|
-
if (res.exitCode === 0)
|
|
29190
|
-
return { ok: true, detail: "" };
|
|
29191
|
-
const err = new TextDecoder().decode(res.stderr).trim();
|
|
29192
|
-
return { ok: false, detail: err || `bun install exited ${res.exitCode}` };
|
|
29193
|
-
} catch (e) {
|
|
29194
|
-
return { ok: false, detail: e instanceof Error ? e.message : String(e) };
|
|
29195
|
-
}
|
|
29196
|
-
};
|
|
29197
|
-
function installManifest(dir, dryRun) {
|
|
29198
|
-
const path = packageJsonPath(dir);
|
|
29199
|
-
const existing = existsSync7(path) ? readFileSync8(path, "utf-8") : null;
|
|
29200
|
-
let next;
|
|
29201
|
-
try {
|
|
29202
|
-
next = addPluginDependency(existing, OPENCODE_PLUGIN_DEP, OPENCODE_PLUGIN_DEP_VERSION);
|
|
29203
|
-
} catch {
|
|
29204
|
-
process.stderr.write(`caret: ${path} is not valid JSON \u2014 leaving it untouched. Add "${OPENCODE_PLUGIN_DEP}": "${OPENCODE_PLUGIN_DEP_VERSION}" to its dependencies so OpenCode can load the plugin.
|
|
29205
|
-
`);
|
|
30581
|
+
function editConfig(path, transform2, dryRun) {
|
|
30582
|
+
const existing = existsSync8(path) ? readFileSync8(path, "utf-8") : null;
|
|
30583
|
+
const next = transform2(existing);
|
|
30584
|
+
if (next === null || next === existing)
|
|
29206
30585
|
return [];
|
|
29207
|
-
}
|
|
29208
30586
|
if (!dryRun)
|
|
29209
30587
|
writeFileSync5(path, next);
|
|
29210
30588
|
return [path];
|
|
29211
30589
|
}
|
|
29212
|
-
function uninstallManifest(dir, dryRun) {
|
|
29213
|
-
const path = packageJsonPath(dir);
|
|
29214
|
-
if (!existsSync7(path))
|
|
29215
|
-
return [];
|
|
29216
|
-
const existing = readFileSync8(path, "utf-8");
|
|
29217
|
-
let next;
|
|
29218
|
-
try {
|
|
29219
|
-
next = removePluginDependency(existing, OPENCODE_PLUGIN_DEP);
|
|
29220
|
-
} catch {
|
|
29221
|
-
return [];
|
|
29222
|
-
}
|
|
29223
|
-
if (next === existing)
|
|
29224
|
-
return [];
|
|
29225
|
-
if (!dryRun) {
|
|
29226
|
-
if (next === null)
|
|
29227
|
-
rmSync2(path, { force: true });
|
|
29228
|
-
else
|
|
29229
|
-
writeFileSync5(path, next);
|
|
29230
|
-
}
|
|
29231
|
-
return [path];
|
|
29232
|
-
}
|
|
29233
30590
|
function printResult(verb, paths, dryRun, dir) {
|
|
29234
|
-
|
|
29235
|
-
|
|
30591
|
+
if (paths.length === 0) {
|
|
30592
|
+
const noun = verb === "removed" ? "remove" : "install";
|
|
30593
|
+
process.stdout.write(`caret: nothing to ${noun} for OpenCode under ${dir}.
|
|
30594
|
+
`);
|
|
30595
|
+
return;
|
|
30596
|
+
}
|
|
30597
|
+
const lead = dryRun ? `[dry-run] would have ${verb}` : verb;
|
|
30598
|
+
process.stdout.write(`caret: ${lead} caret in OpenCode (${paths.length} path(s)) under ${dir}:
|
|
29236
30599
|
`);
|
|
29237
30600
|
for (const p of paths)
|
|
29238
30601
|
process.stdout.write(` ${p}
|
|
29239
30602
|
`);
|
|
30603
|
+
if (verb === "installed" && !dryRun) {
|
|
30604
|
+
process.stdout.write(`caret: restart OpenCode once so it installs and loads the plugin.
|
|
30605
|
+
`);
|
|
30606
|
+
}
|
|
30607
|
+
}
|
|
30608
|
+
|
|
30609
|
+
// src/commands/install.ts
|
|
30610
|
+
var KNOWN_TARGETS = ["opencode", "claude"];
|
|
30611
|
+
function parseTargets(raw) {
|
|
30612
|
+
const parts = (raw ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
30613
|
+
if (parts.length === 0) {
|
|
30614
|
+
return {
|
|
30615
|
+
error: `--target is required (a comma-separated list of: ${KNOWN_TARGETS.join(", ")}).`
|
|
30616
|
+
};
|
|
30617
|
+
}
|
|
30618
|
+
const unknown2 = parts.filter((p) => !KNOWN_TARGETS.includes(p));
|
|
30619
|
+
if (unknown2.length > 0) {
|
|
30620
|
+
return {
|
|
30621
|
+
error: `unknown --target value(s): ${unknown2.join(", ")}. Valid: ${KNOWN_TARGETS.join(", ")}.`
|
|
30622
|
+
};
|
|
30623
|
+
}
|
|
30624
|
+
const targets = [];
|
|
30625
|
+
for (const p of parts)
|
|
30626
|
+
if (!targets.includes(p))
|
|
30627
|
+
targets.push(p);
|
|
30628
|
+
return { targets };
|
|
30629
|
+
}
|
|
30630
|
+
function runInstallSubcommand(opts, deps = {}) {
|
|
30631
|
+
const parsed = parseTargets(opts.target);
|
|
30632
|
+
if ("error" in parsed) {
|
|
30633
|
+
process.stderr.write(`caret: ${parsed.error}
|
|
30634
|
+
`);
|
|
30635
|
+
process.exitCode = 2;
|
|
30636
|
+
return;
|
|
30637
|
+
}
|
|
30638
|
+
const runOpencode = deps.runOpencode ?? ((o) => runInstallOpencodeTarget(o));
|
|
30639
|
+
const runClaude = deps.runClaude ?? ((o) => runInstallClaudeTarget(o));
|
|
30640
|
+
const targetOpts = { uninstall: opts.uninstall, dryRun: opts.dryRun };
|
|
30641
|
+
for (const target of parsed.targets) {
|
|
30642
|
+
if (target === "opencode")
|
|
30643
|
+
runOpencode(targetOpts);
|
|
30644
|
+
else
|
|
30645
|
+
runClaude(targetOpts);
|
|
30646
|
+
}
|
|
29240
30647
|
}
|
|
29241
30648
|
|
|
29242
30649
|
// src/commands/prewarm.ts
|
|
@@ -32870,14 +34277,15 @@ function runProgram(program2, onError) {
|
|
|
32870
34277
|
|
|
32871
34278
|
// src/cli.ts
|
|
32872
34279
|
function buildProgram() {
|
|
32873
|
-
const program2 = createProgram("caret", "caret hook CLI: daemon | prewarm | review | reconcile | redact | discovery | install
|
|
34280
|
+
const program2 = createProgram("caret", "caret hook CLI: daemon | prewarm | review | reconcile | redact | discovery | install").version(VERSION);
|
|
32874
34281
|
program2.command("daemon").description("run the review daemon").option("--ephemeral", "bind an OS-assigned port instead of the configured one").action((opts) => runDaemon({ ephemeral: opts.ephemeral ?? false }));
|
|
32875
34282
|
program2.command("prewarm").description("warm-start the daemon").action(() => runPrewarm());
|
|
32876
34283
|
program2.command("review").description("review a plan from stdin (ExitPlanMode hook)").action(() => runReviewSubcommand());
|
|
32877
34284
|
program2.command("reconcile").description("reconcile a terminal plan approval into the daemon (ExitPlanMode PostToolUse hook)").action(() => runReconcileSubcommand());
|
|
32878
34285
|
program2.command("redact").description("write redacted copies of the logs").action(() => runRedactSubcommand());
|
|
32879
34286
|
program2.command("discovery").description("print a diagnostics report").option("--json", "emit the machine-readable JSON document").action((opts) => runDiscoverySubcommand({ json: opts.json ?? false }));
|
|
32880
|
-
program2.command("install
|
|
34287
|
+
program2.command("install").description("install caret into a coding agent (--target opencode,claude)").requiredOption("--target <targets>", "comma-separated agents to install into: opencode, claude, or opencode,claude").option("--uninstall", "remove caret from the target(s) instead of installing").option("--dry-run", "print what would change without writing").action((opts) => runInstallSubcommand({
|
|
34288
|
+
target: opts.target,
|
|
32881
34289
|
uninstall: opts.uninstall ?? false,
|
|
32882
34290
|
dryRun: opts.dryRun ?? false
|
|
32883
34291
|
}));
|