markdown-lsp 0.1.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/LICENSE +21 -0
- package/README.md +104 -0
- package/bin/markdown-lsp +2 -0
- package/dist/ai/config.d.ts +9 -0
- package/dist/ai/config.d.ts.map +1 -0
- package/dist/ai/config.js +19 -0
- package/dist/ai/config.js.map +1 -0
- package/dist/ai/embeddings.d.ts +7 -0
- package/dist/ai/embeddings.d.ts.map +1 -0
- package/dist/ai/embeddings.js +27 -0
- package/dist/ai/embeddings.js.map +1 -0
- package/dist/ai/extract.d.ts +58 -0
- package/dist/ai/extract.d.ts.map +1 -0
- package/dist/ai/extract.js +58 -0
- package/dist/ai/extract.js.map +1 -0
- package/dist/ai/gateway.d.ts +5 -0
- package/dist/ai/gateway.d.ts.map +1 -0
- package/dist/ai/gateway.js +18 -0
- package/dist/ai/gateway.js.map +1 -0
- package/dist/bridge/inMemoryGraph.d.ts +32 -0
- package/dist/bridge/inMemoryGraph.d.ts.map +1 -0
- package/dist/bridge/inMemoryGraph.js +94 -0
- package/dist/bridge/inMemoryGraph.js.map +1 -0
- package/dist/core/documentSymbols.d.ts +33 -0
- package/dist/core/documentSymbols.d.ts.map +1 -0
- package/dist/core/documentSymbols.js +113 -0
- package/dist/core/documentSymbols.js.map +1 -0
- package/dist/core/findReferences.d.ts +38 -0
- package/dist/core/findReferences.d.ts.map +1 -0
- package/dist/core/findReferences.js +59 -0
- package/dist/core/findReferences.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/db/client.d.ts +6 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +22 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +812 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +118 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/indexer/indexer.d.ts +24 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +248 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/indexer/parseMarkdown.d.ts +30 -0
- package/dist/indexer/parseMarkdown.d.ts.map +1 -0
- package/dist/indexer/parseMarkdown.js +191 -0
- package/dist/indexer/parseMarkdown.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +343 -0
- package/dist/server.js.map +1 -0
- package/package.json +82 -0
- package/src/db/migrations/0000_init.sql +94 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { eq, and } from "drizzle-orm";
|
|
2
|
+
import { db } from "../db/client.js";
|
|
3
|
+
import { documents, sections } from "../db/schema.js";
|
|
4
|
+
export async function getDocumentSymbols(workspace, relPath) {
|
|
5
|
+
const doc = await db
|
|
6
|
+
.select()
|
|
7
|
+
.from(documents)
|
|
8
|
+
.where(and(eq(documents.workspaceId, workspace.id), eq(documents.path, relPath)))
|
|
9
|
+
.limit(1);
|
|
10
|
+
if (doc.length === 0)
|
|
11
|
+
return [];
|
|
12
|
+
const secs = await db
|
|
13
|
+
.select()
|
|
14
|
+
.from(sections)
|
|
15
|
+
.where(eq(sections.documentId, doc[0].id));
|
|
16
|
+
secs.sort((a, b) => a.positionStartLine - b.positionStartLine);
|
|
17
|
+
const root = [];
|
|
18
|
+
const stack = [];
|
|
19
|
+
for (const s of secs) {
|
|
20
|
+
if (s.level === 0)
|
|
21
|
+
continue;
|
|
22
|
+
const name = s.headingPath[s.headingPath.length - 1] ?? "(untitled)";
|
|
23
|
+
const node = {
|
|
24
|
+
name,
|
|
25
|
+
level: s.level,
|
|
26
|
+
anchor: s.anchor,
|
|
27
|
+
range: {
|
|
28
|
+
startLine: s.positionStartLine,
|
|
29
|
+
startCol: s.positionStartCol,
|
|
30
|
+
endLine: s.positionEndLine,
|
|
31
|
+
endCol: s.positionEndCol,
|
|
32
|
+
},
|
|
33
|
+
selectionRange: {
|
|
34
|
+
startLine: s.positionStartLine,
|
|
35
|
+
startCol: s.positionStartCol,
|
|
36
|
+
endLine: s.positionStartLine,
|
|
37
|
+
endCol: s.positionStartCol + name.length + s.level + 1,
|
|
38
|
+
},
|
|
39
|
+
children: [],
|
|
40
|
+
};
|
|
41
|
+
while (stack.length > 0 && stack[stack.length - 1].level >= s.level)
|
|
42
|
+
stack.pop();
|
|
43
|
+
if (stack.length === 0)
|
|
44
|
+
root.push(node);
|
|
45
|
+
else
|
|
46
|
+
stack[stack.length - 1].children.push(node);
|
|
47
|
+
stack.push(node);
|
|
48
|
+
}
|
|
49
|
+
return root;
|
|
50
|
+
}
|
|
51
|
+
function subsequenceMatch(query, target) {
|
|
52
|
+
if (!query)
|
|
53
|
+
return true;
|
|
54
|
+
const q = query.toLowerCase();
|
|
55
|
+
const t = target.toLowerCase();
|
|
56
|
+
let qi = 0;
|
|
57
|
+
for (let ti = 0; ti < t.length && qi < q.length; ti++) {
|
|
58
|
+
if (t[ti] === q[qi])
|
|
59
|
+
qi++;
|
|
60
|
+
}
|
|
61
|
+
return qi === q.length;
|
|
62
|
+
}
|
|
63
|
+
export async function getWorkspaceSymbols(workspace, query, limit = 100) {
|
|
64
|
+
const allDocs = await db
|
|
65
|
+
.select()
|
|
66
|
+
.from(documents)
|
|
67
|
+
.where(eq(documents.workspaceId, workspace.id));
|
|
68
|
+
const docById = new Map(allDocs.map((d) => [d.id, d]));
|
|
69
|
+
const allSections = await db
|
|
70
|
+
.select()
|
|
71
|
+
.from(sections)
|
|
72
|
+
.where(eq(sections.workspaceId, workspace.id));
|
|
73
|
+
const out = [];
|
|
74
|
+
for (const s of allSections) {
|
|
75
|
+
if (s.level === 0)
|
|
76
|
+
continue;
|
|
77
|
+
const name = s.headingPath[s.headingPath.length - 1] ?? "";
|
|
78
|
+
if (!subsequenceMatch(query, name))
|
|
79
|
+
continue;
|
|
80
|
+
const doc = docById.get(s.documentId);
|
|
81
|
+
if (!doc)
|
|
82
|
+
continue;
|
|
83
|
+
const container = s.headingPath.length > 1 ? s.headingPath.slice(0, -1).join(" / ") : null;
|
|
84
|
+
out.push({
|
|
85
|
+
name,
|
|
86
|
+
containerName: container,
|
|
87
|
+
documentPath: doc.path,
|
|
88
|
+
range: {
|
|
89
|
+
startLine: s.positionStartLine,
|
|
90
|
+
startCol: s.positionStartCol,
|
|
91
|
+
endLine: s.positionEndLine,
|
|
92
|
+
endCol: s.positionEndCol,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
if (out.length >= limit)
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
for (const d of allDocs) {
|
|
99
|
+
const title = d.title ?? d.path;
|
|
100
|
+
if (!subsequenceMatch(query, title))
|
|
101
|
+
continue;
|
|
102
|
+
out.push({
|
|
103
|
+
name: title,
|
|
104
|
+
containerName: d.path,
|
|
105
|
+
documentPath: d.path,
|
|
106
|
+
range: { startLine: 0, startCol: 0, endLine: 0, endCol: 0 },
|
|
107
|
+
});
|
|
108
|
+
if (out.length >= limit)
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=documentSymbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentSymbols.js","sourceRoot":"","sources":["../../src/core/documentSymbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAYrD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAuB,EAAE,OAAe;IAC/E,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,MAAM,EAAE;SACR,IAAI,CAAC,SAAS,CAAC;SACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SAChF,KAAK,CAAC,CAAC,CAAC,CAAA;IACX,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE/B,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,EAAE;SACR,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAE9D,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAiB,EAAE,CAAA;IAE9B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;YAAE,SAAQ;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,YAAY,CAAA;QACpE,MAAM,IAAI,GAAe;YACvB,IAAI;YACJ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC,CAAC,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC,CAAC,gBAAgB;gBAC5B,OAAO,EAAE,CAAC,CAAC,eAAe;gBAC1B,MAAM,EAAE,CAAC,CAAC,cAAc;aACzB;YACD,cAAc,EAAE;gBACd,SAAS,EAAE,CAAC,CAAC,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC,CAAC,gBAAgB;gBAC5B,OAAO,EAAE,CAAC,CAAC,iBAAiB;gBAC5B,MAAM,EAAE,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;aACvD;YACD,QAAQ,EAAE,EAAE;SACb,CAAA;QACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,EAAE,CAAA;QACjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YAClC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AASD,SAAS,gBAAgB,CAAC,KAAa,EAAE,MAAc;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;IAC9B,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAAE,EAAE,EAAE,CAAA;IAC3B,CAAC;IACD,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAuB,EAAE,KAAa,EAAE,KAAK,GAAG,GAAG;IAC3F,MAAM,OAAO,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,SAAS,CAAC;SACf,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtD,MAAM,WAAW,GAAG,MAAM,EAAE;SACzB,MAAM,EAAE;SACR,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IAEhD,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;YAAE,SAAQ;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1D,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,SAAQ;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACrC,IAAI,CAAC,GAAG;YAAE,SAAQ;QAClB,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC1F,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,GAAG,CAAC,IAAI;YACtB,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC,CAAC,iBAAiB;gBAC9B,QAAQ,EAAE,CAAC,CAAC,gBAAgB;gBAC5B,OAAO,EAAE,CAAC,CAAC,eAAe;gBAC1B,MAAM,EAAE,CAAC,CAAC,cAAc;aACzB;SACF,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;YAAE,MAAK;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAA;QAC/B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,SAAQ;QAC7C,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,KAAK;YACX,aAAa,EAAE,CAAC,CAAC,IAAI;YACrB,YAAY,EAAE,CAAC,CAAC,IAAI;YACpB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SAC5D,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;YAAE,MAAK;IAChC,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { WorkspaceRef } from "../indexer/indexer.js";
|
|
2
|
+
export interface ReferenceHit {
|
|
3
|
+
documentPath: string;
|
|
4
|
+
range: {
|
|
5
|
+
startLine: number;
|
|
6
|
+
startCol: number;
|
|
7
|
+
endLine: number;
|
|
8
|
+
endCol: number;
|
|
9
|
+
};
|
|
10
|
+
text: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function findReferencesToDocument(workspace: WorkspaceRef, toDocId: string): Promise<ReferenceHit[]>;
|
|
13
|
+
export interface ResolvedLinkTarget {
|
|
14
|
+
documentPath: string;
|
|
15
|
+
anchor: string | null;
|
|
16
|
+
}
|
|
17
|
+
export declare function resolveLinkByTarget(workspace: WorkspaceRef, toPath: string): Promise<ResolvedLinkTarget | null>;
|
|
18
|
+
export interface UnresolvedLink {
|
|
19
|
+
fromDocumentPath: string;
|
|
20
|
+
toPath: string;
|
|
21
|
+
range: {
|
|
22
|
+
startLine: number;
|
|
23
|
+
startCol: number;
|
|
24
|
+
endLine: number;
|
|
25
|
+
endCol: number;
|
|
26
|
+
} | null;
|
|
27
|
+
kind: "inline" | "reference" | "wiki" | "autolink";
|
|
28
|
+
}
|
|
29
|
+
export declare function findUnresolvedLinks(workspace: WorkspaceRef, forDocPath?: string): Promise<UnresolvedLink[]>;
|
|
30
|
+
export declare function getDocumentByPath(workspace: WorkspaceRef, relPath: string): Promise<{
|
|
31
|
+
id: string;
|
|
32
|
+
workspaceId: string;
|
|
33
|
+
path: string;
|
|
34
|
+
contentHash: string;
|
|
35
|
+
title: string | null;
|
|
36
|
+
lastIndexedAt: Date;
|
|
37
|
+
} | null>;
|
|
38
|
+
//# sourceMappingURL=findReferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findReferences.d.ts","sourceRoot":"","sources":["../../src/core/findReferences.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,EAAE,CAAC,CAYzB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CASpC;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACtF,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;CACnD;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,YAAY,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CAwB3B;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;;;;;;;UAO/E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { eq, and, isNull } from "drizzle-orm";
|
|
2
|
+
import { db } from "../db/client.js";
|
|
3
|
+
import { documents, links } from "../db/schema.js";
|
|
4
|
+
export async function findReferencesToDocument(workspace, toDocId) {
|
|
5
|
+
const rows = await db
|
|
6
|
+
.select({ link: links, doc: documents })
|
|
7
|
+
.from(links)
|
|
8
|
+
.innerJoin(documents, eq(documents.id, links.fromDocumentId))
|
|
9
|
+
.where(and(eq(links.workspaceId, workspace.id), eq(links.toDocumentId, toDocId)));
|
|
10
|
+
return rows.map((r) => ({
|
|
11
|
+
documentPath: r.doc.path,
|
|
12
|
+
range: { startLine: 0, startCol: 0, endLine: 0, endCol: 0 },
|
|
13
|
+
text: r.link.textAtLink,
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
export async function resolveLinkByTarget(workspace, toPath) {
|
|
17
|
+
const rows = await db
|
|
18
|
+
.select({ link: links, doc: documents })
|
|
19
|
+
.from(links)
|
|
20
|
+
.leftJoin(documents, eq(documents.id, links.toDocumentId))
|
|
21
|
+
.where(and(eq(links.workspaceId, workspace.id), eq(links.toPath, toPath)))
|
|
22
|
+
.limit(1);
|
|
23
|
+
if (rows.length === 0 || !rows[0].doc)
|
|
24
|
+
return null;
|
|
25
|
+
return { documentPath: rows[0].doc.path, anchor: rows[0].link.toAnchor };
|
|
26
|
+
}
|
|
27
|
+
export async function findUnresolvedLinks(workspace, forDocPath) {
|
|
28
|
+
const whereClauses = [eq(links.workspaceId, workspace.id), isNull(links.toDocumentId)];
|
|
29
|
+
if (forDocPath) {
|
|
30
|
+
const docRow = await db
|
|
31
|
+
.select({ id: documents.id })
|
|
32
|
+
.from(documents)
|
|
33
|
+
.where(and(eq(documents.workspaceId, workspace.id), eq(documents.path, forDocPath)))
|
|
34
|
+
.limit(1);
|
|
35
|
+
if (docRow.length === 0)
|
|
36
|
+
return [];
|
|
37
|
+
whereClauses.push(eq(links.fromDocumentId, docRow[0].id));
|
|
38
|
+
}
|
|
39
|
+
const rows = await db
|
|
40
|
+
.select({ link: links, doc: documents })
|
|
41
|
+
.from(links)
|
|
42
|
+
.innerJoin(documents, eq(documents.id, links.fromDocumentId))
|
|
43
|
+
.where(and(...whereClauses));
|
|
44
|
+
return rows.map((r) => ({
|
|
45
|
+
fromDocumentPath: r.doc.path,
|
|
46
|
+
toPath: r.link.toPath,
|
|
47
|
+
range: null,
|
|
48
|
+
kind: r.link.kind,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
export async function getDocumentByPath(workspace, relPath) {
|
|
52
|
+
const rows = await db
|
|
53
|
+
.select()
|
|
54
|
+
.from(documents)
|
|
55
|
+
.where(and(eq(documents.workspaceId, workspace.id), eq(documents.path, relPath)))
|
|
56
|
+
.limit(1);
|
|
57
|
+
return rows[0] ?? null;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=findReferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findReferences.js","sourceRoot":"","sources":["../../src/core/findReferences.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAAA;AAgBzD,eAAO,MAAM,EAAE,EAAE,QAKH,CAAA;AAEd,OAAO,EAAE,MAAM,EAAE,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import postgres from "postgres";
|
|
2
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
3
|
+
import * as schema from "./schema.js";
|
|
4
|
+
let _db = null;
|
|
5
|
+
let _queryClient = null;
|
|
6
|
+
function init() {
|
|
7
|
+
const connectionString = process.env.DATABASE_URL;
|
|
8
|
+
if (!connectionString) {
|
|
9
|
+
throw new Error("DATABASE_URL is not set. Configure markdownLsp.databaseUrl in VS Code settings, or set DATABASE_URL in the environment.");
|
|
10
|
+
}
|
|
11
|
+
_queryClient = postgres(connectionString, { max: 5 });
|
|
12
|
+
return drizzle(_queryClient, { schema });
|
|
13
|
+
}
|
|
14
|
+
export const db = new Proxy({}, {
|
|
15
|
+
get(_target, prop) {
|
|
16
|
+
if (!_db)
|
|
17
|
+
_db = init();
|
|
18
|
+
return _db[prop];
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
export { schema };
|
|
22
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAIrC,IAAI,GAAG,GAAoB,IAAI,CAAA;AAC/B,IAAI,YAAY,GAAuC,IAAI,CAAA;AAE3D,SAAS,IAAI;IACX,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IACjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,yHAAyH,CAC1H,CAAA;IACH,CAAC;IACD,YAAY,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACrD,OAAO,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,EAAE,GAAa,IAAI,KAAK,CAAC,EAAc,EAAE;IACpD,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,IAAI,CAAC,GAAG;YAAE,GAAG,GAAG,IAAI,EAAE,CAAA;QACtB,OAAQ,GAAW,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;CACF,CAAa,CAAA;AAEd,OAAO,EAAE,MAAM,EAAE,CAAA"}
|