@lsproxy/cli 0.3.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/dist/apply.d.ts +139 -0
  4. package/dist/apply.d.ts.map +1 -0
  5. package/dist/apply.js +325 -0
  6. package/dist/apply.js.map +1 -0
  7. package/dist/build-commands.d.ts +6 -0
  8. package/dist/build-commands.d.ts.map +1 -0
  9. package/dist/build-commands.js +111 -0
  10. package/dist/build-commands.js.map +1 -0
  11. package/dist/cli.d.ts +30 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +207 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/move-file.d.ts +13 -0
  16. package/dist/commands/move-file.d.ts.map +1 -0
  17. package/dist/commands/move-file.js +84 -0
  18. package/dist/commands/move-file.js.map +1 -0
  19. package/dist/commands/move-symbol.d.ts +70 -0
  20. package/dist/commands/move-symbol.d.ts.map +1 -0
  21. package/dist/commands/move-symbol.js +154 -0
  22. package/dist/commands/move-symbol.js.map +1 -0
  23. package/dist/commands/query.d.ts +14 -0
  24. package/dist/commands/query.d.ts.map +1 -0
  25. package/dist/commands/query.js +46 -0
  26. package/dist/commands/query.js.map +1 -0
  27. package/dist/commands/rename.d.ts +14 -0
  28. package/dist/commands/rename.d.ts.map +1 -0
  29. package/dist/commands/rename.js +42 -0
  30. package/dist/commands/rename.js.map +1 -0
  31. package/dist/connect.d.ts +10 -0
  32. package/dist/connect.d.ts.map +1 -0
  33. package/dist/connect.js +63 -0
  34. package/dist/connect.js.map +1 -0
  35. package/dist/discover.d.ts +17 -0
  36. package/dist/discover.d.ts.map +1 -0
  37. package/dist/discover.js +46 -0
  38. package/dist/discover.js.map +1 -0
  39. package/dist/index.d.ts +15 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +12 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/io.d.ts +76 -0
  44. package/dist/io.d.ts.map +1 -0
  45. package/dist/io.js +150 -0
  46. package/dist/io.js.map +1 -0
  47. package/dist/session.d.ts +89 -0
  48. package/dist/session.d.ts.map +1 -0
  49. package/dist/session.js +286 -0
  50. package/dist/session.js.map +1 -0
  51. package/dist/zod-to-commander.d.ts +11 -0
  52. package/dist/zod-to-commander.d.ts.map +1 -0
  53. package/dist/zod-to-commander.js +351 -0
  54. package/dist/zod-to-commander.js.map +1 -0
  55. package/package.json +65 -0
