@lsproxy/cli 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -15
- package/dist/apply.d.ts +5 -1
- package/dist/apply.d.ts.map +1 -1
- package/dist/apply.js +13 -2
- package/dist/apply.js.map +1 -1
- package/dist/cli.js +6 -6
- package/dist/connect.js +2 -2
- package/dist/session.d.ts +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +12 -4
- package/dist/session.js.map +1 -1
- package/package.json +7 -7
- package/dist/commands/move-file.d.ts +0 -13
- package/dist/commands/move-file.d.ts.map +0 -1
- package/dist/commands/move-file.js +0 -84
- package/dist/commands/move-file.js.map +0 -1
- package/dist/commands/move-symbol.d.ts +0 -70
- package/dist/commands/move-symbol.d.ts.map +0 -1
- package/dist/commands/move-symbol.js +0 -154
- package/dist/commands/move-symbol.js.map +0 -1
- package/dist/commands/query.d.ts +0 -14
- package/dist/commands/query.d.ts.map +0 -1
- package/dist/commands/query.js +0 -46
- package/dist/commands/query.js.map +0 -1
- package/dist/commands/rename.d.ts +0 -14
- package/dist/commands/rename.d.ts.map +0 -1
- package/dist/commands/rename.js +0 -42
- package/dist/commands/rename.js.map +0 -1
- package/dist/discover.d.ts +0 -17
- package/dist/discover.d.ts.map +0 -1
- package/dist/discover.js +0 -46
- package/dist/discover.js.map +0 -1
package/README.md
CHANGED
|
@@ -15,29 +15,82 @@ pnpm add -g @lsproxy/cli # or install globally
|
|
|
15
15
|
## Usage
|
|
16
16
|
|
|
17
17
|
```
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
lsproxy <namespace> <command> [args] [flags]
|
|
19
|
+
lsproxy call <method> --params <json>
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
Commands are built from the server's capabilities at startup:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
lspeasy call textDocument/semanticTokens/full --params '{"textDocument":{"uri":"file:///…"}}'
|
|
25
|
+
lsproxy textDocument hover src/foo.ts 12:7
|
|
26
|
+
lsproxy textDocument rename src/foo.ts 12:7 newName
|
|
27
|
+
lsproxy textDocument references src/foo.ts 12:7
|
|
28
|
+
lsproxy textDocument definition src/foo.ts 12:7
|
|
29
|
+
lsproxy textDocument formatting src/foo.ts
|
|
30
|
+
lsproxy textDocument rangeFormatting src/foo.ts 1:1-50:1
|
|
31
|
+
lsproxy textDocument onTypeFormatting src/foo.ts 12:7 --ch ";" --on-type-formatting-tab-size 2 --on-type-formatting-insert-spaces true
|
|
32
|
+
lsproxy workspace symbol MyClass
|
|
33
|
+
lsproxy call textDocument/semanticTokens/full --params '{"textDocument":{"uri":"file:///…"}}'
|
|
35
34
|
```
|
|
36
35
|
|
|
37
36
|
Positions are **1-based** (`line:col`, editor-style).
|
|
38
37
|
Write-side commands (`rename`, `formatting`, code actions that produce edits)
|
|
39
38
|
apply changes to disk automatically. Pass `--dry-run` to preview instead.
|
|
40
39
|
|
|
40
|
+
### Code actions
|
|
41
|
+
|
|
42
|
+
`codeAction` returns a JSON array of available fixes and refactors for the given
|
|
43
|
+
range.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
lsproxy textDocument codeAction src/foo.ts 12:1-12:20
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
[
|
|
51
|
+
{ "title": "Add missing import", "kind": "quickfix" },
|
|
52
|
+
{ "title": "Extract to variable", "kind": "refactor.extract.variable" },
|
|
53
|
+
{ "title": "Convert to arrow function","kind": "refactor.rewrite",
|
|
54
|
+
"edit": { "changes": { "file:///src/foo.ts": [ ... ] } } }
|
|
55
|
+
]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**When exactly one** action in the result carries an `edit`, it is applied to
|
|
59
|
+
disk automatically. Use `--dry-run` to preview the diff instead:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
lsproxy textDocument codeAction --dry-run src/foo.ts 12:1-12:20
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
When the server returns zero or multiple edit-bearing actions, the full JSON
|
|
66
|
+
array is printed and no files are changed — pick the one you want and re-run
|
|
67
|
+
with `--params` to apply it directly.
|
|
68
|
+
|
|
69
|
+
## Help output
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
lsproxy — LSP-driven CLI
|
|
73
|
+
|
|
74
|
+
Usage:
|
|
75
|
+
lsproxy <namespace> <command> [args]
|
|
76
|
+
lsproxy call <method> --params <json>
|
|
77
|
+
|
|
78
|
+
Available commands depend on the connected server's advertised capabilities.
|
|
79
|
+
Run with a file argument to see available commands for that language:
|
|
80
|
+
lsproxy textDocument hover --help src/foo.ts
|
|
81
|
+
|
|
82
|
+
Global flags:
|
|
83
|
+
--server <cmd> LSP server launch command (overrides lsp.json discovery)
|
|
84
|
+
--root <dir> Project root (default: cwd)
|
|
85
|
+
--dry-run Print changes; do not write
|
|
86
|
+
--json Machine-readable JSON on stdout; diagnostics to stderr
|
|
87
|
+
--wait <ms> Server index wait in ms (default: 15000)
|
|
88
|
+
--verbose Progress logging to stderr
|
|
89
|
+
--allow-outside-root Allow file paths outside --root
|
|
90
|
+
--no-proxy Bypass proxy daemon; connect directly to language server
|
|
91
|
+
-h, --help Show this help
|
|
92
|
+
```
|
|
93
|
+
|
|
41
94
|
## Server discovery — `lsp.json`
|
|
42
95
|
|
|
43
96
|
Without `--server`, the CLI discovers which server to launch by looking for an
|
|
@@ -145,13 +198,13 @@ after 30 minutes of idle time.
|
|
|
145
198
|
|
|
146
199
|
```bash
|
|
147
200
|
# First invocation — daemon spawns, performs the initialize handshake (~1-3s)
|
|
148
|
-
|
|
201
|
+
lsproxy textDocument hover src/foo.ts 1:1
|
|
149
202
|
|
|
150
203
|
# Subsequent invocations — reconnects via Unix socket (<100ms)
|
|
151
|
-
|
|
204
|
+
lsproxy textDocument hover src/foo.ts 2:5
|
|
152
205
|
|
|
153
206
|
# Bypass the daemon entirely
|
|
154
|
-
|
|
207
|
+
lsproxy --no-proxy textDocument hover src/foo.ts 1:1
|
|
155
208
|
```
|
|
156
209
|
|
|
157
210
|
Socket path: `~/.lsproxy/<hash(root)>.sock`
|
package/dist/apply.d.ts
CHANGED
|
@@ -24,12 +24,16 @@ export interface LspTextEdit {
|
|
|
24
24
|
range: LspRange;
|
|
25
25
|
newText: string;
|
|
26
26
|
}
|
|
27
|
+
type RawEdit = LspTextEdit | {
|
|
28
|
+
range: LspRange;
|
|
29
|
+
snippet: unknown;
|
|
30
|
+
};
|
|
27
31
|
interface TextDocumentEdit {
|
|
28
32
|
textDocument: {
|
|
29
33
|
uri: string;
|
|
30
34
|
version?: number | null;
|
|
31
35
|
};
|
|
32
|
-
edits:
|
|
36
|
+
edits: RawEdit[];
|
|
33
37
|
}
|
|
34
38
|
interface CreateFileOp {
|
|
35
39
|
kind: 'create';
|
package/dist/apply.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,KAAK,OAAO,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAOnE,UAAU,gBAAgB;IACxB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7D;AACD,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7D;AACD,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAChE;AAED,KAAK,cAAc,GAAG,gBAAgB,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAuCD,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAWzE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAmC7F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,EACnB,IAAI,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClC,aAAa,CAYf;AA+FD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAsD9F"}
|
package/dist/apply.js
CHANGED
|
@@ -16,6 +16,10 @@ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync
|
|
|
16
16
|
import { dirname } from 'node:path';
|
|
17
17
|
import { fileURLToPath } from 'node:url';
|
|
18
18
|
import { assertTargetsInsideRoot } from './io.js';
|
|
19
|
+
/** Returns true for plain text edits; false for LSP 3.18 SnippetTextEdits. */
|
|
20
|
+
function isTextEdit(e) {
|
|
21
|
+
return 'newText' in e;
|
|
22
|
+
}
|
|
19
23
|
/**
|
|
20
24
|
* Collect every absolute filesystem path a {@link WorkspaceEdit} would touch —
|
|
21
25
|
* text-edit targets, `create` uri, `rename` old AND new uri, and `delete` uri —
|
|
@@ -125,7 +129,7 @@ export function planWorkspaceEdit(edit, guard) {
|
|
|
125
129
|
changes.push({
|
|
126
130
|
kind: 'edit',
|
|
127
131
|
path: fileURLToPath(dc.textDocument.uri),
|
|
128
|
-
editCount: dc.edits.length
|
|
132
|
+
editCount: dc.edits.filter(isTextEdit).length
|
|
129
133
|
});
|
|
130
134
|
}
|
|
131
135
|
}
|
|
@@ -299,7 +303,14 @@ export function applyWorkspaceEdit(edit, guard) {
|
|
|
299
303
|
applied.push(change);
|
|
300
304
|
}
|
|
301
305
|
else {
|
|
302
|
-
|
|
306
|
+
const snippetCount = dc.edits.filter((e) => !isTextEdit(e)).length;
|
|
307
|
+
if (snippetCount > 0) {
|
|
308
|
+
process.stderr.write(`warning: ${snippetCount} snippet edit(s) from server skipped (not supported by this tool)\n`);
|
|
309
|
+
}
|
|
310
|
+
applied.push(applyTextWrite({
|
|
311
|
+
path: fileURLToPath(dc.textDocument.uri),
|
|
312
|
+
edits: dc.edits.filter(isTextEdit)
|
|
313
|
+
}));
|
|
303
314
|
}
|
|
304
315
|
}
|
|
305
316
|
return applied;
|
package/dist/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAqBlD,8EAA8E;AAC9E,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,SAAS,IAAI,CAAC,CAAC;AACxB,CAAC;AAwCD;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAmB;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBACjB,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;qBACzD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,IAAmB,EAAE,KAAqB;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAYD;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,UAAoB,EAAE,UAAkB,EAAE,GAAgB;IAClF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;IACrD,OAAO,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAoB;IAC/D,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB,EAAE,KAAqB;IAC1E,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBACjB,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACnF,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAC3B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC;wBAC9B,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC;qBACjC,CAAC,CAAC;qBACA,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;oBACxC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;gBACxB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,MAAM;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAmB,EACnB,IAAmC;IAEnC,IAAI,CAAC,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;QAClD,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;QACxD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,qDAAqD;QAC9E,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,CAAC,uCAAuC;QAC9E,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACrC,0DAA0D;QAC1D,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAQD,4EAA4E;AAC5E,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,EAAgB;IACnC,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,4EAA4E;QAC5E,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IACD,wEAAwE;IACxE,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,CAAC;QACH,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc;gBAAE,OAAO,SAAS,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,gDAAgD,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,EAAgB;IACnC,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC1B,uEAAuE;QACvE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,6EAA6E;IAC7E,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc;YAAE,OAAO,SAAS,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,gDAAgD,CAAC,CAAC;IAC1F,CAAC;IACD,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,2EAA2E;AAC3E,SAAS,WAAW,CAAC,EAAgB;IACnC,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,kDAAkD;AAClD,SAAS,cAAc,CAAC,CAAY;IAClC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3D,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB,EAAE,KAAqB;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,oBAAoB;IACpB,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,0DAA0D;QAC1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,GACV,EAAE,CAAC,IAAI,KAAK,QAAQ;oBAClB,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;oBACjB,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ;wBACpB,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;wBACjB,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAI,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,YAAY,qEAAqE,CAC9F,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,IAAI,CACV,cAAc,CAAC;oBACb,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;oBACxC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;iBACnC,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,MAAM,GAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aAClD,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAQ,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;SACtB,CAAC,CAAC,CAAC;QACJ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -18,15 +18,15 @@ import { discoverServer } from '@lspeasy/core';
|
|
|
18
18
|
import { RefactorSession } from './session.js';
|
|
19
19
|
import { connectViaProxy } from './connect.js';
|
|
20
20
|
import { buildCommandTree } from './build-commands.js';
|
|
21
|
-
const STATIC_HELP = `
|
|
21
|
+
const STATIC_HELP = `lsproxy — LSP-driven CLI
|
|
22
22
|
|
|
23
23
|
Usage:
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
lsproxy <namespace> <command> [args]
|
|
25
|
+
lsproxy call <method> --params <json>
|
|
26
26
|
|
|
27
27
|
Available commands depend on the connected server's advertised capabilities.
|
|
28
28
|
Run with a file argument to see available commands for that language:
|
|
29
|
-
|
|
29
|
+
lsproxy textDocument hover --help src/foo.ts
|
|
30
30
|
|
|
31
31
|
Global flags:
|
|
32
32
|
--server <cmd> LSP server launch command (overrides lsp.json discovery)
|
|
@@ -160,7 +160,7 @@ async function main() {
|
|
|
160
160
|
const absPath = resolvePathArg(subArgFile, flags);
|
|
161
161
|
await session.open(absPath);
|
|
162
162
|
}
|
|
163
|
-
const program = new Command('
|
|
163
|
+
const program = new Command('lsproxy');
|
|
164
164
|
// Declare global options so Commander does not reject them in pass 2
|
|
165
165
|
program
|
|
166
166
|
.option('--server <cmd>')
|
|
@@ -182,7 +182,7 @@ async function main() {
|
|
|
182
182
|
* True when this module is the process entry point (vs. imported by a test).
|
|
183
183
|
*
|
|
184
184
|
* Compares resolved real paths of import.meta.url and argv[1]. The bin
|
|
185
|
-
* (
|
|
185
|
+
* (lsproxy) is installed as a symlink to dist/cli.js, so argv[1] is the
|
|
186
186
|
* symlink path while import.meta.url is Node's realpath — a plain compare
|
|
187
187
|
* would mismatch and never run main(). realpathSync on both sides makes the
|
|
188
188
|
* symlinked-bin and direct-invocation cases agree.
|
package/dist/connect.js
CHANGED
|
@@ -41,12 +41,12 @@ export async function connectViaProxy(opts) {
|
|
|
41
41
|
const alreadyUp = existsSync(sockPath) && (await tryConnect(sockPath));
|
|
42
42
|
if (!alreadyUp) {
|
|
43
43
|
if (opts.verbose)
|
|
44
|
-
process.stderr.write(`[
|
|
44
|
+
process.stderr.write(`[lsproxy] spawning proxy daemon\n`);
|
|
45
45
|
spawnDaemon(opts.root, sockPath);
|
|
46
46
|
await pollForSocket(sockPath, POLL_TIMEOUT_MS);
|
|
47
47
|
}
|
|
48
48
|
if (opts.verbose)
|
|
49
|
-
process.stderr.write(`[
|
|
49
|
+
process.stderr.write(`[lsproxy] connecting via proxy ${sockPath}\n`);
|
|
50
50
|
const transport = new SocketTransport({ path: sockPath });
|
|
51
51
|
await transport.waitForConnect();
|
|
52
52
|
const sessionOpts = {
|
package/dist/session.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface SessionOptions {
|
|
|
21
21
|
languageId?: string;
|
|
22
22
|
/** Milliseconds to wait for the server to index before the first request. */
|
|
23
23
|
indexWaitMs?: number;
|
|
24
|
-
/** Emit `[
|
|
24
|
+
/** Emit `[lsproxy] …` progress lines to stderr. */
|
|
25
25
|
verbose?: boolean;
|
|
26
26
|
/**
|
|
27
27
|
* Pre-built transport to use instead of spawning a server process.
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,iHAAiH;IACjH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAwFD;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAuB;IACpC,mEAAmE;IACnE,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAE9B;IACD,8DAA8D;IAC9D,KAAK,IAAI,aAAa,EAAE,CAIvB;CACF;AAgCD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IAErD,YAAY,IAAI,EAAE,cAAc,EAO/B;IAED,OAAO,CAAC,GAAG;IAIX,wFAAwF;IAClF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA8C3B;IAED,qDAAqD;IAC/C,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5C;IAED;;;;;;;;OAQG;IACG,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAarF;IAED;;;;OAIG;IACH,iBAAiB,IAAI,aAAa,EAAE,CAEnC;IAED,IAAI,GAAG,IAAI,SAAS,CAEnB;IAED,IAAI,YAAY,IAAI,kBAAkB,CAErC;IAED,OAAO,CAAC,aAAa;IAKrB,wDAAwD;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1B;CACF"}
|
package/dist/session.js
CHANGED
|
@@ -13,6 +13,14 @@ import { spawn } from 'node:child_process';
|
|
|
13
13
|
import { readFileSync } from 'node:fs';
|
|
14
14
|
import { basename, resolve } from 'node:path';
|
|
15
15
|
import { pathToFileURL } from 'node:url';
|
|
16
|
+
const CLI_VERSION = (() => {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '0.0.0';
|
|
22
|
+
}
|
|
23
|
+
})();
|
|
16
24
|
import { LSPClient } from '@lspeasy/client';
|
|
17
25
|
import { NullLogger, tokenizeCommand } from '@lspeasy/core';
|
|
18
26
|
import { StdioTransport } from '@lspeasy/core/node';
|
|
@@ -168,7 +176,7 @@ export class RefactorSession {
|
|
|
168
176
|
}
|
|
169
177
|
log(msg) {
|
|
170
178
|
if (this.opts.verbose)
|
|
171
|
-
process.stderr.write(`[
|
|
179
|
+
process.stderr.write(`[lsproxy] ${msg}\n`);
|
|
172
180
|
}
|
|
173
181
|
/** Spawn the server (or reuse a pre-built transport) and complete the LSP handshake. */
|
|
174
182
|
async start() {
|
|
@@ -189,13 +197,13 @@ export class RefactorSession {
|
|
|
189
197
|
const proc = spawn(cmd, args, { cwd: this.opts.root });
|
|
190
198
|
this.proc = proc;
|
|
191
199
|
proc.on('error', (e) => {
|
|
192
|
-
process.stderr.write(`[
|
|
200
|
+
process.stderr.write(`[lsproxy] server spawn error: ${e.message}\n`);
|
|
193
201
|
});
|
|
194
202
|
transport = new StdioTransport({ input: proc.stdout, output: proc.stdin });
|
|
195
203
|
}
|
|
196
204
|
const client = new LSPClient({
|
|
197
|
-
name: '
|
|
198
|
-
version:
|
|
205
|
+
name: 'lsproxy-cli',
|
|
206
|
+
version: CLI_VERSION,
|
|
199
207
|
capabilities: CLIENT_CAPABILITIES,
|
|
200
208
|
rootUri,
|
|
201
209
|
workspaceFolders: [{ uri: rootUri, name: basename(rootDir) }],
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lsproxy/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Standalone refactor CLI driving any LSP server: project-wide rename, file-move with importer updates, and move-symbol",
|
|
5
5
|
"private": false,
|
|
6
6
|
"keywords": [
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"type": "module",
|
|
28
28
|
"bin": {
|
|
29
|
-
"
|
|
29
|
+
"lsproxy": "./dist/cli.js"
|
|
30
30
|
},
|
|
31
31
|
"exports": {
|
|
32
32
|
".": {
|
|
@@ -44,17 +44,17 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"commander": "^
|
|
47
|
+
"commander": "^15.0.0",
|
|
48
48
|
"zod": "^4.4.3",
|
|
49
|
-
"@lspeasy/client": "3.1.
|
|
50
|
-
"@
|
|
51
|
-
"@
|
|
49
|
+
"@lspeasy/client": "3.1.2",
|
|
50
|
+
"@lsproxy/proxy": "1.0.1",
|
|
51
|
+
"@lspeasy/core": "2.3.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"typescript": "^6.0.3"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
|
57
|
-
"node": ">=22.
|
|
57
|
+
"node": ">=22.12.0"
|
|
58
58
|
},
|
|
59
59
|
"scripts": {
|
|
60
60
|
"build": "tsgo --build",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy move-file <oldPath> <newPath>`
|
|
3
|
-
*
|
|
4
|
-
* Asks the server for importer path updates via `workspace/willRenameFiles`,
|
|
5
|
-
* applies them, then physically moves the file. Uses `git mv` when the file is
|
|
6
|
-
* tracked (so history follows), falling back to a plain rename.
|
|
7
|
-
*/
|
|
8
|
-
import { type GlobalFlags } from '../io.js';
|
|
9
|
-
export declare function runMoveFile(args: {
|
|
10
|
-
oldPath: string;
|
|
11
|
-
newPath: string;
|
|
12
|
-
}, flags: GlobalFlags): Promise<void>;
|
|
13
|
-
//# sourceMappingURL=move-file.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"move-file.d.ts","sourceRoot":"","sources":["../../src/commands/move-file.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAgC9E,wBAAsB,WAAW,CAC/B,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC1C,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy move-file <oldPath> <newPath>`
|
|
3
|
-
*
|
|
4
|
-
* Asks the server for importer path updates via `workspace/willRenameFiles`,
|
|
5
|
-
* applies them, then physically moves the file. Uses `git mv` when the file is
|
|
6
|
-
* tracked (so history follows), falling back to a plain rename.
|
|
7
|
-
*/
|
|
8
|
-
import { execFileSync } from 'node:child_process';
|
|
9
|
-
import { existsSync, mkdirSync, renameSync } from 'node:fs';
|
|
10
|
-
import { dirname } from 'node:path';
|
|
11
|
-
import { pathToFileURL } from 'node:url';
|
|
12
|
-
import { applyWorkspaceEdit, planWorkspaceEdit, stripResourceOps } from '../apply.js';
|
|
13
|
-
import { emitResult, fail, resolvePathArg } from '../io.js';
|
|
14
|
-
import { RefactorSession } from '../session.js';
|
|
15
|
-
function isGitTracked(root, path) {
|
|
16
|
-
try {
|
|
17
|
-
execFileSync('git', ['ls-files', '--error-unmatch', path], { cwd: root, stdio: 'ignore' });
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function physicallyMove(root, from, to, dryRun, overwrite) {
|
|
25
|
-
if (!dryRun) {
|
|
26
|
-
mkdirSync(dirname(to), { recursive: true });
|
|
27
|
-
if (isGitTracked(root, from)) {
|
|
28
|
-
// `git mv` refuses an existing destination; `-f` is required to clobber.
|
|
29
|
-
const gitArgs = overwrite ? ['mv', '-f', from, to] : ['mv', from, to];
|
|
30
|
-
execFileSync('git', gitArgs, { cwd: root });
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
renameSync(from, to);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return { kind: 'rename', path: from, toPath: to };
|
|
37
|
-
}
|
|
38
|
-
export async function runMoveFile(args, flags) {
|
|
39
|
-
const from = resolvePathArg(args.oldPath, flags);
|
|
40
|
-
const to = resolvePathArg(args.newPath, flags);
|
|
41
|
-
if (!existsSync(from))
|
|
42
|
-
fail(`source file not found: ${from}`, flags.json);
|
|
43
|
-
// Refuse to clobber an existing destination unless --overwrite was given.
|
|
44
|
-
// `renameSync` (the untracked-file path) silently destroys the destination on
|
|
45
|
-
// POSIX, and `git mv` (without -f) refuses — so guard up-front, before
|
|
46
|
-
// spawning the server, so dry-run predicts the refusal too.
|
|
47
|
-
if (existsSync(to) && !flags.overwrite) {
|
|
48
|
-
fail(`destination already exists: ${to} (pass --overwrite to replace)`, flags.json);
|
|
49
|
-
}
|
|
50
|
-
const session = new RefactorSession({
|
|
51
|
-
serverCommand: flags.server,
|
|
52
|
-
root: flags.root,
|
|
53
|
-
indexWaitMs: flags.waitMs,
|
|
54
|
-
verbose: flags.verbose
|
|
55
|
-
});
|
|
56
|
-
try {
|
|
57
|
-
await session.start();
|
|
58
|
-
await session.openAndWait(from);
|
|
59
|
-
const edit = await session.requestWithRetry(() => session.lsp.sendRequest('workspace/willRenameFiles', {
|
|
60
|
-
files: [{ oldUri: pathToFileURL(from).href, newUri: pathToFileURL(to).href }]
|
|
61
|
-
}));
|
|
62
|
-
// A null edit just means no importers needed updating — still do the move.
|
|
63
|
-
// Strip ONLY the rename the server folded in that duplicates our physical
|
|
64
|
-
// move below (so `git mv` history is preserved); applying that rename here
|
|
65
|
-
// too would double-move and break a re-run with "source not found". Other
|
|
66
|
-
// resource ops the server emits (e.g. a `create shim.ts`) are preserved.
|
|
67
|
-
const importerEdit = edit ? stripResourceOps(edit, { from, to }) : undefined;
|
|
68
|
-
// Validate the SERVER-RETURNED edit against --root before applying it.
|
|
69
|
-
const guard = { root: flags.root, allowOutsideRoot: flags.allowOutsideRoot };
|
|
70
|
-
const importerChanges = importerEdit
|
|
71
|
-
? flags.dryRun
|
|
72
|
-
? planWorkspaceEdit(importerEdit, guard)
|
|
73
|
-
: applyWorkspaceEdit(importerEdit, guard)
|
|
74
|
-
: [];
|
|
75
|
-
const moveChange = physicallyMove(flags.root, from, to, flags.dryRun, flags.overwrite);
|
|
76
|
-
emitResult('move-file', [...importerChanges, moveChange], flags, {
|
|
77
|
-
importerFilesUpdated: importerChanges.length
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
finally {
|
|
81
|
-
await session.stop();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=move-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"move-file.js","sourceRoot":"","sources":["../../src/commands/move-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy move-symbol <file> <line:col> <targetFile>`
|
|
3
|
-
*
|
|
4
|
-
* Moves the symbol at the given position into `targetFile`, updating all
|
|
5
|
-
* importers. Driven by `textDocument/codeAction` (kind `refactor.move`).
|
|
6
|
-
*
|
|
7
|
-
* Two server shapes are supported:
|
|
8
|
-
* 1. The code action (or its `codeAction/resolve`) returns a `WorkspaceEdit`
|
|
9
|
-
* directly — applied as-is.
|
|
10
|
-
* 2. The action carries a `command`. We execute it via
|
|
11
|
-
* `workspace/executeCommand`; many servers (notably
|
|
12
|
-
* typescript-language-server's `_typescript.applyRefactoring`) then push
|
|
13
|
-
* the edit back through a `workspace/applyEdit` request, which the session
|
|
14
|
-
* captures. For TS, we inject the destination as
|
|
15
|
-
* `interactiveRefactorArguments.targetFile` so the move targets an existing
|
|
16
|
-
* file rather than prompting for a new one.
|
|
17
|
-
*/
|
|
18
|
-
import { type WorkspaceEdit } from '../apply.js';
|
|
19
|
-
import { type GlobalFlags } from '../io.js';
|
|
20
|
-
interface LspCommand {
|
|
21
|
-
title: string;
|
|
22
|
-
command: string;
|
|
23
|
-
arguments?: unknown[];
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* A `textDocument/codeAction` response item. Per the LSP spec the response is
|
|
27
|
-
* `(Command | CodeAction)[]`, so an item may be a full {@link CodeAction} OR a
|
|
28
|
-
* raw {@link LspCommand} — the latter carries its payload in a TOP-LEVEL
|
|
29
|
-
* `arguments` field (and `command` is then a `string`). We model both so a
|
|
30
|
-
* command-only action's `arguments` are not dropped.
|
|
31
|
-
*/
|
|
32
|
-
interface CodeAction {
|
|
33
|
-
title: string;
|
|
34
|
-
kind?: string;
|
|
35
|
-
edit?: WorkspaceEdit;
|
|
36
|
-
/** Nested command (CodeAction shape) or a command name (raw Command shape). */
|
|
37
|
-
command?: LspCommand | string;
|
|
38
|
-
/** Present only on the raw `Command` shape, alongside a string `command`. */
|
|
39
|
-
arguments?: unknown[];
|
|
40
|
-
data?: unknown;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Normalize the `command` of a code action into an {@link LspCommand}, preserving
|
|
44
|
-
* arguments for BOTH shapes:
|
|
45
|
-
* - nested object command → used as-is;
|
|
46
|
-
* - raw `Command` (string `command`) → its top-level `arguments` are retained
|
|
47
|
-
* (dropping them left command-only `_typescript.applyRefactoring` moves with
|
|
48
|
-
* an empty arg list, so the refactor could not run).
|
|
49
|
-
*/
|
|
50
|
-
export declare function toLspCommand(action: CodeAction): LspCommand | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* Resolve the ordered list of {@link WorkspaceEdit}s a `refactor.move` action
|
|
53
|
-
* produces, honoring the LSP `edit` + `command` contract:
|
|
54
|
-
* - if the action has an inline `edit`, it is applied FIRST;
|
|
55
|
-
* - if it also (or instead) has a `command`, the command is executed AFTER the
|
|
56
|
-
* inline edit, and EVERY edit the server then pushes via `workspace/applyEdit`
|
|
57
|
-
* (possibly several, in sequence) is appended in arrival order.
|
|
58
|
-
*
|
|
59
|
-
* Pure with respect to disk: it only sequences edits. `execute` runs the command
|
|
60
|
-
* (injecting the move target); `drainCapturedEdits` returns all server-pushed
|
|
61
|
-
* edits captured since the last drain.
|
|
62
|
-
*/
|
|
63
|
-
export declare function resolveMoveEdits(action: CodeAction, targetFile: string, execute: (cmd: LspCommand) => Promise<void>, drainCapturedEdits: () => WorkspaceEdit[]): Promise<WorkspaceEdit[]>;
|
|
64
|
-
export declare function runMoveSymbol(args: {
|
|
65
|
-
file: string;
|
|
66
|
-
position: string;
|
|
67
|
-
targetFile: string;
|
|
68
|
-
}, flags: GlobalFlags): Promise<void>;
|
|
69
|
-
export {};
|
|
70
|
-
//# sourceMappingURL=move-symbol.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"move-symbol.d.ts","sourceRoot":"","sources":["../../src/commands/move-symbol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,UAAU,CAAC;AAGlB,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB;AACD;;;;;;GAMG;AACH,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAQvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,EAC3C,kBAAkB,EAAE,MAAM,aAAa,EAAE,GACxC,OAAO,CAAC,aAAa,EAAE,CAAC,CAS1B;AAyBD,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5D,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAmFf"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy move-symbol <file> <line:col> <targetFile>`
|
|
3
|
-
*
|
|
4
|
-
* Moves the symbol at the given position into `targetFile`, updating all
|
|
5
|
-
* importers. Driven by `textDocument/codeAction` (kind `refactor.move`).
|
|
6
|
-
*
|
|
7
|
-
* Two server shapes are supported:
|
|
8
|
-
* 1. The code action (or its `codeAction/resolve`) returns a `WorkspaceEdit`
|
|
9
|
-
* directly — applied as-is.
|
|
10
|
-
* 2. The action carries a `command`. We execute it via
|
|
11
|
-
* `workspace/executeCommand`; many servers (notably
|
|
12
|
-
* typescript-language-server's `_typescript.applyRefactoring`) then push
|
|
13
|
-
* the edit back through a `workspace/applyEdit` request, which the session
|
|
14
|
-
* captures. For TS, we inject the destination as
|
|
15
|
-
* `interactiveRefactorArguments.targetFile` so the move targets an existing
|
|
16
|
-
* file rather than prompting for a new one.
|
|
17
|
-
*/
|
|
18
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
19
|
-
import { pathToFileURL } from 'node:url';
|
|
20
|
-
import { applyWorkspaceEdit, planWorkspaceEdit } from '../apply.js';
|
|
21
|
-
import { emitResult, fail, parseLineCol, resolvePathArg, toLspPosition } from '../io.js';
|
|
22
|
-
import { RefactorSession } from '../session.js';
|
|
23
|
-
/**
|
|
24
|
-
* Normalize the `command` of a code action into an {@link LspCommand}, preserving
|
|
25
|
-
* arguments for BOTH shapes:
|
|
26
|
-
* - nested object command → used as-is;
|
|
27
|
-
* - raw `Command` (string `command`) → its top-level `arguments` are retained
|
|
28
|
-
* (dropping them left command-only `_typescript.applyRefactoring` moves with
|
|
29
|
-
* an empty arg list, so the refactor could not run).
|
|
30
|
-
*/
|
|
31
|
-
export function toLspCommand(action) {
|
|
32
|
-
if (!action.command)
|
|
33
|
-
return undefined;
|
|
34
|
-
if (typeof action.command === 'string') {
|
|
35
|
-
const cmd = { title: action.title, command: action.command };
|
|
36
|
-
if (action.arguments !== undefined)
|
|
37
|
-
cmd.arguments = action.arguments;
|
|
38
|
-
return cmd;
|
|
39
|
-
}
|
|
40
|
-
return action.command;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Resolve the ordered list of {@link WorkspaceEdit}s a `refactor.move` action
|
|
44
|
-
* produces, honoring the LSP `edit` + `command` contract:
|
|
45
|
-
* - if the action has an inline `edit`, it is applied FIRST;
|
|
46
|
-
* - if it also (or instead) has a `command`, the command is executed AFTER the
|
|
47
|
-
* inline edit, and EVERY edit the server then pushes via `workspace/applyEdit`
|
|
48
|
-
* (possibly several, in sequence) is appended in arrival order.
|
|
49
|
-
*
|
|
50
|
-
* Pure with respect to disk: it only sequences edits. `execute` runs the command
|
|
51
|
-
* (injecting the move target); `drainCapturedEdits` returns all server-pushed
|
|
52
|
-
* edits captured since the last drain.
|
|
53
|
-
*/
|
|
54
|
-
export async function resolveMoveEdits(action, targetFile, execute, drainCapturedEdits) {
|
|
55
|
-
const edits = [];
|
|
56
|
-
if (action.edit)
|
|
57
|
-
edits.push(action.edit);
|
|
58
|
-
const cmd = toLspCommand(action);
|
|
59
|
-
if (cmd) {
|
|
60
|
-
await execute(injectTargetFile(cmd, targetFile));
|
|
61
|
-
edits.push(...drainCapturedEdits());
|
|
62
|
-
}
|
|
63
|
-
return edits;
|
|
64
|
-
}
|
|
65
|
-
/** Inject the move destination into a tsserver `_typescript.applyRefactoring`
|
|
66
|
-
* command argument so the symbol lands in an existing target file. */
|
|
67
|
-
function injectTargetFile(cmd, targetFile) {
|
|
68
|
-
if (cmd.command !== '_typescript.applyRefactoring' || !Array.isArray(cmd.arguments))
|
|
69
|
-
return cmd;
|
|
70
|
-
const arg0 = cmd.arguments[0];
|
|
71
|
-
if (arg0 && typeof arg0 === 'object') {
|
|
72
|
-
const obj = arg0;
|
|
73
|
-
return {
|
|
74
|
-
...cmd,
|
|
75
|
-
arguments: [
|
|
76
|
-
{
|
|
77
|
-
...obj,
|
|
78
|
-
refactor: 'Move to file',
|
|
79
|
-
action: 'Move to file',
|
|
80
|
-
interactiveRefactorArguments: { targetFile }
|
|
81
|
-
},
|
|
82
|
-
...cmd.arguments.slice(1)
|
|
83
|
-
]
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return cmd;
|
|
87
|
-
}
|
|
88
|
-
export async function runMoveSymbol(args, flags) {
|
|
89
|
-
const file = resolvePathArg(args.file, flags);
|
|
90
|
-
const targetFile = resolvePathArg(args.targetFile, flags);
|
|
91
|
-
const oneBased = parseLineCol(args.position);
|
|
92
|
-
const pos = toLspPosition(oneBased);
|
|
93
|
-
if (!existsSync(file))
|
|
94
|
-
fail(`source file not found: ${file}`, flags.json);
|
|
95
|
-
const session = new RefactorSession({
|
|
96
|
-
serverCommand: flags.server,
|
|
97
|
-
root: flags.root,
|
|
98
|
-
indexWaitMs: flags.waitMs,
|
|
99
|
-
verbose: flags.verbose
|
|
100
|
-
});
|
|
101
|
-
try {
|
|
102
|
-
await session.start();
|
|
103
|
-
await session.openAndWait(file);
|
|
104
|
-
// Also open the target so the server knows its insertion context.
|
|
105
|
-
if (existsSync(targetFile)) {
|
|
106
|
-
await session.lsp.sendNotification('textDocument/didOpen', {
|
|
107
|
-
textDocument: {
|
|
108
|
-
uri: pathToFileURL(targetFile).href,
|
|
109
|
-
languageId: 'typescript',
|
|
110
|
-
version: 1,
|
|
111
|
-
text: readFileSync(targetFile, 'utf8')
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
const range = { start: pos, end: pos };
|
|
116
|
-
const actions = await session.requestWithRetry(() => session.lsp.sendRequest('textDocument/codeAction', {
|
|
117
|
-
textDocument: { uri: pathToFileURL(file).href },
|
|
118
|
-
range,
|
|
119
|
-
context: { diagnostics: [], only: ['refactor.move'] }
|
|
120
|
-
}));
|
|
121
|
-
if (!actions || actions.length === 0) {
|
|
122
|
-
fail('no refactor.move code action available at that position', flags.json);
|
|
123
|
-
}
|
|
124
|
-
// Prefer the move action; resolve it if it has no inline edit.
|
|
125
|
-
let action = actions.find((a) => a.kind?.startsWith('refactor.move')) ?? actions[0];
|
|
126
|
-
if (!action.edit && action.data !== undefined) {
|
|
127
|
-
const resolved = (await session.lsp.sendRequest('codeAction/resolve', action));
|
|
128
|
-
if (resolved)
|
|
129
|
-
action = resolved;
|
|
130
|
-
}
|
|
131
|
-
// Validate every server-returned edit against --root before applying.
|
|
132
|
-
const guard = { root: flags.root, allowOutsideRoot: flags.allowOutsideRoot };
|
|
133
|
-
const applyEdit = (e) => flags.dryRun ? planWorkspaceEdit(e, guard) : applyWorkspaceEdit(e, guard);
|
|
134
|
-
// Per the LSP spec, a CodeAction may carry BOTH an inline `edit` and a
|
|
135
|
-
// `command`: apply the edit FIRST, then execute the command (not either/or).
|
|
136
|
-
// The command may itself push further edits via workspace/applyEdit, possibly
|
|
137
|
-
// several in sequence — drain them ALL in order. (See resolveMoveEdits.)
|
|
138
|
-
const edits = await resolveMoveEdits(action, targetFile, async (cmd) => {
|
|
139
|
-
await session.lsp.sendRequest('workspace/executeCommand', {
|
|
140
|
-
command: cmd.command,
|
|
141
|
-
arguments: cmd.arguments ?? []
|
|
142
|
-
});
|
|
143
|
-
}, () => session.takeCapturedEdits());
|
|
144
|
-
if (edits.length === 0) {
|
|
145
|
-
fail('move-symbol produced no edit (server did not return or apply one)', flags.json);
|
|
146
|
-
}
|
|
147
|
-
const changes = edits.flatMap(applyEdit);
|
|
148
|
-
emitResult('move-symbol', changes, flags, { targetFile });
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
await session.stop();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=move-symbol.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"move-symbol.js","sourceRoot":"","sources":["../../src/commands/move-symbol.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/query.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy query <op> <file> <line:col>`
|
|
3
|
-
*
|
|
4
|
-
* Read-only parity ops (definition / references / hover) exposed for terminals
|
|
5
|
-
* and CI that want the same position-driven interface as the write commands.
|
|
6
|
-
* Always emits JSON on stdout (these are data ops, not edits).
|
|
7
|
-
*/
|
|
8
|
-
import { type GlobalFlags } from '../io.js';
|
|
9
|
-
export declare function runQuery(args: {
|
|
10
|
-
op: string;
|
|
11
|
-
file: string;
|
|
12
|
-
position: string;
|
|
13
|
-
}, flags: GlobalFlags): Promise<void>;
|
|
14
|
-
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAK/F,wBAAsB,QAAQ,CAC5B,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACpD,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
package/dist/commands/query.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy query <op> <file> <line:col>`
|
|
3
|
-
*
|
|
4
|
-
* Read-only parity ops (definition / references / hover) exposed for terminals
|
|
5
|
-
* and CI that want the same position-driven interface as the write commands.
|
|
6
|
-
* Always emits JSON on stdout (these are data ops, not edits).
|
|
7
|
-
*/
|
|
8
|
-
import { pathToFileURL } from 'node:url';
|
|
9
|
-
import { fail, parseLineCol, resolvePathArg, toLspPosition } from '../io.js';
|
|
10
|
-
import { RefactorSession } from '../session.js';
|
|
11
|
-
const OPS = new Set(['definition', 'references', 'hover']);
|
|
12
|
-
export async function runQuery(args, flags) {
|
|
13
|
-
if (!OPS.has(args.op))
|
|
14
|
-
fail(`unknown query op "${args.op}" (definition | references | hover)`, true);
|
|
15
|
-
const file = resolvePathArg(args.file, flags);
|
|
16
|
-
const pos = toLspPosition(parseLineCol(args.position));
|
|
17
|
-
const session = new RefactorSession({
|
|
18
|
-
serverCommand: flags.server,
|
|
19
|
-
root: flags.root,
|
|
20
|
-
indexWaitMs: flags.waitMs,
|
|
21
|
-
verbose: flags.verbose
|
|
22
|
-
});
|
|
23
|
-
try {
|
|
24
|
-
await session.start();
|
|
25
|
-
await session.openAndWait(file);
|
|
26
|
-
const td = { textDocument: { uri: pathToFileURL(file).href }, position: pos };
|
|
27
|
-
let result;
|
|
28
|
-
if (args.op === 'definition') {
|
|
29
|
-
result = await session.lsp.sendRequest('textDocument/definition', td);
|
|
30
|
-
}
|
|
31
|
-
else if (args.op === 'references') {
|
|
32
|
-
result = await session.lsp.sendRequest('textDocument/references', {
|
|
33
|
-
...td,
|
|
34
|
-
context: { includeDeclaration: true }
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
result = await session.lsp.sendRequest('textDocument/hover', td);
|
|
39
|
-
}
|
|
40
|
-
process.stdout.write(JSON.stringify({ ok: true, op: args.op, result }) + '\n');
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
await session.stop();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=query.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAoD,EACpD,KAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,qBAAqB,IAAI,CAAC,EAAE,qCAAqC,EAAE,IAAI,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,aAAa,EAAE,KAAK,CAAC,MAAM;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC9E,IAAI,MAAe,CAAC;QACpB,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,yBAAyB,EAAE;gBAChE,GAAG,EAAE;gBACL,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACjF,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy rename <file> <line:col> <newName>`
|
|
3
|
-
*
|
|
4
|
-
* Drives `textDocument/rename` and applies the returned WorkspaceEdit. The LSP
|
|
5
|
-
* server finds every reference — including re-exports, aliased imports,
|
|
6
|
-
* type-only imports, and `{@link}` references — that a text search would miss.
|
|
7
|
-
*/
|
|
8
|
-
import { type GlobalFlags } from '../io.js';
|
|
9
|
-
export declare function runRename(args: {
|
|
10
|
-
file: string;
|
|
11
|
-
position: string;
|
|
12
|
-
newName: string;
|
|
13
|
-
}, flags: GlobalFlags): Promise<void>;
|
|
14
|
-
//# sourceMappingURL=rename.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAGlB,wBAAsB,SAAS,CAC7B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACzD,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
package/dist/commands/rename.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `lspeasy rename <file> <line:col> <newName>`
|
|
3
|
-
*
|
|
4
|
-
* Drives `textDocument/rename` and applies the returned WorkspaceEdit. The LSP
|
|
5
|
-
* server finds every reference — including re-exports, aliased imports,
|
|
6
|
-
* type-only imports, and `{@link}` references — that a text search would miss.
|
|
7
|
-
*/
|
|
8
|
-
import { pathToFileURL } from 'node:url';
|
|
9
|
-
import { applyWorkspaceEdit, planWorkspaceEdit } from '../apply.js';
|
|
10
|
-
import { emitResult, fail, parseLineCol, resolvePathArg, toLspPosition } from '../io.js';
|
|
11
|
-
import { RefactorSession } from '../session.js';
|
|
12
|
-
export async function runRename(args, flags) {
|
|
13
|
-
const file = resolvePathArg(args.file, flags);
|
|
14
|
-
const pos = toLspPosition(parseLineCol(args.position));
|
|
15
|
-
const session = new RefactorSession({
|
|
16
|
-
serverCommand: flags.server,
|
|
17
|
-
root: flags.root,
|
|
18
|
-
indexWaitMs: flags.waitMs,
|
|
19
|
-
verbose: flags.verbose
|
|
20
|
-
});
|
|
21
|
-
try {
|
|
22
|
-
await session.start();
|
|
23
|
-
await session.openAndWait(file);
|
|
24
|
-
const edit = await session.requestWithRetry(() => session.lsp.sendRequest('textDocument/rename', {
|
|
25
|
-
textDocument: { uri: pathToFileURL(file).href },
|
|
26
|
-
position: pos,
|
|
27
|
-
newName: args.newName
|
|
28
|
-
}));
|
|
29
|
-
if (!edit)
|
|
30
|
-
fail('rename returned no edit (symbol not renamable, or project not indexed)', flags.json);
|
|
31
|
-
// Validate the SERVER-RETURNED edit against --root: a server can return a
|
|
32
|
-
// URI/resource op outside the project; applying it unguarded would bypass
|
|
33
|
-
// the --root safety guarantee. The guard refuses unless --allow-outside-root.
|
|
34
|
-
const guard = { root: flags.root, allowOutsideRoot: flags.allowOutsideRoot };
|
|
35
|
-
const changes = flags.dryRun ? planWorkspaceEdit(edit, guard) : applyWorkspaceEdit(edit, guard);
|
|
36
|
-
emitResult('rename', changes, flags, { newName: args.newName });
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
await session.stop();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=rename.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,aAAa,EAEd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAyD,EACzD,KAAkB;IAElB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,aAAa,EAAE,KAAK,CAAC,MAAM;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CACzC,GAAG,EAAE,CACH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,qBAAqB,EAAE;YAC7C,YAAY,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YAC/C,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAkC,CACtC,CAAC;QAEF,IAAI,CAAC,IAAI;YACP,IAAI,CAAC,wEAAwE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7F,0EAA0E;QAC1E,0EAA0E;QAC1E,8EAA8E;QAC9E,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChG,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
package/dist/discover.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface LspServerEntry {
|
|
2
|
-
command: string;
|
|
3
|
-
args?: string[];
|
|
4
|
-
fileExtensions: Record<string, string>;
|
|
5
|
-
}
|
|
6
|
-
export interface LspJson {
|
|
7
|
-
lspServers: Record<string, LspServerEntry>;
|
|
8
|
-
}
|
|
9
|
-
export interface ResolvedServer {
|
|
10
|
-
/** Full spawn command string passed to RefactorSession as serverCommand. */
|
|
11
|
-
serverCommand: string;
|
|
12
|
-
/** languageId for textDocument/didOpen (e.g. 'typescript', 'rust'). */
|
|
13
|
-
languageId: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function selectServer(config: LspJson, fileExt: string): ResolvedServer | null;
|
|
16
|
-
export declare function discoverServer(root: string, fileExt: string): ResolvedServer | null;
|
|
17
|
-
//# sourceMappingURL=discover.d.ts.map
|
package/dist/discover.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAkBpF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAWnF"}
|
package/dist/discover.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
const SEARCH_PATHS = ['lsp.json', '.claude/lsp.json', '.github/lsp.json'];
|
|
5
|
-
function findLspJsonPath(root) {
|
|
6
|
-
for (const rel of SEARCH_PATHS) {
|
|
7
|
-
const full = join(root, rel);
|
|
8
|
-
if (existsSync(full))
|
|
9
|
-
return full;
|
|
10
|
-
}
|
|
11
|
-
const global = join(homedir(), '.claude', 'lsp.json');
|
|
12
|
-
return existsSync(global) ? global : null;
|
|
13
|
-
}
|
|
14
|
-
export function selectServer(config, fileExt) {
|
|
15
|
-
for (const entry of Object.values(config.lspServers)) {
|
|
16
|
-
const languageId = entry.fileExtensions[fileExt];
|
|
17
|
-
if (languageId) {
|
|
18
|
-
const parts = [entry.command, ...(entry.args ?? [])].filter(Boolean);
|
|
19
|
-
// Quote tokens containing spaces so tokenizeCommand in session.ts can
|
|
20
|
-
// round-trip them without splitting on the embedded whitespace.
|
|
21
|
-
// Escape backslashes first, then double-quotes: tokenizeCommand treats \\
|
|
22
|
-
// inside double-quotes as a literal backslash, so a trailing backslash in a
|
|
23
|
-
// Windows path like "C:\Program Files\" must become "C:\Program Files\\"
|
|
24
|
-
// to avoid the closing " being consumed as \" (an escaped quote).
|
|
25
|
-
const quoted = parts.map((t) => t.includes(' ') ? `"${t.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"` : t);
|
|
26
|
-
return { serverCommand: quoted.join(' '), languageId };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
export function discoverServer(root, fileExt) {
|
|
32
|
-
const lspJsonPath = findLspJsonPath(root);
|
|
33
|
-
if (!lspJsonPath)
|
|
34
|
-
return null;
|
|
35
|
-
let parsed;
|
|
36
|
-
try {
|
|
37
|
-
parsed = JSON.parse(readFileSync(lspJsonPath, 'utf8'));
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
if (!parsed || typeof parsed['lspServers'] !== 'object')
|
|
43
|
-
return null;
|
|
44
|
-
return selectServer(parsed, fileExt);
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=discover.js.map
|
package/dist/discover.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmBjC,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAE1E,SAAS,eAAe,CAAC,IAAY;IACnC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,OAAe;IAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrE,sEAAsE;YACtE,gEAAgE;YAChE,0EAA0E;YAC1E,4EAA4E;YAC5E,yEAAyE;YACzE,kEAAkE;YAClE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC;YACF,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAQ,MAAkC,CAAC,YAAY,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClG,OAAO,YAAY,CAAC,MAAiB,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC"}
|