markdown-lsp 0.2.1 → 1.0.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/README.md +148 -52
- package/bin/markdown-lsp +1 -1
- package/dist/bridge/richDocGraph.d.ts +11 -0
- package/dist/bridge/richDocGraph.d.ts.map +1 -1
- package/dist/bridge/richDocGraph.js +156 -0
- package/dist/bridge/richDocGraph.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +265 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/findReferences.d.ts +1 -1
- package/dist/db/schema.d.ts +1 -1
- package/dist/graph.d.ts +4 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +70 -0
- package/dist/graph.js.map +1 -0
- package/dist/lsp.d.ts +2 -0
- package/dist/lsp.d.ts.map +1 -0
- package/dist/lsp.js +343 -0
- package/dist/lsp.js.map +1 -0
- package/package.json +6 -5
package/dist/cli.js
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import { buildGraph } from "./graph.js";
|
|
3
|
+
import { listPages, searchText, searchTextRanked, searchSymbols, searchPaths, } from "./bridge/index.js";
|
|
4
|
+
const USAGE = `
|
|
5
|
+
markdown-lsp v1.0.0 — CLI for querying Markdown documentation graphs
|
|
6
|
+
|
|
7
|
+
USAGE
|
|
8
|
+
markdown-lsp <subcommand> [options]
|
|
9
|
+
|
|
10
|
+
SUBCOMMANDS
|
|
11
|
+
workspace-outline <docs-dir> [--prefix <p>] [--limit <n>]
|
|
12
|
+
List all pages in the workspace with metadata.
|
|
13
|
+
|
|
14
|
+
outline <docs-dir> <page>
|
|
15
|
+
Show the heading outline of a single page.
|
|
16
|
+
|
|
17
|
+
search-text <docs-dir> <query> [--mode ranked|verbatim] [--regex]
|
|
18
|
+
[--case-sensitive] [--prefix <p>] [--limit <n>] [--context <n>]
|
|
19
|
+
Full-text search. Default mode: ranked (natural-language). Use
|
|
20
|
+
--mode verbatim (or --regex) for exact/regex matching.
|
|
21
|
+
|
|
22
|
+
search-symbols <docs-dir> <query> [--limit <n>]
|
|
23
|
+
Fuzzy subsequence search across all headings.
|
|
24
|
+
|
|
25
|
+
search-paths <docs-dir> <glob>
|
|
26
|
+
List pages whose paths match a glob pattern (*, **, ?).
|
|
27
|
+
|
|
28
|
+
links-to <docs-dir> <page>
|
|
29
|
+
Show all pages that link to <page>.
|
|
30
|
+
|
|
31
|
+
links-from <docs-dir> <page>
|
|
32
|
+
Show all links that originate from <page>.
|
|
33
|
+
|
|
34
|
+
resolve-link <docs-dir> <from-page> <link-text>
|
|
35
|
+
Resolve a specific link text from a given page.
|
|
36
|
+
|
|
37
|
+
get-section <docs-dir> <page> <anchor>
|
|
38
|
+
Retrieve a section by its anchor slug.
|
|
39
|
+
|
|
40
|
+
lsp [--stdio]
|
|
41
|
+
serve [--stdio]
|
|
42
|
+
Start the LSP stdio server (for editor integration).
|
|
43
|
+
Back-compat: --stdio | --node-ipc | --socket=<n> as first arg also
|
|
44
|
+
starts the LSP server.
|
|
45
|
+
|
|
46
|
+
GLOBAL FLAGS
|
|
47
|
+
--pretty Pretty-print JSON output (default: compact)
|
|
48
|
+
--text Human-readable output (where implemented)
|
|
49
|
+
-h, --help Print this help
|
|
50
|
+
|
|
51
|
+
OUTPUT
|
|
52
|
+
All subcommands print JSON to stdout (compact by default, use --pretty
|
|
53
|
+
for indented output). The LSP subcommand speaks the Language Server Protocol
|
|
54
|
+
over stdio — it does NOT print JSON.
|
|
55
|
+
|
|
56
|
+
EXAMPLES
|
|
57
|
+
markdown-lsp workspace-outline ./docs
|
|
58
|
+
markdown-lsp search-text ./docs "getting started" --pretty
|
|
59
|
+
markdown-lsp outline ./docs introduction.md
|
|
60
|
+
markdown-lsp lsp --stdio
|
|
61
|
+
`.trim();
|
|
62
|
+
function die(msg) {
|
|
63
|
+
process.stderr.write(msg + "\n");
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
function out(value, pretty) {
|
|
67
|
+
process.stdout.write((pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value)) + "\n");
|
|
68
|
+
}
|
|
69
|
+
async function startLsp() {
|
|
70
|
+
await import("./lsp.js");
|
|
71
|
+
}
|
|
72
|
+
async function main() {
|
|
73
|
+
const argv = process.argv.slice(2);
|
|
74
|
+
// Back-compat: if the first argument looks like an old LSP flag, start LSP.
|
|
75
|
+
if (argv.length === 0 ||
|
|
76
|
+
argv[0] === "--stdio" ||
|
|
77
|
+
argv[0] === "--node-ipc" ||
|
|
78
|
+
(argv[0] !== undefined && argv[0].startsWith("--socket"))) {
|
|
79
|
+
if (argv.length === 0) {
|
|
80
|
+
// No args: print usage and exit cleanly (not the old LSP crash).
|
|
81
|
+
process.stdout.write(USAGE + "\n");
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
// Old LSP invocation style — keep working so editor configs don't break.
|
|
85
|
+
await startLsp();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const subcommand = argv[0];
|
|
89
|
+
const rest = argv.slice(1);
|
|
90
|
+
// Help shortcuts
|
|
91
|
+
if (subcommand === "--help" || subcommand === "-h") {
|
|
92
|
+
process.stdout.write(USAGE + "\n");
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
// LSP subcommand
|
|
96
|
+
if (subcommand === "lsp" || subcommand === "serve") {
|
|
97
|
+
await startLsp();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Parse global flags from the remaining args
|
|
101
|
+
let pretty = false;
|
|
102
|
+
const filteredRest = [];
|
|
103
|
+
for (const arg of rest) {
|
|
104
|
+
if (arg === "--pretty")
|
|
105
|
+
pretty = true;
|
|
106
|
+
else
|
|
107
|
+
filteredRest.push(arg);
|
|
108
|
+
}
|
|
109
|
+
switch (subcommand) {
|
|
110
|
+
case "workspace-outline": {
|
|
111
|
+
const { values, positionals } = parseArgs({
|
|
112
|
+
args: filteredRest,
|
|
113
|
+
options: {
|
|
114
|
+
prefix: { type: "string" },
|
|
115
|
+
limit: { type: "string" },
|
|
116
|
+
},
|
|
117
|
+
allowPositionals: true,
|
|
118
|
+
});
|
|
119
|
+
const docsDir = positionals[0] ?? die("workspace-outline requires <docs-dir>");
|
|
120
|
+
const graph = buildGraph(docsDir);
|
|
121
|
+
const result = listPages(graph, {
|
|
122
|
+
prefix: values.prefix,
|
|
123
|
+
limit: values.limit !== undefined ? parseInt(values.limit, 10) : undefined,
|
|
124
|
+
});
|
|
125
|
+
out(result, pretty);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case "outline": {
|
|
129
|
+
const { positionals } = parseArgs({
|
|
130
|
+
args: filteredRest,
|
|
131
|
+
options: {},
|
|
132
|
+
allowPositionals: true,
|
|
133
|
+
});
|
|
134
|
+
const docsDir = positionals[0] ?? die("outline requires <docs-dir>");
|
|
135
|
+
const page = positionals[1] ?? die("outline requires <page>");
|
|
136
|
+
const graph = buildGraph(docsDir);
|
|
137
|
+
const result = graph.outlineOf(page);
|
|
138
|
+
out(result, pretty);
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case "search-text": {
|
|
142
|
+
const { values, positionals } = parseArgs({
|
|
143
|
+
args: filteredRest,
|
|
144
|
+
options: {
|
|
145
|
+
mode: { type: "string" },
|
|
146
|
+
regex: { type: "boolean" },
|
|
147
|
+
"case-sensitive": { type: "boolean" },
|
|
148
|
+
prefix: { type: "string" },
|
|
149
|
+
limit: { type: "string" },
|
|
150
|
+
context: { type: "string" },
|
|
151
|
+
},
|
|
152
|
+
allowPositionals: true,
|
|
153
|
+
});
|
|
154
|
+
const docsDir = positionals[0] ?? die("search-text requires <docs-dir>");
|
|
155
|
+
const query = positionals[1] ?? die("search-text requires <query>");
|
|
156
|
+
const graph = buildGraph(docsDir);
|
|
157
|
+
const opts = {
|
|
158
|
+
regex: values.regex,
|
|
159
|
+
caseSensitive: values["case-sensitive"],
|
|
160
|
+
pathPrefix: values.prefix,
|
|
161
|
+
limit: values.limit !== undefined ? parseInt(values.limit, 10) : undefined,
|
|
162
|
+
contextChars: values.context !== undefined ? parseInt(values.context, 10) : undefined,
|
|
163
|
+
};
|
|
164
|
+
const mode = values.mode ?? "ranked";
|
|
165
|
+
const result = mode === "verbatim" || values.regex
|
|
166
|
+
? searchText(graph, query, opts)
|
|
167
|
+
: searchTextRanked(graph, query, opts);
|
|
168
|
+
out(result, pretty);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case "search-symbols": {
|
|
172
|
+
const { values, positionals } = parseArgs({
|
|
173
|
+
args: filteredRest,
|
|
174
|
+
options: {
|
|
175
|
+
limit: { type: "string" },
|
|
176
|
+
},
|
|
177
|
+
allowPositionals: true,
|
|
178
|
+
});
|
|
179
|
+
const docsDir = positionals[0] ?? die("search-symbols requires <docs-dir>");
|
|
180
|
+
const query = positionals[1] ?? die("search-symbols requires <query>");
|
|
181
|
+
const graph = buildGraph(docsDir);
|
|
182
|
+
const limit = values.limit !== undefined ? parseInt(values.limit, 10) : undefined;
|
|
183
|
+
const result = searchSymbols(graph, query, limit);
|
|
184
|
+
out(result, pretty);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case "search-paths": {
|
|
188
|
+
const { positionals } = parseArgs({
|
|
189
|
+
args: filteredRest,
|
|
190
|
+
options: {},
|
|
191
|
+
allowPositionals: true,
|
|
192
|
+
});
|
|
193
|
+
const docsDir = positionals[0] ?? die("search-paths requires <docs-dir>");
|
|
194
|
+
const glob = positionals[1] ?? die("search-paths requires <glob>");
|
|
195
|
+
const graph = buildGraph(docsDir);
|
|
196
|
+
const result = searchPaths(graph, glob);
|
|
197
|
+
out(result, pretty);
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
case "links-to": {
|
|
201
|
+
const { positionals } = parseArgs({
|
|
202
|
+
args: filteredRest,
|
|
203
|
+
options: {},
|
|
204
|
+
allowPositionals: true,
|
|
205
|
+
});
|
|
206
|
+
const docsDir = positionals[0] ?? die("links-to requires <docs-dir>");
|
|
207
|
+
const page = positionals[1] ?? die("links-to requires <page>");
|
|
208
|
+
const graph = buildGraph(docsDir);
|
|
209
|
+
const result = graph.incomingLinks(page);
|
|
210
|
+
out(result, pretty);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case "links-from": {
|
|
214
|
+
const { positionals } = parseArgs({
|
|
215
|
+
args: filteredRest,
|
|
216
|
+
options: {},
|
|
217
|
+
allowPositionals: true,
|
|
218
|
+
});
|
|
219
|
+
const docsDir = positionals[0] ?? die("links-from requires <docs-dir>");
|
|
220
|
+
const page = positionals[1] ?? die("links-from requires <page>");
|
|
221
|
+
const graph = buildGraph(docsDir);
|
|
222
|
+
const result = graph.outgoingLinks(page);
|
|
223
|
+
out(result, pretty);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case "resolve-link": {
|
|
227
|
+
const { positionals } = parseArgs({
|
|
228
|
+
args: filteredRest,
|
|
229
|
+
options: {},
|
|
230
|
+
allowPositionals: true,
|
|
231
|
+
});
|
|
232
|
+
const docsDir = positionals[0] ?? die("resolve-link requires <docs-dir>");
|
|
233
|
+
const fromPage = positionals[1] ?? die("resolve-link requires <from-page>");
|
|
234
|
+
const linkText = positionals[2] ?? die("resolve-link requires <link-text>");
|
|
235
|
+
const graph = buildGraph(docsDir);
|
|
236
|
+
const links = graph.outgoingLinks(fromPage);
|
|
237
|
+
const match = links.find((l) => l.textAtLink === linkText) ?? null;
|
|
238
|
+
out(match, pretty);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case "get-section": {
|
|
242
|
+
const { positionals } = parseArgs({
|
|
243
|
+
args: filteredRest,
|
|
244
|
+
options: {},
|
|
245
|
+
allowPositionals: true,
|
|
246
|
+
});
|
|
247
|
+
const docsDir = positionals[0] ?? die("get-section requires <docs-dir>");
|
|
248
|
+
const page = positionals[1] ?? die("get-section requires <page>");
|
|
249
|
+
const anchor = positionals[2] ?? die("get-section requires <anchor>");
|
|
250
|
+
const graph = buildGraph(docsDir);
|
|
251
|
+
const pageObj = graph.pageByPath(page);
|
|
252
|
+
const section = pageObj?.sections.find((s) => s.anchor === anchor) ?? null;
|
|
253
|
+
out(section, pretty);
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
default:
|
|
257
|
+
process.stderr.write(`Unknown subcommand: ${subcommand}\n\n${USAGE}\n`);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
main().catch((err) => {
|
|
262
|
+
process.stderr.write("[markdown-lsp] Fatal error: " + (err instanceof Error ? err.stack ?? err.message : String(err)) + "\n");
|
|
263
|
+
process.exit(1);
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,9 +28,9 @@ export interface UnresolvedLink {
|
|
|
28
28
|
}
|
|
29
29
|
export declare function findUnresolvedLinks(workspace: WorkspaceRef, forDocPath?: string): Promise<UnresolvedLink[]>;
|
|
30
30
|
export declare function getDocumentByPath(workspace: WorkspaceRef, relPath: string): Promise<{
|
|
31
|
+
path: string;
|
|
31
32
|
id: string;
|
|
32
33
|
workspaceId: string;
|
|
33
|
-
path: string;
|
|
34
34
|
contentHash: string;
|
|
35
35
|
title: string | null;
|
|
36
36
|
lastIndexedAt: Date;
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -695,7 +695,7 @@ export declare const reindexJobs: import("drizzle-orm/pg-core").PgTableWithColum
|
|
|
695
695
|
tableName: "mdlsp_reindex_jobs";
|
|
696
696
|
dataType: "string";
|
|
697
697
|
columnType: "PgText";
|
|
698
|
-
data: "
|
|
698
|
+
data: "done" | "pending" | "running" | "failed";
|
|
699
699
|
driverParam: string;
|
|
700
700
|
notNull: true;
|
|
701
701
|
hasDefault: false;
|
package/dist/graph.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAEZ,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAA;AAc1B,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAKhE;AA4CD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAIzD"}
|
package/dist/graph.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join, relative, resolve } from "node:path";
|
|
3
|
+
import { RichDocGraph, buildInMemoryGraph, } from "./bridge/index.js";
|
|
4
|
+
const MD_EXTENSIONS = new Set([".md", ".mdx", ".markdown"]);
|
|
5
|
+
const IGNORED_DIRS = new Set([
|
|
6
|
+
"node_modules",
|
|
7
|
+
".git",
|
|
8
|
+
".next",
|
|
9
|
+
".vercel",
|
|
10
|
+
"dist",
|
|
11
|
+
"build",
|
|
12
|
+
".cache",
|
|
13
|
+
".turbo",
|
|
14
|
+
]);
|
|
15
|
+
export function loadDocsAsFiles(docsRoot) {
|
|
16
|
+
const absRoot = resolve(docsRoot);
|
|
17
|
+
const files = [];
|
|
18
|
+
walk(absRoot, absRoot, files);
|
|
19
|
+
return files;
|
|
20
|
+
}
|
|
21
|
+
function walk(absRoot, dir, out) {
|
|
22
|
+
let entries;
|
|
23
|
+
try {
|
|
24
|
+
entries = readdirSync(dir);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
for (const name of entries) {
|
|
30
|
+
if (name.startsWith(".") && name !== ".")
|
|
31
|
+
continue;
|
|
32
|
+
if (IGNORED_DIRS.has(name))
|
|
33
|
+
continue;
|
|
34
|
+
const full = join(dir, name);
|
|
35
|
+
let st;
|
|
36
|
+
try {
|
|
37
|
+
st = statSync(full);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (st.isDirectory()) {
|
|
43
|
+
walk(absRoot, full, out);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (!st.isFile())
|
|
47
|
+
continue;
|
|
48
|
+
const dotIdx = name.lastIndexOf(".");
|
|
49
|
+
if (dotIdx < 0)
|
|
50
|
+
continue;
|
|
51
|
+
const ext = name.slice(dotIdx).toLowerCase();
|
|
52
|
+
if (!MD_EXTENSIONS.has(ext))
|
|
53
|
+
continue;
|
|
54
|
+
const rel = relative(absRoot, full).split("\\").join("/");
|
|
55
|
+
let content;
|
|
56
|
+
try {
|
|
57
|
+
content = readFileSync(full, "utf8");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
out.push({ path: rel, content });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function buildGraph(docsRoot) {
|
|
66
|
+
const files = loadDocsAsFiles(docsRoot);
|
|
67
|
+
const raw = buildInMemoryGraph(files);
|
|
68
|
+
return new RichDocGraph(raw);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,kBAAkB,GAEnB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,cAAc;IACd,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;CACT,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,MAAM,KAAK,GAAmB,EAAE,CAAA;IAChC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,IAAI,CAAC,OAAe,EAAE,GAAW,EAAE,GAAmB;IAC7D,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG;YAAE,SAAQ;QAClD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC5B,IAAI,EAAE,CAAA;QACN,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QAED,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YACxB,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,SAAQ;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,MAAM,GAAG,CAAC;YAAE,SAAQ;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAErC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzD,IAAI,OAAe,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC"}
|
package/dist/lsp.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":""}
|