@novis10813/secondbrain-cli 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 +22 -0
- package/README.md +133 -0
- package/dist/commands/backlinks.d.ts +3 -0
- package/dist/commands/backlinks.d.ts.map +1 -0
- package/dist/commands/backlinks.js +65 -0
- package/dist/commands/backlinks.js.map +1 -0
- package/dist/commands/capture.d.ts +3 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +90 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +84 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/get.d.ts +3 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +44 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +35 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/orphans.d.ts +3 -0
- package/dist/commands/orphans.d.ts.map +1 -0
- package/dist/commands/orphans.js +57 -0
- package/dist/commands/orphans.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +64 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +44 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +41 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +69 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +15 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +77 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/database.d.ts +28 -0
- package/dist/utils/database.d.ts.map +1 -0
- package/dist/utils/database.js +261 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/parser.d.ts +19 -0
- package/dist/utils/parser.d.ts.map +1 -0
- package/dist/utils/parser.js +159 -0
- package/dist/utils/parser.js.map +1 -0
- package/dist/utils/template.d.ts +17 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +100 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/vault.d.ts +32 -0
- package/dist/utils/vault.d.ts.map +1 -0
- package/dist/utils/vault.js +194 -0
- package/dist/utils/vault.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseManager = void 0;
|
|
4
|
+
const bun_sqlite_1 = require("bun:sqlite");
|
|
5
|
+
class DatabaseManager {
|
|
6
|
+
db;
|
|
7
|
+
config;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.db = new bun_sqlite_1.Database(config.dbPath);
|
|
11
|
+
this.initTables();
|
|
12
|
+
}
|
|
13
|
+
initTables() {
|
|
14
|
+
// Notes table
|
|
15
|
+
this.db.exec(`
|
|
16
|
+
CREATE TABLE IF NOT EXISTS notes (
|
|
17
|
+
id TEXT PRIMARY KEY,
|
|
18
|
+
path TEXT UNIQUE NOT NULL,
|
|
19
|
+
title TEXT NOT NULL,
|
|
20
|
+
content TEXT NOT NULL,
|
|
21
|
+
frontmatter TEXT NOT NULL,
|
|
22
|
+
tags TEXT NOT NULL,
|
|
23
|
+
hash TEXT NOT NULL,
|
|
24
|
+
created_at TEXT NOT NULL,
|
|
25
|
+
modified_at TEXT NOT NULL
|
|
26
|
+
)
|
|
27
|
+
`);
|
|
28
|
+
// Links table (many-to-many)
|
|
29
|
+
this.db.exec(`
|
|
30
|
+
CREATE TABLE IF NOT EXISTS links (
|
|
31
|
+
source_id TEXT NOT NULL,
|
|
32
|
+
target_id TEXT NOT NULL,
|
|
33
|
+
PRIMARY KEY (source_id, target_id),
|
|
34
|
+
FOREIGN KEY (source_id) REFERENCES notes(id) ON DELETE CASCADE,
|
|
35
|
+
FOREIGN KEY (target_id) REFERENCES notes(id) ON DELETE CASCADE
|
|
36
|
+
)
|
|
37
|
+
`);
|
|
38
|
+
// Create indexes for performance
|
|
39
|
+
this.db.exec(`
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_notes_path ON notes(path);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_notes_hash ON notes(hash);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_links_source ON links(source_id);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_links_target ON links(target_id);
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
close() {
|
|
47
|
+
this.db.close();
|
|
48
|
+
}
|
|
49
|
+
// Note operations
|
|
50
|
+
upsertNote(note) {
|
|
51
|
+
const stmt = this.db.prepare(`
|
|
52
|
+
INSERT INTO notes (id, path, title, content, frontmatter, tags, hash, created_at, modified_at)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
54
|
+
ON CONFLICT(path) DO UPDATE SET
|
|
55
|
+
id = excluded.id,
|
|
56
|
+
title = excluded.title,
|
|
57
|
+
content = excluded.content,
|
|
58
|
+
frontmatter = excluded.frontmatter,
|
|
59
|
+
tags = excluded.tags,
|
|
60
|
+
hash = excluded.hash,
|
|
61
|
+
modified_at = excluded.modified_at
|
|
62
|
+
`);
|
|
63
|
+
stmt.run(note.id, note.path, note.title, note.content, JSON.stringify(note.frontmatter), JSON.stringify(note.tags), note.hash, note.createdAt, note.modifiedAt);
|
|
64
|
+
// Update links
|
|
65
|
+
this.updateLinks(note.id, note.links);
|
|
66
|
+
}
|
|
67
|
+
updateLinks(noteId, targetIds) {
|
|
68
|
+
// Get existing links
|
|
69
|
+
const existingLinks = this.db.prepare('SELECT target_id FROM links WHERE source_id = ?')
|
|
70
|
+
.all(noteId)
|
|
71
|
+
.map((row) => row.target_id);
|
|
72
|
+
// Calculate diff
|
|
73
|
+
const existingSet = new Set(existingLinks);
|
|
74
|
+
const newSet = new Set(targetIds);
|
|
75
|
+
// Links to add (in newSet but not in existingSet)
|
|
76
|
+
const toAdd = targetIds.filter(id => !existingSet.has(id));
|
|
77
|
+
// Links to remove (in existingSet but not in newSet)
|
|
78
|
+
const toRemove = existingLinks.filter(id => !newSet.has(id));
|
|
79
|
+
// Skip if no changes
|
|
80
|
+
if (toAdd.length === 0 && toRemove.length === 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Remove links that no longer exist
|
|
84
|
+
if (toRemove.length > 0) {
|
|
85
|
+
const placeholders = toRemove.map(() => '?').join(',');
|
|
86
|
+
this.db.prepare(`DELETE FROM links WHERE source_id = ? AND target_id IN (${placeholders})`)
|
|
87
|
+
.run(noteId, ...toRemove);
|
|
88
|
+
}
|
|
89
|
+
// Add new links (only if target exists)
|
|
90
|
+
if (toAdd.length > 0) {
|
|
91
|
+
const insertStmt = this.db.prepare('INSERT OR IGNORE INTO links (source_id, target_id) VALUES (?, ?)');
|
|
92
|
+
const targetExistsStmt = this.db.prepare('SELECT 1 FROM notes WHERE id = ?');
|
|
93
|
+
for (const targetId of toAdd) {
|
|
94
|
+
// Only insert if target exists
|
|
95
|
+
const targetExists = targetExistsStmt.get(targetId);
|
|
96
|
+
if (targetExists) {
|
|
97
|
+
insertStmt.run(noteId, targetId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getNoteById(id) {
|
|
103
|
+
const row = this.db.prepare('SELECT * FROM notes WHERE id = ?').get(id);
|
|
104
|
+
if (!row)
|
|
105
|
+
return null;
|
|
106
|
+
return this.rowToNote(row);
|
|
107
|
+
}
|
|
108
|
+
getNoteByPath(path) {
|
|
109
|
+
const row = this.db.prepare('SELECT * FROM notes WHERE path = ?').get(path);
|
|
110
|
+
if (!row)
|
|
111
|
+
return null;
|
|
112
|
+
return this.rowToNote(row);
|
|
113
|
+
}
|
|
114
|
+
getNoteByTitle(title) {
|
|
115
|
+
const row = this.db.prepare('SELECT * FROM notes WHERE title = ? COLLATE NOCASE').get(title);
|
|
116
|
+
if (!row)
|
|
117
|
+
return null;
|
|
118
|
+
return this.rowToNote(row);
|
|
119
|
+
}
|
|
120
|
+
searchNotes(query, tags, limit = 20) {
|
|
121
|
+
let sql = 'SELECT * FROM notes WHERE (title LIKE ? OR content LIKE ?)';
|
|
122
|
+
const params = [`%${query}%`, `%${query}%`];
|
|
123
|
+
if (tags && tags.length > 0) {
|
|
124
|
+
sql += ' AND (' + tags.map(() => 'tags LIKE ?').join(' OR ') + ')';
|
|
125
|
+
params.push(...tags.map(tag => `%"${tag}"%`));
|
|
126
|
+
}
|
|
127
|
+
sql += ' ORDER BY modified_at DESC LIMIT ?';
|
|
128
|
+
params.push(limit);
|
|
129
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
130
|
+
return this.rowsToNotes(rows);
|
|
131
|
+
}
|
|
132
|
+
getBacklinks(noteId) {
|
|
133
|
+
const sql = `
|
|
134
|
+
SELECT n.* FROM notes n
|
|
135
|
+
JOIN links l ON n.id = l.source_id
|
|
136
|
+
WHERE l.target_id = ?
|
|
137
|
+
`;
|
|
138
|
+
const rows = this.db.prepare(sql).all(noteId);
|
|
139
|
+
return this.rowsToNotes(rows);
|
|
140
|
+
}
|
|
141
|
+
getOrphans() {
|
|
142
|
+
const sql = `
|
|
143
|
+
SELECT n.* FROM notes n
|
|
144
|
+
LEFT JOIN links l1 ON n.id = l1.source_id
|
|
145
|
+
LEFT JOIN links l2 ON n.id = l2.target_id
|
|
146
|
+
WHERE l1.source_id IS NULL AND l2.target_id IS NULL
|
|
147
|
+
`;
|
|
148
|
+
const rows = this.db.prepare(sql).all();
|
|
149
|
+
return this.rowsToNotes(rows);
|
|
150
|
+
}
|
|
151
|
+
getAllNotes() {
|
|
152
|
+
const rows = this.db.prepare('SELECT * FROM notes').all();
|
|
153
|
+
return this.rowsToNotes(rows);
|
|
154
|
+
}
|
|
155
|
+
deleteNoteByPath(path) {
|
|
156
|
+
this.db.prepare('DELETE FROM notes WHERE path = ?').run(path);
|
|
157
|
+
}
|
|
158
|
+
getStats() {
|
|
159
|
+
const totalNotes = this.db.prepare('SELECT COUNT(*) as count FROM notes').get().count;
|
|
160
|
+
const totalLinks = this.db.prepare('SELECT COUNT(*) as count FROM links').get().count;
|
|
161
|
+
const orphans = this.db.prepare('SELECT COUNT(*) as count FROM notes n LEFT JOIN links l1 ON n.id = l1.source_id LEFT JOIN links l2 ON n.id = l2.target_id WHERE l1.source_id IS NULL AND l2.target_id IS NULL').get().count;
|
|
162
|
+
return { totalNotes, totalLinks, orphans };
|
|
163
|
+
}
|
|
164
|
+
getGraphData() {
|
|
165
|
+
const nodes = this.db.prepare('SELECT id, title, path, tags FROM notes').all();
|
|
166
|
+
const edges = this.db.prepare('SELECT source_id, target_id FROM links').all();
|
|
167
|
+
return {
|
|
168
|
+
nodes: nodes.map((n) => ({
|
|
169
|
+
id: n.id,
|
|
170
|
+
title: n.title,
|
|
171
|
+
path: n.path,
|
|
172
|
+
tags: JSON.parse(n.tags)
|
|
173
|
+
})),
|
|
174
|
+
edges: edges.map((e) => ({
|
|
175
|
+
source: e.source_id,
|
|
176
|
+
target: e.target_id
|
|
177
|
+
}))
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
rowToNote(row) {
|
|
181
|
+
const links = this.db.prepare('SELECT target_id FROM links WHERE source_id = ?').all(row.id);
|
|
182
|
+
const backlinks = this.db.prepare('SELECT source_id FROM links WHERE target_id = ?').all(row.id);
|
|
183
|
+
return {
|
|
184
|
+
id: row.id,
|
|
185
|
+
path: row.path,
|
|
186
|
+
title: row.title,
|
|
187
|
+
content: row.content,
|
|
188
|
+
frontmatter: JSON.parse(row.frontmatter),
|
|
189
|
+
tags: JSON.parse(row.tags),
|
|
190
|
+
links: links.map((l) => l.target_id),
|
|
191
|
+
backlinks: backlinks.map((l) => l.source_id),
|
|
192
|
+
hash: row.hash,
|
|
193
|
+
createdAt: row.created_at,
|
|
194
|
+
modifiedAt: row.modified_at
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
getNotesWithLinksBatch(noteIds) {
|
|
198
|
+
if (noteIds.length === 0)
|
|
199
|
+
return new Map();
|
|
200
|
+
const placeholders = noteIds.map(() => '?').join(',');
|
|
201
|
+
// Single query to get all links for all notes
|
|
202
|
+
const linksSql = `
|
|
203
|
+
SELECT source_id, json_group_array(target_id) as targets
|
|
204
|
+
FROM links
|
|
205
|
+
WHERE source_id IN (${placeholders})
|
|
206
|
+
GROUP BY source_id
|
|
207
|
+
`;
|
|
208
|
+
const backlinksSql = `
|
|
209
|
+
SELECT target_id, json_group_array(source_id) as sources
|
|
210
|
+
FROM links
|
|
211
|
+
WHERE target_id IN (${placeholders})
|
|
212
|
+
GROUP BY target_id
|
|
213
|
+
`;
|
|
214
|
+
const result = new Map();
|
|
215
|
+
// Initialize with empty arrays
|
|
216
|
+
for (const id of noteIds) {
|
|
217
|
+
result.set(id, { links: [], backlinks: [] });
|
|
218
|
+
}
|
|
219
|
+
// Populate links
|
|
220
|
+
const linksRows = this.db.prepare(linksSql).all(...noteIds);
|
|
221
|
+
for (const row of linksRows) {
|
|
222
|
+
const targets = JSON.parse(row.targets);
|
|
223
|
+
result.get(row.source_id).links = targets;
|
|
224
|
+
}
|
|
225
|
+
// Populate backlinks
|
|
226
|
+
const backlinksRows = this.db.prepare(backlinksSql).all(...noteIds);
|
|
227
|
+
for (const row of backlinksRows) {
|
|
228
|
+
const sources = JSON.parse(row.sources);
|
|
229
|
+
result.get(row.target_id).backlinks = sources;
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
rowsToNotes(rows) {
|
|
234
|
+
if (rows.length === 0)
|
|
235
|
+
return [];
|
|
236
|
+
// Extract all note IDs
|
|
237
|
+
const noteIds = rows.map(row => row.id);
|
|
238
|
+
// Batch load all links and backlinks in 2 queries
|
|
239
|
+
const linkData = this.getNotesWithLinksBatch(noteIds);
|
|
240
|
+
// Map rows to notes using batched link data
|
|
241
|
+
return rows.map(row => {
|
|
242
|
+
const links = linkData.get(row.id)?.links || [];
|
|
243
|
+
const backlinks = linkData.get(row.id)?.backlinks || [];
|
|
244
|
+
return {
|
|
245
|
+
id: row.id,
|
|
246
|
+
path: row.path,
|
|
247
|
+
title: row.title,
|
|
248
|
+
content: row.content,
|
|
249
|
+
frontmatter: JSON.parse(row.frontmatter),
|
|
250
|
+
tags: JSON.parse(row.tags),
|
|
251
|
+
links,
|
|
252
|
+
backlinks,
|
|
253
|
+
hash: row.hash,
|
|
254
|
+
createdAt: row.created_at,
|
|
255
|
+
modifiedAt: row.modified_at,
|
|
256
|
+
};
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.DatabaseManager = DatabaseManager;
|
|
261
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ParsedNote {
|
|
2
|
+
title: string;
|
|
3
|
+
content: string;
|
|
4
|
+
frontmatter: Record<string, unknown>;
|
|
5
|
+
tags: string[];
|
|
6
|
+
links: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class NoteParser {
|
|
9
|
+
static parse(content: string): ParsedNote;
|
|
10
|
+
static computeHash(content: string): string;
|
|
11
|
+
private static extractFrontmatter;
|
|
12
|
+
private static extractTitle;
|
|
13
|
+
private static extractTags;
|
|
14
|
+
private static extractLinks;
|
|
15
|
+
private static extractLinksFromObject;
|
|
16
|
+
static generateNoteContent(title: string, content: string, frontmatter?: Record<string, unknown>): string;
|
|
17
|
+
static generateDailyNoteContent(date: Date, content: string): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAezC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,WAAW;IAiC1B,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAcrC,MAAM,CAAC,mBAAmB,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACxC,MAAM;IAKT,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;CAYrE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.NoteParser = void 0;
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const yaml = __importStar(require("yaml"));
|
|
39
|
+
class NoteParser {
|
|
40
|
+
static parse(content) {
|
|
41
|
+
const { frontmatter, body } = this.extractFrontmatter(content);
|
|
42
|
+
const title = this.extractTitle(body);
|
|
43
|
+
const tags = this.extractTags(frontmatter, body);
|
|
44
|
+
const links = this.extractLinks(frontmatter, body);
|
|
45
|
+
return {
|
|
46
|
+
title,
|
|
47
|
+
content: body,
|
|
48
|
+
frontmatter,
|
|
49
|
+
tags,
|
|
50
|
+
links
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
static computeHash(content) {
|
|
54
|
+
return (0, crypto_1.createHash)('sha256').update(content).digest('hex');
|
|
55
|
+
}
|
|
56
|
+
static extractFrontmatter(content) {
|
|
57
|
+
const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n?/;
|
|
58
|
+
const match = content.match(frontmatterRegex);
|
|
59
|
+
if (match) {
|
|
60
|
+
try {
|
|
61
|
+
const frontmatter = yaml.parse(match[1]) || {};
|
|
62
|
+
const body = content.slice(match[0].length);
|
|
63
|
+
return { frontmatter, body };
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Invalid YAML, treat as no frontmatter
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { frontmatter: {}, body: content };
|
|
70
|
+
}
|
|
71
|
+
static extractTitle(content) {
|
|
72
|
+
// Look for first H1 heading
|
|
73
|
+
const h1Match = content.match(/^# (.+)$/m);
|
|
74
|
+
if (h1Match) {
|
|
75
|
+
return h1Match[1].trim();
|
|
76
|
+
}
|
|
77
|
+
// Look for first line that's not empty
|
|
78
|
+
const firstLine = content.split('\n').find(line => line.trim());
|
|
79
|
+
if (firstLine) {
|
|
80
|
+
return firstLine.trim().slice(0, 100);
|
|
81
|
+
}
|
|
82
|
+
return 'Untitled';
|
|
83
|
+
}
|
|
84
|
+
static extractTags(frontmatter, content) {
|
|
85
|
+
const tags = new Set();
|
|
86
|
+
// From frontmatter
|
|
87
|
+
if (frontmatter.tags) {
|
|
88
|
+
if (Array.isArray(frontmatter.tags)) {
|
|
89
|
+
frontmatter.tags.forEach(tag => tags.add(String(tag)));
|
|
90
|
+
}
|
|
91
|
+
else if (typeof frontmatter.tags === 'string') {
|
|
92
|
+
frontmatter.tags.split(/[,\s]+/).forEach(tag => {
|
|
93
|
+
if (tag)
|
|
94
|
+
tags.add(tag.replace(/^#/, ''));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// From content body (Obsidian-style #tags)
|
|
99
|
+
// Strip code blocks to avoid extracting tags from code
|
|
100
|
+
const contentWithoutCode = content
|
|
101
|
+
.replace(/```[\s\S]*?```/g, '') // Remove fenced code blocks
|
|
102
|
+
.replace(/`[^`]*`/g, ''); // Remove inline code
|
|
103
|
+
const tagRegex = /#([\w/-]+)/g;
|
|
104
|
+
let match;
|
|
105
|
+
while ((match = tagRegex.exec(contentWithoutCode)) !== null) {
|
|
106
|
+
// Exclude headings
|
|
107
|
+
if (!contentWithoutCode.substring(match.index - 1, match.index).match(/\n|^/)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
tags.add(match[1]);
|
|
111
|
+
}
|
|
112
|
+
return Array.from(tags);
|
|
113
|
+
}
|
|
114
|
+
static extractLinks(frontmatter, content) {
|
|
115
|
+
const links = new Set();
|
|
116
|
+
// Extract from frontmatter values
|
|
117
|
+
this.extractLinksFromObject(frontmatter, links);
|
|
118
|
+
// Extract from content body (Obsidian wikilinks)
|
|
119
|
+
const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
120
|
+
let match;
|
|
121
|
+
while ((match = linkRegex.exec(content)) !== null) {
|
|
122
|
+
links.add(match[1].trim());
|
|
123
|
+
}
|
|
124
|
+
return Array.from(links);
|
|
125
|
+
}
|
|
126
|
+
static extractLinksFromObject(obj, links) {
|
|
127
|
+
if (typeof obj === 'string') {
|
|
128
|
+
const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
129
|
+
let match;
|
|
130
|
+
while ((match = linkRegex.exec(obj)) !== null) {
|
|
131
|
+
links.add(match[1].trim());
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (Array.isArray(obj)) {
|
|
135
|
+
obj.forEach(item => this.extractLinksFromObject(item, links));
|
|
136
|
+
}
|
|
137
|
+
else if (obj && typeof obj === 'object') {
|
|
138
|
+
Object.values(obj).forEach(value => this.extractLinksFromObject(value, links));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
static generateNoteContent(title, content, frontmatter = {}) {
|
|
142
|
+
const fm = yaml.stringify(frontmatter).trim();
|
|
143
|
+
return `---\n${fm}\n---\n\n# ${title}\n\n${content}`;
|
|
144
|
+
}
|
|
145
|
+
static generateDailyNoteContent(date, content) {
|
|
146
|
+
const year = date.getFullYear();
|
|
147
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
148
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
149
|
+
const dateStr = `${year}-${month}-${day}`;
|
|
150
|
+
const frontmatter = {
|
|
151
|
+
date: dateStr,
|
|
152
|
+
tags: ['daily'],
|
|
153
|
+
type: 'daily-note'
|
|
154
|
+
};
|
|
155
|
+
return this.generateNoteContent(dateStr, content, frontmatter);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.NoteParser = NoteParser;
|
|
159
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Config } from '../types/index.js';
|
|
2
|
+
export declare class TemplateManager {
|
|
3
|
+
private config;
|
|
4
|
+
constructor(config: Config);
|
|
5
|
+
private getTemplatePath;
|
|
6
|
+
private ensureTemplatesDir;
|
|
7
|
+
createTemplate(name: string, content: string): void;
|
|
8
|
+
getTemplate(name: string): string | null;
|
|
9
|
+
listTemplates(): string[];
|
|
10
|
+
deleteTemplate(name: string): void;
|
|
11
|
+
renderTemplate(name: string, variables: Record<string, string>): string;
|
|
12
|
+
validateTemplate(name: string): string[];
|
|
13
|
+
insertTemplate(name: string, targetPath: string, variables: Record<string, string>): void;
|
|
14
|
+
getRequiredFields(name: string): string[];
|
|
15
|
+
validateRequiredFields(name: string, provided: Record<string, string>): string[];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;IAO1B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQxC,aAAa,IAAI,MAAM,EAAE;IAYzB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAgBvE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAiBxC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAazF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIzC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;CAYjF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemplateManager = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
class TemplateManager {
|
|
7
|
+
config;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
getTemplatePath(name) {
|
|
12
|
+
return (0, path_1.join)(this.config.vaultPath, this.config.templatesFolder, `${name}.md`);
|
|
13
|
+
}
|
|
14
|
+
ensureTemplatesDir() {
|
|
15
|
+
const templatesDir = (0, path_1.join)(this.config.vaultPath, this.config.templatesFolder);
|
|
16
|
+
if (!(0, fs_1.existsSync)(templatesDir)) {
|
|
17
|
+
(0, fs_1.mkdirSync)(templatesDir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
createTemplate(name, content) {
|
|
21
|
+
this.ensureTemplatesDir();
|
|
22
|
+
const templatePath = this.getTemplatePath(name);
|
|
23
|
+
(0, fs_1.writeFileSync)(templatePath, content, 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
getTemplate(name) {
|
|
26
|
+
const templatePath = this.getTemplatePath(name);
|
|
27
|
+
if (!(0, fs_1.existsSync)(templatePath)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return (0, fs_1.readFileSync)(templatePath, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
listTemplates() {
|
|
33
|
+
const templatesDir = (0, path_1.join)(this.config.vaultPath, this.config.templatesFolder);
|
|
34
|
+
if (!(0, fs_1.existsSync)(templatesDir)) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
const entries = (0, fs_1.readdirSync)(templatesDir, { withFileTypes: true });
|
|
38
|
+
return entries
|
|
39
|
+
.filter(entry => entry.isFile() && entry.name.endsWith('.md'))
|
|
40
|
+
.map(entry => entry.name.replace('.md', ''));
|
|
41
|
+
}
|
|
42
|
+
deleteTemplate(name) {
|
|
43
|
+
const templatePath = this.getTemplatePath(name);
|
|
44
|
+
if (!(0, fs_1.existsSync)(templatePath)) {
|
|
45
|
+
throw new Error(`Template '${name}' not found`);
|
|
46
|
+
}
|
|
47
|
+
(0, fs_1.unlinkSync)(templatePath);
|
|
48
|
+
}
|
|
49
|
+
renderTemplate(name, variables) {
|
|
50
|
+
const template = this.getTemplate(name);
|
|
51
|
+
if (!template) {
|
|
52
|
+
throw new Error(`Template '${name}' not found`);
|
|
53
|
+
}
|
|
54
|
+
// Replace all {{variable}} with values
|
|
55
|
+
let result = template;
|
|
56
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
57
|
+
const regex = new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, 'g');
|
|
58
|
+
result = result.replace(regex, value);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
validateTemplate(name) {
|
|
63
|
+
const template = this.getTemplate(name);
|
|
64
|
+
if (!template) {
|
|
65
|
+
throw new Error(`Template '${name}' not found`);
|
|
66
|
+
}
|
|
67
|
+
const variables = new Set();
|
|
68
|
+
const regex = /\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g;
|
|
69
|
+
let match;
|
|
70
|
+
while ((match = regex.exec(template)) !== null) {
|
|
71
|
+
variables.add(match[1]);
|
|
72
|
+
}
|
|
73
|
+
return Array.from(variables);
|
|
74
|
+
}
|
|
75
|
+
insertTemplate(name, targetPath, variables) {
|
|
76
|
+
const rendered = this.renderTemplate(name, variables);
|
|
77
|
+
const fullPath = (0, path_1.join)(this.config.vaultPath, targetPath);
|
|
78
|
+
// Ensure parent directory exists
|
|
79
|
+
const dir = (0, path_1.dirname)(fullPath);
|
|
80
|
+
if (!(0, fs_1.existsSync)(dir)) {
|
|
81
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
(0, fs_1.writeFileSync)(fullPath, rendered, 'utf-8');
|
|
84
|
+
}
|
|
85
|
+
getRequiredFields(name) {
|
|
86
|
+
return this.validateTemplate(name);
|
|
87
|
+
}
|
|
88
|
+
validateRequiredFields(name, provided) {
|
|
89
|
+
const required = this.getRequiredFields(name);
|
|
90
|
+
const missing = [];
|
|
91
|
+
for (const field of required) {
|
|
92
|
+
if (!(field in provided) || provided[field] === undefined || provided[field] === '') {
|
|
93
|
+
missing.push(field);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return missing;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.TemplateManager = TemplateManager;
|
|
100
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Note, Config } from '../types/index.js';
|
|
2
|
+
export declare class VaultManager {
|
|
3
|
+
private config;
|
|
4
|
+
private db;
|
|
5
|
+
constructor(config: Config);
|
|
6
|
+
close(): void;
|
|
7
|
+
sync(): Promise<{
|
|
8
|
+
added: number;
|
|
9
|
+
updated: number;
|
|
10
|
+
removed: number;
|
|
11
|
+
}>;
|
|
12
|
+
private findMarkdownFiles;
|
|
13
|
+
createNoteFromFile(path: string, content: string, hash: string, links?: string[]): Promise<Note>;
|
|
14
|
+
private findNoteByTitleOrPath;
|
|
15
|
+
writeNote(path: string, content: string): void;
|
|
16
|
+
readNote(path: string): string | null;
|
|
17
|
+
getDailyNotePath(date?: Date): string;
|
|
18
|
+
getTemplatePath(templateName: string): string;
|
|
19
|
+
getNoteById(id: string): Note | null;
|
|
20
|
+
getNoteByPath(path: string): Note | null;
|
|
21
|
+
searchNotes(query: string, tags?: string[], limit?: number): Note[];
|
|
22
|
+
getBacklinks(noteId: string): Note[];
|
|
23
|
+
getOrphans(): Note[];
|
|
24
|
+
getStats(): {
|
|
25
|
+
totalNotes: number;
|
|
26
|
+
totalLinks: number;
|
|
27
|
+
orphans: number;
|
|
28
|
+
};
|
|
29
|
+
getGraphData(): import("../types/index.js").GraphData;
|
|
30
|
+
upsertNote(note: Note): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/utils/vault.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAItD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,MAAM,EAAE,MAAM;IAK1B,KAAK,IAAI,IAAI;IAKP,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoE1E,OAAO,CAAC,iBAAiB;IAsBnB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1G,OAAO,CAAC,qBAAqB;IA0B7B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAY9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASrC,gBAAgB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM;IASjD,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAK7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,IAAI,EAAE;IAIvE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAIpC,UAAU,IAAI,IAAI,EAAE;IAIpB,QAAQ;;;;;IAIR,YAAY;IAKZ,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAG7B"}
|