markdown-lsp 0.1.2 → 0.2.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 CHANGED
@@ -1,4 +1,10 @@
1
- # @docsbook/markdown-lsp
1
+ # markdown-lsp
2
+
3
+ [![npm version](https://img.shields.io/npm/v/markdown-lsp.svg?style=flat-square)](https://www.npmjs.com/package/markdown-lsp)
4
+ [![npm downloads](https://img.shields.io/npm/dm/markdown-lsp.svg?style=flat-square)](https://www.npmjs.com/package/markdown-lsp)
5
+ [![CI](https://img.shields.io/github/actions/workflow/status/Docsbook-io/markdown-lsp/ci.yml?branch=main&label=ci&style=flat-square)](https://github.com/Docsbook-io/markdown-lsp/actions/workflows/ci.yml)
6
+ [![license](https://img.shields.io/npm/l/markdown-lsp.svg?style=flat-square)](https://github.com/Docsbook-io/markdown-lsp/blob/main/LICENSE)
7
+ [![node](https://img.shields.io/node/v/markdown-lsp.svg?style=flat-square)](https://www.npmjs.com/package/markdown-lsp)
2
8
 
3
9
  Language Server Protocol implementation for Markdown documentation. Optional AI-powered semantic layer on top.
4
10
 
@@ -3,17 +3,22 @@ export interface InMemoryFile {
3
3
  path: string;
4
4
  content: string;
5
5
  }
6
+ export interface GraphSection {
7
+ headingPath: string[];
8
+ anchor: string | null;
9
+ level: number;
10
+ charCount: number;
11
+ positionStartLine: number;
12
+ positionStartCol: number;
13
+ positionEndLine: number;
14
+ positionEndCol: number;
15
+ content: string;
16
+ }
6
17
  export interface GraphPage {
7
18
  path: string;
8
19
  title: string | null;
9
- sections: Array<{
10
- headingPath: string[];
11
- anchor: string | null;
12
- level: number;
13
- charCount: number;
14
- positionStartLine: number;
15
- positionEndLine: number;
16
- }>;
20
+ content: string;
21
+ sections: GraphSection[];
17
22
  }
18
23
  export interface GraphLink {
19
24
  fromPath: string;
@@ -22,11 +27,17 @@ export interface GraphLink {
22
27
  toAnchor: string | null;
23
28
  kind: ParsedLink["kind"];
24
29
  textAtLink: string | null;
30
+ positionStartLine: number;
31
+ positionStartCol: number;
32
+ positionEndLine: number;
33
+ positionEndCol: number;
25
34
  }
26
35
  export interface InMemoryGraph {
27
36
  pages: GraphPage[];
28
37
  links: GraphLink[];
29
38
  unresolved: GraphLink[];
30
39
  }
40
+ export declare function slugify(text: string): string;
41
+ export declare function joinPath(baseDir: string, rel: string): string;
31
42
  export declare function buildInMemoryGraph(files: InMemoryFile[]): InMemoryGraph;
32
43
  //# sourceMappingURL=inMemoryGraph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryGraph.d.ts","sourceRoot":"","sources":["../../src/bridge/inMemoryGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAEhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,EAAE,CAAA;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;CACxB;AA0BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,CAqEvE"}
1
+ {"version":3,"file":"inMemoryGraph.d.ts","sourceRoot":"","sources":["../../src/bridge/inMemoryGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAEhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C;AAMD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,CA8EvE"}
@@ -1,5 +1,5 @@
1
1
  import { parseMarkdown } from "../indexer/parseMarkdown.js";
2
- function slugify(text) {
2
+ export function slugify(text) {
3
3
  return text
4
4
  .toLowerCase()
5
5
  .trim()
@@ -9,9 +9,9 @@ function slugify(text) {
9
9
  function normalizePath(p) {
10
10
  return p.replace(/\.(md|mdx|markdown)$/i, "").replace(/^\.?\//, "");
11
11
  }
12
- function joinPath(baseDir, rel) {
12
+ export function joinPath(baseDir, rel) {
13
13
  if (!baseDir)
14
- return rel;
14
+ return rel.replace(/^\.?\//, "");
15
15
  if (rel.startsWith("/"))
16
16
  return rel.slice(1);
17
17
  const parts = baseDir.split("/").filter(Boolean);
@@ -48,13 +48,17 @@ export function buildInMemoryGraph(files) {
48
48
  pages.push({
49
49
  path: f.path,
50
50
  title: parsed.title,
51
+ content: f.content,
51
52
  sections: parsed.sections.map((s) => ({
52
53
  headingPath: s.headingPath,
53
54
  anchor: s.anchor,
54
55
  level: s.level,
55
56
  charCount: s.charCount,
56
57
  positionStartLine: s.positionStartLine,
58
+ positionStartCol: s.positionStartCol,
57
59
  positionEndLine: s.positionEndLine,
60
+ positionEndCol: s.positionEndCol,
61
+ content: s.content,
58
62
  })),
59
63
  });
60
64
  for (const l of parsed.links) {
@@ -77,15 +81,18 @@ export function buildInMemoryGraph(files) {
77
81
  break;
78
82
  }
79
83
  }
80
- const link = {
84
+ allLinks.push({
81
85
  fromPath: f.path,
82
86
  toPath: l.toPath,
83
87
  toResolvedPath: toResolved,
84
88
  toAnchor: l.toAnchor,
85
89
  kind: l.kind,
86
90
  textAtLink: l.textAtLink,
87
- };
88
- allLinks.push(link);
91
+ positionStartLine: l.positionStartLine,
92
+ positionStartCol: l.positionStartCol,
93
+ positionEndLine: l.positionEndLine,
94
+ positionEndCol: l.positionEndCol,
95
+ });
89
96
  }
90
97
  }
91
98
  const unresolved = allLinks.filter((l) => l.toResolvedPath === null);
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryGraph.js","sourceRoot":"","sources":["../../src/bridge/inMemoryGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inMemoryGraph.js","sourceRoot":"","sources":["../../src/bridge/inMemoryGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./inMemoryGraph.js";
2
+ export * from "./richDocGraph.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from "./inMemoryGraph.js";
2
+ export * from "./richDocGraph.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,102 @@
1
+ import { type InMemoryFile, type InMemoryGraph, type GraphPage, type GraphLink } from "./inMemoryGraph.js";
2
+ export interface Position {
3
+ line: number;
4
+ col: number;
5
+ }
6
+ export interface Range {
7
+ start: Position;
8
+ end: Position;
9
+ }
10
+ export interface SectionRef {
11
+ pagePath: string;
12
+ anchor: string | null;
13
+ headingPath: string[];
14
+ }
15
+ export interface SearchHit {
16
+ pagePath: string;
17
+ pageTitle: string | null;
18
+ headingPath: string[];
19
+ anchor: string | null;
20
+ snippet: string;
21
+ range: Range;
22
+ matchScore?: number;
23
+ }
24
+ export interface SymbolHit {
25
+ name: string;
26
+ containerName: string | null;
27
+ pagePath: string;
28
+ anchor: string | null;
29
+ range: Range;
30
+ }
31
+ export interface OutlineNode {
32
+ name: string;
33
+ level: number;
34
+ anchor: string | null;
35
+ range: Range;
36
+ children: OutlineNode[];
37
+ }
38
+ export interface NeighborInfo {
39
+ parent: SectionRef | null;
40
+ prev: SectionRef | null;
41
+ next: SectionRef | null;
42
+ children: SectionRef[];
43
+ }
44
+ export interface ResolvedGithubLink {
45
+ repo: string;
46
+ branch: string;
47
+ pagePath: string;
48
+ anchor: string | null;
49
+ url: string;
50
+ }
51
+ export declare class RichDocGraph {
52
+ readonly raw: InMemoryGraph;
53
+ private readonly pagesByPath;
54
+ private readonly incoming;
55
+ private readonly outgoing;
56
+ private readonly anchorIndex;
57
+ constructor(raw: InMemoryGraph);
58
+ static fromFiles(files: InMemoryFile[]): RichDocGraph;
59
+ static fromJSON(json: InMemoryGraph): RichDocGraph;
60
+ toJSON(): InMemoryGraph;
61
+ get pages(): GraphPage[];
62
+ pageByPath(path: string): GraphPage | null;
63
+ pageByRef(ref: string): GraphPage | null;
64
+ outlineOf(pagePath: string): OutlineNode[];
65
+ breadcrumbsOf(sectionRef: SectionRef): string[];
66
+ neighborsOf(sectionRef: SectionRef): NeighborInfo;
67
+ incomingLinks(pagePath: string): GraphLink[];
68
+ outgoingLinks(pagePath: string): GraphLink[];
69
+ findByAnchor(slug: string): SectionRef[];
70
+ orphans(): GraphPage[];
71
+ unresolved(): GraphLink[];
72
+ }
73
+ export declare function searchSymbols(graph: RichDocGraph, query: string, limit?: number): SymbolHit[];
74
+ export interface SearchTextOptions {
75
+ regex?: boolean;
76
+ caseSensitive?: boolean;
77
+ limit?: number;
78
+ contextChars?: number;
79
+ pathPrefix?: string;
80
+ }
81
+ export declare function searchText(graph: RichDocGraph, query: string, opts?: SearchTextOptions): SearchHit[];
82
+ export interface PageSummary {
83
+ path: string;
84
+ title: string | null;
85
+ headingsCount: number;
86
+ charCount: number;
87
+ }
88
+ export declare function listPages(graph: RichDocGraph, opts?: {
89
+ prefix?: string;
90
+ limit?: number;
91
+ }): PageSummary[];
92
+ export declare function searchPaths(graph: RichDocGraph, glob: string): GraphPage[];
93
+ export declare function searchByAnchor(graph: RichDocGraph, slug: string): SectionRef[];
94
+ export interface ResolveLinkArgs {
95
+ fromPagePath: string;
96
+ linkText: string;
97
+ repo: string;
98
+ branch: string;
99
+ }
100
+ export declare function resolveToGithubUrl(graph: RichDocGraph, args: ResolveLinkArgs): ResolvedGithubLink | null;
101
+ export declare function buildGithubBlobUrl(repo: string, branch: string, path: string, anchor: string | null): string;
102
+ //# sourceMappingURL=richDocGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richDocGraph.d.ts","sourceRoot":"","sources":["../../src/bridge/richDocGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ import { buildInMemoryGraph, slugify, joinPath, } from "./inMemoryGraph.js";
2
+ export class RichDocGraph {
3
+ raw;
4
+ pagesByPath = new Map();
5
+ incoming = new Map();
6
+ outgoing = new Map();
7
+ anchorIndex = new Map();
8
+ constructor(raw) {
9
+ this.raw = raw;
10
+ for (const p of raw.pages) {
11
+ this.pagesByPath.set(p.path, p);
12
+ this.outgoing.set(p.path, []);
13
+ for (const s of p.sections) {
14
+ if (!s.anchor)
15
+ continue;
16
+ const arr = this.anchorIndex.get(s.anchor) ?? [];
17
+ arr.push({ pagePath: p.path, anchor: s.anchor, headingPath: s.headingPath });
18
+ this.anchorIndex.set(s.anchor, arr);
19
+ }
20
+ }
21
+ for (const l of raw.links) {
22
+ const out = this.outgoing.get(l.fromPath) ?? [];
23
+ out.push(l);
24
+ this.outgoing.set(l.fromPath, out);
25
+ if (l.toResolvedPath) {
26
+ const inc = this.incoming.get(l.toResolvedPath) ?? [];
27
+ inc.push(l);
28
+ this.incoming.set(l.toResolvedPath, inc);
29
+ }
30
+ }
31
+ }
32
+ static fromFiles(files) {
33
+ return new RichDocGraph(buildInMemoryGraph(files));
34
+ }
35
+ static fromJSON(json) {
36
+ return new RichDocGraph(json);
37
+ }
38
+ toJSON() {
39
+ return this.raw;
40
+ }
41
+ get pages() {
42
+ return this.raw.pages;
43
+ }
44
+ pageByPath(path) {
45
+ return this.pagesByPath.get(path) ?? null;
46
+ }
47
+ pageByRef(ref) {
48
+ const hashAt = ref.indexOf("#");
49
+ const path = hashAt === -1 ? ref : ref.slice(0, hashAt);
50
+ return this.pageByPath(path);
51
+ }
52
+ outlineOf(pagePath) {
53
+ const page = this.pageByPath(pagePath);
54
+ if (!page)
55
+ return [];
56
+ const root = [];
57
+ const stack = [];
58
+ for (const s of page.sections) {
59
+ if (s.level === 0)
60
+ continue;
61
+ const name = s.headingPath[s.headingPath.length - 1] ?? "(untitled)";
62
+ const node = {
63
+ name,
64
+ level: s.level,
65
+ anchor: s.anchor,
66
+ range: sectionRange(s),
67
+ children: [],
68
+ };
69
+ while (stack.length > 0 && stack[stack.length - 1].level >= s.level)
70
+ stack.pop();
71
+ if (stack.length === 0)
72
+ root.push(node);
73
+ else
74
+ stack[stack.length - 1].children.push(node);
75
+ stack.push(node);
76
+ }
77
+ return root;
78
+ }
79
+ breadcrumbsOf(sectionRef) {
80
+ return [...sectionRef.headingPath];
81
+ }
82
+ neighborsOf(sectionRef) {
83
+ const page = this.pageByPath(sectionRef.pagePath);
84
+ if (!page)
85
+ return { parent: null, prev: null, next: null, children: [] };
86
+ const target = page.sections.find((s) => s.anchor === sectionRef.anchor &&
87
+ headingPathEq(s.headingPath, sectionRef.headingPath));
88
+ if (!target)
89
+ return { parent: null, prev: null, next: null, children: [] };
90
+ const parent = target.headingPath.length > 1
91
+ ? findSection(page, target.headingPath.slice(0, -1))
92
+ : null;
93
+ let prev = null;
94
+ let next = null;
95
+ for (let i = 0; i < page.sections.length; i++) {
96
+ const s = page.sections[i];
97
+ if (s === target) {
98
+ for (let j = i - 1; j >= 0; j--) {
99
+ if (page.sections[j].level === target.level) {
100
+ prev = page.sections[j];
101
+ break;
102
+ }
103
+ if (page.sections[j].level < target.level)
104
+ break;
105
+ }
106
+ for (let j = i + 1; j < page.sections.length; j++) {
107
+ if (page.sections[j].level === target.level) {
108
+ next = page.sections[j];
109
+ break;
110
+ }
111
+ if (page.sections[j].level < target.level)
112
+ break;
113
+ }
114
+ break;
115
+ }
116
+ }
117
+ const children = page.sections.filter((s) => s.level === target.level + 1 &&
118
+ s.headingPath.length === target.headingPath.length + 1 &&
119
+ headingPathEq(s.headingPath.slice(0, -1), target.headingPath));
120
+ return {
121
+ parent: parent ? sectionToRef(page.path, parent) : null,
122
+ prev: prev ? sectionToRef(page.path, prev) : null,
123
+ next: next ? sectionToRef(page.path, next) : null,
124
+ children: children.map((c) => sectionToRef(page.path, c)),
125
+ };
126
+ }
127
+ incomingLinks(pagePath) {
128
+ return this.incoming.get(pagePath) ?? [];
129
+ }
130
+ outgoingLinks(pagePath) {
131
+ return this.outgoing.get(pagePath) ?? [];
132
+ }
133
+ findByAnchor(slug) {
134
+ return this.anchorIndex.get(slug) ?? [];
135
+ }
136
+ orphans() {
137
+ return this.raw.pages.filter((p) => (this.incoming.get(p.path)?.length ?? 0) === 0);
138
+ }
139
+ unresolved() {
140
+ return this.raw.unresolved;
141
+ }
142
+ }
143
+ function sectionRange(s) {
144
+ return {
145
+ start: { line: s.positionStartLine, col: s.positionStartCol },
146
+ end: { line: s.positionEndLine, col: s.positionEndCol },
147
+ };
148
+ }
149
+ function sectionToRef(pagePath, s) {
150
+ return { pagePath, anchor: s.anchor, headingPath: [...s.headingPath] };
151
+ }
152
+ function headingPathEq(a, b) {
153
+ if (a.length !== b.length)
154
+ return false;
155
+ for (let i = 0; i < a.length; i++)
156
+ if (a[i] !== b[i])
157
+ return false;
158
+ return true;
159
+ }
160
+ function findSection(page, headingPath) {
161
+ return (page.sections.find((s) => headingPathEq(s.headingPath, headingPath)) ?? null);
162
+ }
163
+ function subsequenceMatch(query, target) {
164
+ if (!query)
165
+ return true;
166
+ const q = query.toLowerCase();
167
+ const t = target.toLowerCase();
168
+ let qi = 0;
169
+ for (let ti = 0; ti < t.length && qi < q.length; ti++) {
170
+ if (t[ti] === q[qi])
171
+ qi++;
172
+ }
173
+ return qi === q.length;
174
+ }
175
+ export function searchSymbols(graph, query, limit = 100) {
176
+ const out = [];
177
+ for (const p of graph.pages) {
178
+ for (const s of p.sections) {
179
+ if (s.level === 0)
180
+ continue;
181
+ const name = s.headingPath[s.headingPath.length - 1] ?? "";
182
+ if (!subsequenceMatch(query, name))
183
+ continue;
184
+ out.push({
185
+ name,
186
+ containerName: s.headingPath.length > 1 ? s.headingPath.slice(0, -1).join(" / ") : null,
187
+ pagePath: p.path,
188
+ anchor: s.anchor,
189
+ range: sectionRange(s),
190
+ });
191
+ if (out.length >= limit)
192
+ return out;
193
+ }
194
+ }
195
+ for (const p of graph.pages) {
196
+ const title = p.title ?? p.path;
197
+ if (!subsequenceMatch(query, title))
198
+ continue;
199
+ out.push({
200
+ name: title,
201
+ containerName: p.path,
202
+ pagePath: p.path,
203
+ anchor: null,
204
+ range: { start: { line: 0, col: 0 }, end: { line: 0, col: 0 } },
205
+ });
206
+ if (out.length >= limit)
207
+ return out;
208
+ }
209
+ return out;
210
+ }
211
+ export function searchText(graph, query, opts = {}) {
212
+ const limit = opts.limit ?? 50;
213
+ const ctx = opts.contextChars ?? 60;
214
+ const matcher = opts.regex
215
+ ? new RegExp(query, opts.caseSensitive ? "g" : "gi")
216
+ : new RegExp(escapeRegex(query), opts.caseSensitive ? "g" : "gi");
217
+ const hits = [];
218
+ for (const p of graph.pages) {
219
+ if (opts.pathPrefix && !p.path.startsWith(opts.pathPrefix))
220
+ continue;
221
+ let m;
222
+ matcher.lastIndex = 0;
223
+ while ((m = matcher.exec(p.content)) !== null) {
224
+ const start = m.index;
225
+ const end = m.index + m[0].length;
226
+ const { line: startLine, col: startCol } = offsetToLineCol(p.content, start);
227
+ const { line: endLine, col: endCol } = offsetToLineCol(p.content, end);
228
+ const snippetStart = Math.max(0, start - ctx);
229
+ const snippetEnd = Math.min(p.content.length, end + ctx);
230
+ const snippet = (snippetStart > 0 ? "…" : "") + p.content.slice(snippetStart, snippetEnd) + (snippetEnd < p.content.length ? "…" : "");
231
+ const containingSection = p.sections.find((s) => s.positionStartLine <= startLine && s.positionEndLine >= startLine);
232
+ hits.push({
233
+ pagePath: p.path,
234
+ pageTitle: p.title,
235
+ headingPath: containingSection?.headingPath ?? [],
236
+ anchor: containingSection?.anchor ?? null,
237
+ snippet,
238
+ range: { start: { line: startLine, col: startCol }, end: { line: endLine, col: endCol } },
239
+ });
240
+ if (hits.length >= limit)
241
+ return hits;
242
+ if (m[0].length === 0)
243
+ matcher.lastIndex++;
244
+ }
245
+ }
246
+ return hits;
247
+ }
248
+ export function listPages(graph, opts = {}) {
249
+ const limit = opts.limit ?? 1000;
250
+ const out = [];
251
+ for (const p of graph.pages) {
252
+ if (opts.prefix && !p.path.startsWith(opts.prefix))
253
+ continue;
254
+ out.push({
255
+ path: p.path,
256
+ title: p.title,
257
+ headingsCount: p.sections.filter((s) => s.level >= 1).length,
258
+ charCount: p.content.length,
259
+ });
260
+ if (out.length >= limit)
261
+ break;
262
+ }
263
+ return out;
264
+ }
265
+ export function searchPaths(graph, glob) {
266
+ const re = globToRegex(glob);
267
+ return graph.pages.filter((p) => re.test(p.path));
268
+ }
269
+ export function searchByAnchor(graph, slug) {
270
+ return graph.findByAnchor(slug);
271
+ }
272
+ export function resolveToGithubUrl(graph, args) {
273
+ const fromPage = graph.pageByPath(args.fromPagePath);
274
+ if (!fromPage)
275
+ return null;
276
+ let target = args.linkText.trim();
277
+ let anchor = null;
278
+ const hashAt = target.indexOf("#");
279
+ if (hashAt !== -1) {
280
+ anchor = target.slice(hashAt + 1) || null;
281
+ target = target.slice(0, hashAt);
282
+ }
283
+ if (!target) {
284
+ return {
285
+ repo: args.repo,
286
+ branch: args.branch,
287
+ pagePath: fromPage.path,
288
+ anchor,
289
+ url: buildGithubBlobUrl(args.repo, args.branch, fromPage.path, anchor),
290
+ };
291
+ }
292
+ if (/^https?:\/\//.test(target) || target.startsWith("mailto:"))
293
+ return null;
294
+ const fromDir = fromPage.path.includes("/") ? fromPage.path.slice(0, fromPage.path.lastIndexOf("/")) : "";
295
+ const joined = joinPath(fromDir, target);
296
+ const existing = graph.pageByPath(joined) ?? graph.pageByPath(target);
297
+ const resolvedPath = existing?.path ?? joined;
298
+ return {
299
+ repo: args.repo,
300
+ branch: args.branch,
301
+ pagePath: resolvedPath,
302
+ anchor,
303
+ url: buildGithubBlobUrl(args.repo, args.branch, resolvedPath, anchor),
304
+ };
305
+ }
306
+ export function buildGithubBlobUrl(repo, branch, path, anchor) {
307
+ const safePath = path.split("/").map((seg) => encodeURIComponent(seg)).join("/");
308
+ const base = `https://github.com/${repo}/blob/${encodeURIComponent(branch)}/${safePath}`;
309
+ return anchor ? `${base}#${slugify(anchor)}` : base;
310
+ }
311
+ function offsetToLineCol(text, offset) {
312
+ let line = 0;
313
+ let lastNl = -1;
314
+ for (let i = 0; i < offset; i++) {
315
+ if (text.charCodeAt(i) === 10) {
316
+ line++;
317
+ lastNl = i;
318
+ }
319
+ }
320
+ return { line, col: offset - lastNl - 1 };
321
+ }
322
+ function escapeRegex(s) {
323
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
324
+ }
325
+ function globToRegex(glob) {
326
+ let re = "^";
327
+ for (let i = 0; i < glob.length; i++) {
328
+ const c = glob[i];
329
+ if (c === "*") {
330
+ if (glob[i + 1] === "*") {
331
+ re += ".*";
332
+ i++;
333
+ }
334
+ else {
335
+ re += "[^/]*";
336
+ }
337
+ }
338
+ else if (c === "?") {
339
+ re += "[^/]";
340
+ }
341
+ else if (".+^${}()|[]\\".includes(c)) {
342
+ re += "\\" + c;
343
+ }
344
+ else {
345
+ re += c;
346
+ }
347
+ }
348
+ re += "$";
349
+ return new RegExp(re);
350
+ }
351
+ //# sourceMappingURL=richDocGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richDocGraph.js","sourceRoot":"","sources":["../../src/bridge/richDocGraph.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markdown-lsp",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Language Server Protocol implementation for Markdown with optional AI-canonicalized glossary that resolves synonyms across docs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,7 @@
9
9
  "main": "./dist/server.js",
10
10
  "exports": {
11
11
  ".": "./dist/server.js",
12
- "./bridge": "./dist/bridge/inMemoryGraph.js",
12
+ "./bridge": "./dist/bridge/index.js",
13
13
  "./indexer": "./dist/indexer/indexer.js",
14
14
  "./core": "./dist/core/index.js",
15
15
  "./parser": "./dist/indexer/parseMarkdown.js"