@@ -0,0 +1,351 @@
1
+ import { Command } from 'commander';
2
+ import { z } from 'zod';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { parseLineCol, toLspPosition, resolvePathArg } from './io.js';
5
+ import { WorkspaceEditSchema, TextEditSchema, CodeActionSchema } from '@lspeasy/core';
6
+ import { applyWorkspaceEdit, planWorkspaceEdit } from './apply.js';
7
+ const PATTERN_FIELDS = {
8
+ 'file-position-newname': new Set(['textDocument', 'position', 'newName']),
9
+ 'file-position': new Set(['textDocument', 'position']),
10
+ 'file-range': new Set(['textDocument', 'range']),
11
+ file: new Set(['textDocument']),
12
+ query: new Set(['query']),
13
+ raw: new Set()
14
+ };
15
+ function isZodObjectLike(schema) {
16
+ return (schema != null &&
17
+ typeof schema === 'object' &&
18
+ 'shape' in schema &&
19
+ schema.shape != null &&
20
+ typeof schema.shape === 'object');
21
+ }
22
+ function unwrapOptional(schema) {
23
+ const def = schema._def;
24
+ if (def?.typeName === 'ZodOptional' && def.innerType)
25
+ return unwrapOptional(def.innerType);
26
+ return schema;
27
+ }
28
+ function toKebabCase(str) {
29
+ return str.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`);
30
+ }
31
+ function toCamelCase(str) {
32
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
33
+ }
34
+ // Suffixes stripped when deriving the CLI prefix for an object-typed field.
35
+ // e.g. "formatting" + "options" → "formatting-options" → strip "-options" → "formatting"
36
+ // so sub-fields become --formatting-tab-size, --formatting-insert-spaces.
37
+ const STRIP_SUFFIXES = ['-options', '-context', '-params', '-config', '-settings'];
38
+ /**
39
+ * Derive the CLI key prefix for an object-typed schema field.
40
+ * Concatenates the command name and field name (both kebab-cased), then strips
41
+ * any known generic suffix so users see --formatting-tab-size rather than
42
+ * --formatting-options-tab-size or a bare --tab-size.
43
+ * For non-object (primitive) fields the field name is used directly.
44
+ */
45
+ function fieldCliKey(subcommand, fieldName, isObject) {
46
+ if (!isObject)
47
+ return toKebabCase(fieldName);
48
+ const combined = `${toKebabCase(subcommand)}-${toKebabCase(fieldName)}`;
49
+ for (const suffix of STRIP_SUFFIXES) {
50
+ if (combined.endsWith(suffix))
51
+ return combined.slice(0, -suffix.length);
52
+ }
53
+ return combined;
54
+ }
55
+ /**
56
+ * Register Commander options for a schema field not covered by the positional
57
+ * pattern. `cliKey` is the pre-computed kebab-case prefix (see `fieldCliKey`).
58
+ * Object-typed fields are expanded one level deep: sub-fields become
59
+ * `--<cliKey>-<sub-field>`. Primitive fields become `--<cliKey> <value>`.
60
+ */
61
+ function addFieldOptions(cmd, cliKey, schema, depth = 0) {
62
+ const inner = unwrapOptional(schema);
63
+ if (depth < 1 && isZodObjectLike(inner)) {
64
+ for (const [sub, subSchema] of Object.entries(inner.shape)) {
65
+ addFieldOptions(cmd, `${cliKey}-${toKebabCase(sub)}`, subSchema, depth + 1);
66
+ }
67
+ return;
68
+ }
69
+ cmd.option(`--${cliKey} <value>`, cliKey);
70
+ }
71
+ /**
72
+ * Read back all field options registered by `addFieldOptions` and reconstruct
73
+ * the original nested value. Returns `undefined` when none of the sub-options
74
+ * were provided.
75
+ */
76
+ function extractFieldValue(opts, cliKey, schema, depth = 0) {
77
+ const inner = unwrapOptional(schema);
78
+ if (depth < 1 && isZodObjectLike(inner)) {
79
+ const result = {};
80
+ let hasAny = false;
81
+ for (const [sub, subSchema] of Object.entries(inner.shape)) {
82
+ const val = extractFieldValue(opts, `${cliKey}-${toKebabCase(sub)}`, subSchema, depth + 1);
83
+ if (val !== undefined) {
84
+ result[sub] = val;
85
+ hasAny = true;
86
+ }
87
+ }
88
+ return hasAny ? result : undefined;
89
+ }
90
+ const raw = opts[toCamelCase(cliKey)];
91
+ if (raw === undefined)
92
+ return undefined;
93
+ if (typeof raw === 'string') {
94
+ try {
95
+ return JSON.parse(raw);
96
+ }
97
+ catch {
98
+ return raw;
99
+ }
100
+ }
101
+ return raw;
102
+ }
103
+ export function detectArgPattern(schema) {
104
+ if (!isZodObjectLike(schema))
105
+ return 'raw';
106
+ const shape = schema.shape;
107
+ if ('textDocument' in shape && 'position' in shape && 'newName' in shape)
108
+ return 'file-position-newname';
109
+ if ('textDocument' in shape && 'position' in shape)
110
+ return 'file-position';
111
+ if ('textDocument' in shape && 'range' in shape)
112
+ return 'file-range';
113
+ if ('textDocument' in shape)
114
+ return 'file';
115
+ if ('query' in shape)
116
+ return 'query';
117
+ return 'raw';
118
+ }
119
+ export function marshalParams(pattern, positional, opts, flags) {
120
+ if (typeof opts['params'] === 'string')
121
+ return JSON.parse(opts['params']);
122
+ switch (pattern) {
123
+ case 'file-position-newname': {
124
+ const file = resolvePathArg(positional[0], flags);
125
+ const pos = parseLineCol(positional[1]);
126
+ return {
127
+ textDocument: { uri: pathToFileURL(file).href },
128
+ position: toLspPosition(pos),
129
+ newName: positional[2]
130
+ };
131
+ }
132
+ case 'file-position': {
133
+ const file = resolvePathArg(positional[0], flags);
134
+ const pos = parseLineCol(positional[1]);
135
+ return {
136
+ textDocument: { uri: pathToFileURL(file).href },
137
+ position: toLspPosition(pos)
138
+ };
139
+ }
140
+ case 'file-range': {
141
+ const file = resolvePathArg(positional[0], flags);
142
+ const [startStr, endStr] = (positional[1] ?? '').split('-');
143
+ const start = parseLineCol(startStr ?? '1:1');
144
+ const end = parseLineCol(endStr ?? startStr ?? '1:1');
145
+ return {
146
+ textDocument: { uri: pathToFileURL(file).href },
147
+ range: { start: toLspPosition(start), end: toLspPosition(end) }
148
+ };
149
+ }
150
+ case 'file': {
151
+ const file = resolvePathArg(positional[0], flags);
152
+ return { textDocument: { uri: pathToFileURL(file).href } };
153
+ }
154
+ case 'query':
155
+ return { query: positional[0] ?? '' };
156
+ case 'raw':
157
+ throw new Error('This method requires --params <json>');
158
+ }
159
+ }
160
+ const TextEditArraySchema = z.array(TextEditSchema);
161
+ // WorkspaceEdit has all optional fields, so safeParse succeeds on any plain
162
+ // object. Require at least one edit-bearing key so hover/completion results
163
+ // don't get misclassified as empty workspace edits.
164
+ const NonEmptyWorkspaceEditSchema = WorkspaceEditSchema.refine((e) => (e.changes != null && Object.keys(e.changes).length > 0) ||
165
+ (e.documentChanges != null && e.documentChanges.length > 0), 'not a workspace edit');
166
+ /**
167
+ * Wrap a TextEdit[] result as a single-file WorkspaceEdit using the
168
+ * `textDocument.uri` already present in the marshaled params. Returns null
169
+ * when the params don't carry a recognizable URI (raw-pattern calls).
170
+ */
171
+ function textEditsToWorkspaceEdit(edits, params) {
172
+ if (typeof params !== 'object' || params === null)
173
+ return null;
174
+ const td = params['textDocument'];
175
+ const uri = typeof td === 'object' && td !== null ? td['uri'] : null;
176
+ if (typeof uri !== 'string')
177
+ return null;
178
+ return { changes: { [uri]: edits } };
179
+ }
180
+ export function printAppliedChanges(changes, method, dryRun, json) {
181
+ if (json) {
182
+ process.stdout.write(JSON.stringify({ ok: true, method, dryRun, changes }) + '\n');
183
+ }
184
+ else {
185
+ const label = dryRun ? '[dry-run]' : '[applied]';
186
+ for (const c of changes) {
187
+ const detail = c.kind === 'rename'
188
+ ? `${c.path} → ${c.toPath}`
189
+ : c.kind === 'edit'
190
+ ? `${c.path} (${c.editCount} edit${c.editCount !== 1 ? 's' : ''})`
191
+ : c.path;
192
+ process.stdout.write(`${label} ${c.kind} ${detail}\n`);
193
+ }
194
+ }
195
+ }
196
+ function injectRequiredDefaults(method, params) {
197
+ if (typeof params !== 'object' || params === null)
198
+ return params;
199
+ const p = params;
200
+ if (method === 'textDocument/references' && !('context' in p)) {
201
+ return { ...p, context: { includeDeclaration: true } };
202
+ }
203
+ if (method === 'textDocument/codeAction' && !('context' in p)) {
204
+ return { ...p, context: { diagnostics: [] } };
205
+ }
206
+ if ((method === 'textDocument/formatting' || method === 'textDocument/rangeFormatting') &&
207
+ !('options' in p)) {
208
+ return { ...p, options: { tabSize: 2, insertSpaces: true } };
209
+ }
210
+ return params;
211
+ }
212
+ export function zodToCommander(method, schema, session, flags) {
213
+ const subcommand = method.split('/').slice(1).join('-') || method;
214
+ const cmd = new Command(subcommand);
215
+ const pattern = detectArgPattern(schema);
216
+ switch (pattern) {
217
+ case 'file-position-newname':
218
+ cmd.argument('<file>', 'file path (relative to --root)');
219
+ cmd.argument('<line:col>', '1-based position, e.g. 12:7');
220
+ cmd.argument('<newName>', 'new symbol name');
221
+ break;
222
+ case 'file-position':
223
+ cmd.argument('<file>', 'file path (relative to --root)');
224
+ cmd.argument('<line:col>', '1-based position, e.g. 12:7');
225
+ break;
226
+ case 'file-range':
227
+ cmd.argument('<file>', 'file path (relative to --root)');
228
+ cmd.argument('<range>', 'range as startLine:col-endLine:col, e.g. 2:1-4:5');
229
+ break;
230
+ case 'file':
231
+ cmd.argument('<file>', 'file path (relative to --root)');
232
+ break;
233
+ case 'query':
234
+ cmd.argument('<query>', 'search query string');
235
+ break;
236
+ case 'raw':
237
+ break;
238
+ }
239
+ cmd.option('--params <json>', 'raw LSP params as JSON, overrides positional args');
240
+ // Add Commander options for schema fields not covered by the positional pattern.
241
+ // Object-typed fields are expanded one level deep via hyphenation.
242
+ if (pattern !== 'raw' && isZodObjectLike(schema)) {
243
+ const covered = PATTERN_FIELDS[pattern];
244
+ for (const [field, fieldSchema] of Object.entries(schema.shape)) {
245
+ if (!covered.has(field)) {
246
+ const inner = unwrapOptional(fieldSchema);
247
+ const cliKey = fieldCliKey(subcommand, field, isZodObjectLike(inner));
248
+ addFieldOptions(cmd, cliKey, fieldSchema);
249
+ }
250
+ }
251
+ }
252
+ cmd.action(async (...cmdArgs) => {
253
+ const cmdOpts = cmdArgs.at(-1);
254
+ const positional = cmdArgs.slice(0, -1).map(String);
255
+ try {
256
+ const rawParams = marshalParams(pattern, positional, cmdOpts, flags);
257
+ // Overlay extra field options onto the pattern-derived base params.
258
+ if (pattern !== 'raw' &&
259
+ isZodObjectLike(schema) &&
260
+ typeof rawParams === 'object' &&
261
+ rawParams !== null) {
262
+ const covered = PATTERN_FIELDS[pattern];
263
+ for (const [field, fieldSchema] of Object.entries(schema.shape)) {
264
+ if (covered.has(field))
265
+ continue;
266
+ const inner = unwrapOptional(fieldSchema);
267
+ const cliKey = fieldCliKey(subcommand, field, isZodObjectLike(inner));
268
+ const val = extractFieldValue(cmdOpts, cliKey, fieldSchema);
269
+ if (val !== undefined)
270
+ rawParams[field] = val;
271
+ }
272
+ }
273
+ const params = injectRequiredDefaults(method, rawParams);
274
+ const result = await session.requestWithRetry(() => session.lsp.sendRequest(method, params));
275
+ // Collect workspace edits from up to four sources:
276
+ // 1. Direct WorkspaceEdit result (e.g. textDocument/rename)
277
+ // 2. TextEdit[] result (e.g. textDocument/formatting) — wrapped using the
278
+ // textDocument.uri already in rawParams
279
+ // 3. CodeAction[].edit — inline edits embedded in code action results
280
+ // 4. Server-pushed edits via workspace/applyEdit (e.g. workspace/executeCommand)
281
+ const capturedEdits = session.takeCapturedEdits();
282
+ const weResult = NonEmptyWorkspaceEditSchema.safeParse(result);
283
+ const teResult = TextEditArraySchema.safeParse(result);
284
+ // LSP allows codeAction results to be (Command | CodeAction)[]. Parse each
285
+ // item individually so Command entries don't cause the whole parse to fail.
286
+ const codeActionItems = Array.isArray(result)
287
+ ? result.flatMap((item) => {
288
+ const parsed = CodeActionSchema.safeParse(item);
289
+ return parsed.success ? [parsed.data] : [];
290
+ })
291
+ : [];
292
+ // Only auto-apply when exactly one code action carries an edit; if multiple
293
+ // edit-bearing actions are returned, fall through to JSON printing so the
294
+ // caller can choose rather than silently applying the wrong quick-fix.
295
+ const inlineCodeActionEdits = codeActionItems
296
+ .map((a) => a.edit)
297
+ .filter((e) => e != null && NonEmptyWorkspaceEditSchema.safeParse(e).success);
298
+ const inlineCodeActionEdit = inlineCodeActionEdits.length === 1
299
+ ? inlineCodeActionEdits[0]
300
+ : null;
301
+ const directEdit = weResult.success
302
+ ? weResult.data
303
+ : teResult.success && teResult.data.length > 0
304
+ ? textEditsToWorkspaceEdit(teResult.data, rawParams)
305
+ : inlineCodeActionEdit;
306
+ // For methods that produce edits (rename, formatting, codeAction), a null
307
+ // result means the server could not fulfil the request — treat as an error.
308
+ const isEditMethod = method === 'textDocument/rename' ||
309
+ method === 'textDocument/formatting' ||
310
+ method === 'textDocument/rangeFormatting' ||
311
+ method === 'textDocument/codeAction';
312
+ if (isEditMethod && result === null && capturedEdits.length === 0) {
313
+ throw new Error(`${method} returned null — server could not fulfil the request`);
314
+ }
315
+ if (directEdit || capturedEdits.length > 0) {
316
+ const guard = {
317
+ root: flags.root,
318
+ allowOutsideRoot: flags.allowOutsideRoot
319
+ };
320
+ const allChanges = [];
321
+ const edits = directEdit ? [directEdit, ...capturedEdits] : capturedEdits;
322
+ for (const edit of edits) {
323
+ const changes = flags.dryRun
324
+ ? planWorkspaceEdit(edit, guard)
325
+ : applyWorkspaceEdit(edit, guard);
326
+ allChanges.push(...changes);
327
+ }
328
+ printAppliedChanges(allChanges, method, flags.dryRun, flags.json);
329
+ }
330
+ else {
331
+ if (flags.json) {
332
+ process.stdout.write(JSON.stringify({ ok: true, method, result }) + '\n');
333
+ }
334
+ else {
335
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
336
+ }
337
+ }
338
+ }
339
+ catch (err) {
340
+ if (flags.json) {
341
+ process.stdout.write(JSON.stringify({ ok: false, error: String(err) }) + '\n');
342
+ }
343
+ else {
344
+ process.stderr.write(`error: ${String(err)}\n`);
345
+ }
346
+ process.exit(1);
347
+ }
348
+ });
349
+ return cmd;
350
+ }
351
+ //# sourceMappingURL=zod-to-commander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-to-commander.js","sourceRoot":"","sources":["../src/zod-to-commander.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@lsproxy/cli",
3
+ "version": "0.3.0",
4
+ "description": "Standalone refactor CLI driving any LSP server: project-wide rename, file-move with importer updates, and move-symbol",
5
+ "private": false,
6
+ "keywords": [
7
+ "lsp",
8
+ "language-server-protocol",
9
+ "refactor",
10
+ "rename",
11
+ "codemod",
12
+ "move-symbol",
13
+ "cli",
14
+ "typescript"
15
+ ],
16
+ "homepage": "https://github.com/pradeepmouli/lspeasy#readme",
17
+ "bugs": {
18
+ "url": "https://github.com/pradeepmouli/lspeasy/issues"
19
+ },
20
+ "license": "MIT",
21
+ "author": "Pradeep Mouli <pmouli@mac.com> (https://github.com/pradeepmouli)",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/pradeepmouli/lspeasy.git",
25
+ "directory": "apps/cli"
26
+ },
27
+ "type": "module",
28
+ "bin": {
29
+ "lspeasy": "./dist/cli.js"
30
+ },
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.js"
35
+ }
36
+ },
37
+ "main": "./dist/index.js",
38
+ "types": "./dist/index.d.ts",
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ],
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "dependencies": {
47
+ "commander": "^12.1.0",
48
+ "zod": "^4.4.3",
49
+ "@lspeasy/client": "3.1.1",
50
+ "@lspeasy/core": "2.3.0",
51
+ "@lsproxy/proxy": "0.2.0"
52
+ },
53
+ "devDependencies": {
54
+ "typescript": "^6.0.3"
55
+ },
56
+ "engines": {
57
+ "node": ">=22.0.0"
58
+ },
59
+ "scripts": {
60
+ "build": "tsgo --build",
61
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
62
+ "dev": "tsgo --build --watch",
63
+ "type-check": "tsgo --noEmit"
64
+ }
65
+ }