@novis10813/secondbrain-cli 0.1.0 → 0.1.2
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 +71 -81
- package/dist/commands/backlinks.d.ts.map +1 -1
- package/dist/commands/backlinks.js +16 -33
- package/dist/commands/backlinks.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +71 -57
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -20
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/get.js +27 -26
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +22 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +28 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/orphans.d.ts.map +1 -1
- package/dist/commands/orphans.js +9 -27
- package/dist/commands/orphans.js.map +1 -1
- package/dist/commands/outlinks.d.ts +3 -0
- package/dist/commands/outlinks.d.ts.map +1 -0
- package/dist/commands/outlinks.js +48 -0
- package/dist/commands/outlinks.js.map +1 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +57 -39
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +4 -18
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +3 -17
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +63 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/vault.d.ts +3 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +233 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +134 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +3 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/database.d.ts +58 -14
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +627 -207
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/global-config.d.ts +53 -0
- package/dist/utils/global-config.d.ts.map +1 -0
- package/dist/utils/global-config.js +144 -0
- package/dist/utils/global-config.js.map +1 -0
- package/dist/utils/parser.d.ts +95 -2
- package/dist/utils/parser.d.ts.map +1 -1
- package/dist/utils/parser.js +466 -39
- package/dist/utils/parser.js.map +1 -1
- package/dist/utils/placeholder.d.ts +37 -0
- package/dist/utils/placeholder.d.ts.map +1 -0
- package/dist/utils/placeholder.js +113 -0
- package/dist/utils/placeholder.js.map +1 -0
- package/dist/utils/position.d.ts +10 -0
- package/dist/utils/position.d.ts.map +1 -0
- package/dist/utils/position.js +24 -0
- package/dist/utils/position.js.map +1 -0
- package/dist/utils/sqlite-adapter.d.ts +8 -0
- package/dist/utils/sqlite-adapter.d.ts.map +1 -0
- package/dist/utils/sqlite-adapter.js +14 -0
- package/dist/utils/sqlite-adapter.js.map +1 -0
- package/dist/utils/template.d.ts +2 -2
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +8 -3
- package/dist/utils/template.js.map +1 -1
- package/dist/utils/vault-resolve.d.ts +23 -0
- package/dist/utils/vault-resolve.d.ts.map +1 -0
- package/dist/utils/vault-resolve.js +86 -0
- package/dist/utils/vault-resolve.js.map +1 -0
- package/dist/utils/vault.d.ts +77 -10
- package/dist/utils/vault.d.ts.map +1 -1
- package/dist/utils/vault.js +262 -98
- package/dist/utils/vault.js.map +1 -1
- package/package.json +9 -3
package/dist/utils/parser.js
CHANGED
|
@@ -36,20 +36,98 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.NoteParser = void 0;
|
|
37
37
|
const crypto_1 = require("crypto");
|
|
38
38
|
const yaml = __importStar(require("yaml"));
|
|
39
|
+
const position_js_1 = require("./position.js");
|
|
39
40
|
class NoteParser {
|
|
40
41
|
static parse(content) {
|
|
41
|
-
const { frontmatter, body } = this.extractFrontmatter(content);
|
|
42
|
+
const { frontmatter, body, bodyStartIndex } = this.extractFrontmatter(content);
|
|
43
|
+
const codeRanges = this.getCodeBlockRanges(body);
|
|
42
44
|
const title = this.extractTitle(body);
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
+
const frontmatterPosition = bodyStartIndex > 0 ? (0, position_js_1.rangeToPos)(content, 0, bodyStartIndex) : undefined;
|
|
46
|
+
const tags = this.extractTags(frontmatter, body, codeRanges, content, bodyStartIndex, frontmatterPosition);
|
|
47
|
+
const links = this.extractLinks(frontmatter, body, content, bodyStartIndex, frontmatterPosition);
|
|
48
|
+
const headings = this.extractHeadings(body, codeRanges, content, bodyStartIndex);
|
|
49
|
+
const headingStructure = this.buildHeadingStructure(headings);
|
|
50
|
+
const bodyBlockRefs = this.extractBlockRefs(body, codeRanges, content, bodyStartIndex);
|
|
51
|
+
const embeds = this.extractEmbeds(body, codeRanges, content, bodyStartIndex);
|
|
52
|
+
const blockRefs = this.mergeBlockRefsFromLinks(bodyBlockRefs, links, embeds);
|
|
53
|
+
const listItems = this.extractListItems(body, codeRanges, content, bodyStartIndex);
|
|
54
|
+
const footnotes = this.extractFootnoteDefinitions(body, codeRanges, content, bodyStartIndex);
|
|
55
|
+
const footnoteRefs = this.extractFootnoteRefs(body, codeRanges, content, bodyStartIndex);
|
|
45
56
|
return {
|
|
46
57
|
title,
|
|
47
58
|
content: body,
|
|
48
59
|
frontmatter,
|
|
60
|
+
frontmatterPosition,
|
|
49
61
|
tags,
|
|
50
|
-
links
|
|
62
|
+
links,
|
|
63
|
+
headings,
|
|
64
|
+
headingStructure,
|
|
65
|
+
blockRefs,
|
|
66
|
+
embeds,
|
|
67
|
+
listItems,
|
|
68
|
+
footnotes,
|
|
69
|
+
footnoteRefs
|
|
51
70
|
};
|
|
52
71
|
}
|
|
72
|
+
/** Extract block ID from link/embed target like "path#^block-id" or "path#heading#^block-id". */
|
|
73
|
+
static parseBlockIdFromTarget(target) {
|
|
74
|
+
const m = target.match(/#\^([a-zA-Z0-9_-]+)$/);
|
|
75
|
+
return m ? m[1] : null;
|
|
76
|
+
}
|
|
77
|
+
static mergeBlockRefsFromLinks(bodyBlockRefs, links, embeds) {
|
|
78
|
+
const result = [...bodyBlockRefs];
|
|
79
|
+
const seen = new Set(bodyBlockRefs.map(b => b.blockId));
|
|
80
|
+
for (const link of links) {
|
|
81
|
+
const blockId = this.parseBlockIdFromTarget(link.target);
|
|
82
|
+
if (blockId && !seen.has(blockId)) {
|
|
83
|
+
seen.add(blockId);
|
|
84
|
+
result.push({
|
|
85
|
+
blockId,
|
|
86
|
+
line: link.line,
|
|
87
|
+
column: link.column,
|
|
88
|
+
position: link.position
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
for (const embed of embeds) {
|
|
93
|
+
const blockId = this.parseBlockIdFromTarget(embed.target);
|
|
94
|
+
if (blockId && !seen.has(blockId)) {
|
|
95
|
+
seen.add(blockId);
|
|
96
|
+
result.push({
|
|
97
|
+
blockId,
|
|
98
|
+
line: embed.line,
|
|
99
|
+
column: embed.column,
|
|
100
|
+
position: embed.position
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
static indexToPosition(content, index) {
|
|
107
|
+
const before = content.slice(0, index);
|
|
108
|
+
const lastNewline = before.lastIndexOf('\n');
|
|
109
|
+
const line = (before.match(/\n/g)?.length ?? 0) + 1;
|
|
110
|
+
const column = lastNewline === -1 ? index + 1 : index - lastNewline;
|
|
111
|
+
return { line, column };
|
|
112
|
+
}
|
|
113
|
+
static getCodeBlockRanges(content) {
|
|
114
|
+
const ranges = [];
|
|
115
|
+
const fenced = /```[^`]*?```/g;
|
|
116
|
+
let m;
|
|
117
|
+
while ((m = fenced.exec(content)) !== null) {
|
|
118
|
+
ranges.push([m.index, m.index + m[0].length]);
|
|
119
|
+
}
|
|
120
|
+
const inline = /`[^`]*`/g;
|
|
121
|
+
while ((m = inline.exec(content)) !== null) {
|
|
122
|
+
if (!ranges.some(([s, e]) => m.index >= s && m.index < e)) {
|
|
123
|
+
ranges.push([m.index, m.index + m[0].length]);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return ranges;
|
|
127
|
+
}
|
|
128
|
+
static isInCodeBlock(index, ranges) {
|
|
129
|
+
return ranges.some(([s, e]) => index >= s && index < e);
|
|
130
|
+
}
|
|
53
131
|
static computeHash(content) {
|
|
54
132
|
return (0, crypto_1.createHash)('sha256').update(content).digest('hex');
|
|
55
133
|
}
|
|
@@ -58,15 +136,44 @@ class NoteParser {
|
|
|
58
136
|
const match = content.match(frontmatterRegex);
|
|
59
137
|
if (match) {
|
|
60
138
|
try {
|
|
61
|
-
|
|
139
|
+
// Pre-process: replace {{PLACEHOLDER}} template syntax with quoted strings
|
|
140
|
+
// before YAML parsing, to prevent YAML from interpreting {key:val} as a flow mapping.
|
|
141
|
+
// We restore the original values after parsing.
|
|
142
|
+
const placeholderMap = new Map();
|
|
143
|
+
let idx = 0;
|
|
144
|
+
const sanitized = match[1].replace(/\{\{[^}]+\}\}/g, (m) => {
|
|
145
|
+
const key = `__SBPH${idx++}_`;
|
|
146
|
+
placeholderMap.set(key, m);
|
|
147
|
+
// Use bare scalar (no quotes) so YAML parses it as a plain string.
|
|
148
|
+
// This works whether the original value was quoted or unquoted.
|
|
149
|
+
return key;
|
|
150
|
+
});
|
|
151
|
+
const raw = yaml.parse(sanitized) || {};
|
|
152
|
+
// Post-process: walk parsed object and restore placeholder strings
|
|
153
|
+
const restore = (obj) => {
|
|
154
|
+
if (typeof obj === 'string') {
|
|
155
|
+
let s = obj;
|
|
156
|
+
for (const [k, v] of placeholderMap) {
|
|
157
|
+
s = s.replace(k, v);
|
|
158
|
+
}
|
|
159
|
+
return s;
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(obj))
|
|
162
|
+
return obj.map(restore);
|
|
163
|
+
if (obj && typeof obj === 'object') {
|
|
164
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, restore(v)]));
|
|
165
|
+
}
|
|
166
|
+
return obj;
|
|
167
|
+
};
|
|
168
|
+
const frontmatter = restore(raw);
|
|
62
169
|
const body = content.slice(match[0].length);
|
|
63
|
-
return { frontmatter, body };
|
|
170
|
+
return { frontmatter, body, bodyStartIndex: match[0].length };
|
|
64
171
|
}
|
|
65
172
|
catch {
|
|
66
173
|
// Invalid YAML, treat as no frontmatter
|
|
67
174
|
}
|
|
68
175
|
}
|
|
69
|
-
return { frontmatter: {}, body: content };
|
|
176
|
+
return { frontmatter: {}, body: content, bodyStartIndex: 0 };
|
|
70
177
|
}
|
|
71
178
|
static extractTitle(content) {
|
|
72
179
|
// Look for first H1 heading
|
|
@@ -81,62 +188,217 @@ class NoteParser {
|
|
|
81
188
|
}
|
|
82
189
|
return 'Untitled';
|
|
83
190
|
}
|
|
84
|
-
static extractTags(frontmatter, content) {
|
|
85
|
-
const
|
|
86
|
-
|
|
191
|
+
static extractTags(frontmatter, body, codeRanges, content, bodyStartIndex, frontmatterPosition) {
|
|
192
|
+
const seen = new Set();
|
|
193
|
+
const result = [];
|
|
194
|
+
const fmLine = { line: 1, column: 1 };
|
|
195
|
+
const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
|
|
87
196
|
if (frontmatter.tags) {
|
|
88
197
|
if (Array.isArray(frontmatter.tags)) {
|
|
89
|
-
|
|
198
|
+
for (const tag of frontmatter.tags) {
|
|
199
|
+
const name = String(tag).replace(/^#/, '');
|
|
200
|
+
if (name) {
|
|
201
|
+
result.push({ name, ...fmLine, position: fmPosition });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
90
204
|
}
|
|
91
205
|
else if (typeof frontmatter.tags === 'string') {
|
|
92
|
-
frontmatter.tags.split(/[,\s]+/)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
206
|
+
for (const tag of frontmatter.tags.split(/[,\s]+/)) {
|
|
207
|
+
const name = tag.replace(/^#/, '');
|
|
208
|
+
if (name) {
|
|
209
|
+
result.push({ name, ...fmLine, position: fmPosition });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
96
212
|
}
|
|
97
213
|
}
|
|
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
214
|
const tagRegex = /#([\w/-]+)/g;
|
|
104
215
|
let match;
|
|
105
|
-
while ((match = tagRegex.exec(
|
|
106
|
-
|
|
107
|
-
if (!contentWithoutCode.substring(match.index - 1, match.index).match(/\n|^/)) {
|
|
216
|
+
while ((match = tagRegex.exec(body)) !== null) {
|
|
217
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
108
218
|
continue;
|
|
109
|
-
|
|
110
|
-
|
|
219
|
+
const charBefore = match.index === 0 ? '\n' : body[match.index - 1];
|
|
220
|
+
const atLineStart = charBefore === '\n' || charBefore === '\r';
|
|
221
|
+
if (atLineStart && body.slice(match.index).match(/^#{1,6}\s+/))
|
|
222
|
+
continue; // heading
|
|
223
|
+
if (!atLineStart && !/[\s]/.test(charBefore))
|
|
224
|
+
continue; // require space/newline before #tag
|
|
225
|
+
const name = match[1];
|
|
226
|
+
const pos = this.indexToPosition(body, match.index);
|
|
227
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
228
|
+
result.push({ name, line: pos.line, column: pos.column, position });
|
|
229
|
+
}
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
static extractLinks(frontmatter, body, content, bodyStartIndex, frontmatterPosition) {
|
|
233
|
+
const result = [];
|
|
234
|
+
const fmPos = { line: 1, column: 1 };
|
|
235
|
+
const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
|
|
236
|
+
this.extractLinksFromObject(frontmatter, (target) => {
|
|
237
|
+
result.push({ target, ...fmPos, position: fmPosition });
|
|
238
|
+
});
|
|
239
|
+
// Obsidian links [[x]] or [[x|label]]; exclude embeds ![[x]]
|
|
240
|
+
const linkRegex = /(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
241
|
+
let match;
|
|
242
|
+
while ((match = linkRegex.exec(body)) !== null) {
|
|
243
|
+
const target = match[1].trim();
|
|
244
|
+
const pos = this.indexToPosition(body, match.index);
|
|
245
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
246
|
+
result.push({ target, line: pos.line, column: pos.column, position });
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
static extractEmbeds(body, codeRanges, content, bodyStartIndex) {
|
|
251
|
+
const result = [];
|
|
252
|
+
// Obsidian embeds: ![[path]] or ![[path|display]]; skip inside code blocks
|
|
253
|
+
const embedRegex = /!\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
254
|
+
let match;
|
|
255
|
+
while ((match = embedRegex.exec(body)) !== null) {
|
|
256
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
257
|
+
continue;
|
|
258
|
+
const target = match[1].trim();
|
|
259
|
+
const pos = this.indexToPosition(body, match.index);
|
|
260
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
261
|
+
result.push({ target, line: pos.line, column: pos.column, position });
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
static extractListItems(body, codeRanges, content, bodyStartIndex) {
|
|
266
|
+
const result = [];
|
|
267
|
+
// Match list items: unordered (-, *, +) or ordered (1., 2., etc.)
|
|
268
|
+
// Also match task items: - [ ] or - [x] or - [X]
|
|
269
|
+
// Pattern: (indentation)(marker)(optional task checkbox)(content)
|
|
270
|
+
const listItemRegex = /^(\s*)([-*+]|\d+\.)\s+(\[([ xX])\])?\s*(.+)$/gm;
|
|
271
|
+
let match;
|
|
272
|
+
while ((match = listItemRegex.exec(body)) !== null) {
|
|
273
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
274
|
+
continue;
|
|
275
|
+
const indent = match[1];
|
|
276
|
+
const level = Math.floor(indent.length / 2); // Typically 2 spaces per level
|
|
277
|
+
const taskCheckbox = match[3]; // '[x]', '[X]', '[ ]', or undefined
|
|
278
|
+
const taskChar = match[4]; // 'x', 'X', ' ', or undefined
|
|
279
|
+
// task is 'x' for checked tasks, undefined for unchecked/non-task items
|
|
280
|
+
const task = taskCheckbox && (taskChar === 'x' || taskChar === 'X') ? 'x' : undefined;
|
|
281
|
+
const pos = this.indexToPosition(body, match.index);
|
|
282
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
283
|
+
result.push({
|
|
284
|
+
level,
|
|
285
|
+
task,
|
|
286
|
+
line: pos.line,
|
|
287
|
+
column: pos.column,
|
|
288
|
+
position
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return result;
|
|
292
|
+
}
|
|
293
|
+
static extractFootnoteDefinitions(body, codeRanges, content, bodyStartIndex) {
|
|
294
|
+
const result = [];
|
|
295
|
+
const definitionRegex = /^(\s*)\[\^([^\]]+)\]:\s*(.*)$/gm;
|
|
296
|
+
let match;
|
|
297
|
+
while ((match = definitionRegex.exec(body)) !== null) {
|
|
298
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
299
|
+
continue;
|
|
300
|
+
const id = match[2].trim();
|
|
301
|
+
const contentText = (match[3] ?? '').trim();
|
|
302
|
+
const pos = this.indexToPosition(body, match.index);
|
|
303
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
304
|
+
result.push({ id, content: contentText, line: pos.line, column: pos.column, position });
|
|
111
305
|
}
|
|
112
|
-
return
|
|
306
|
+
return result;
|
|
113
307
|
}
|
|
114
|
-
static
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
this.extractLinksFromObject(frontmatter, links);
|
|
118
|
-
// Extract from content body (Obsidian wikilinks)
|
|
119
|
-
const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
308
|
+
static extractFootnoteRefs(body, codeRanges, content, bodyStartIndex) {
|
|
309
|
+
const result = [];
|
|
310
|
+
const refRegex = /\[\^([^\]]+)\]/g;
|
|
120
311
|
let match;
|
|
121
|
-
while ((match =
|
|
122
|
-
|
|
312
|
+
while ((match = refRegex.exec(body)) !== null) {
|
|
313
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
314
|
+
continue;
|
|
315
|
+
const after = body[match.index + match[0].length];
|
|
316
|
+
if (after === ':')
|
|
317
|
+
continue;
|
|
318
|
+
const id = match[1].trim();
|
|
319
|
+
const pos = this.indexToPosition(body, match.index);
|
|
320
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
321
|
+
result.push({ id, line: pos.line, column: pos.column, position });
|
|
123
322
|
}
|
|
124
|
-
return
|
|
323
|
+
return result;
|
|
125
324
|
}
|
|
126
|
-
static extractLinksFromObject(obj,
|
|
325
|
+
static extractLinksFromObject(obj, onLink) {
|
|
127
326
|
if (typeof obj === 'string') {
|
|
128
327
|
const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
129
328
|
let match;
|
|
130
329
|
while ((match = linkRegex.exec(obj)) !== null) {
|
|
131
|
-
|
|
330
|
+
onLink(match[1].trim());
|
|
132
331
|
}
|
|
133
332
|
}
|
|
134
333
|
else if (Array.isArray(obj)) {
|
|
135
|
-
obj.forEach(item => this.extractLinksFromObject(item,
|
|
334
|
+
obj.forEach(item => this.extractLinksFromObject(item, onLink));
|
|
136
335
|
}
|
|
137
336
|
else if (obj && typeof obj === 'object') {
|
|
138
|
-
Object.values(obj).forEach(value => this.extractLinksFromObject(value,
|
|
337
|
+
Object.values(obj).forEach(value => this.extractLinksFromObject(value, onLink));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
static extractHeadings(body, codeRanges, content, bodyStartIndex) {
|
|
341
|
+
const result = [];
|
|
342
|
+
const headingRegex = /^(#{1,6})\s+(.+)$/gm;
|
|
343
|
+
let match;
|
|
344
|
+
while ((match = headingRegex.exec(body)) !== null) {
|
|
345
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
346
|
+
continue;
|
|
347
|
+
const level = match[1].length;
|
|
348
|
+
const text = match[2].trim();
|
|
349
|
+
const pos = this.indexToPosition(body, match.index);
|
|
350
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
351
|
+
result.push({ level, text, line: pos.line, column: pos.column, position });
|
|
139
352
|
}
|
|
353
|
+
return result;
|
|
354
|
+
}
|
|
355
|
+
static buildHeadingStructure(headings) {
|
|
356
|
+
const root = [];
|
|
357
|
+
const stack = [];
|
|
358
|
+
for (const heading of headings) {
|
|
359
|
+
const node = {
|
|
360
|
+
level: heading.level,
|
|
361
|
+
text: heading.text,
|
|
362
|
+
line: heading.line,
|
|
363
|
+
column: heading.column,
|
|
364
|
+
position: heading.position,
|
|
365
|
+
children: []
|
|
366
|
+
};
|
|
367
|
+
// Find the appropriate parent: the most recent heading with a lower level
|
|
368
|
+
while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
|
|
369
|
+
stack.pop();
|
|
370
|
+
}
|
|
371
|
+
if (stack.length === 0) {
|
|
372
|
+
// No parent found, add to root
|
|
373
|
+
root.push(node);
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
// Add as child of the most recent parent
|
|
377
|
+
stack[stack.length - 1].children.push(node);
|
|
378
|
+
}
|
|
379
|
+
// Push current node onto stack for potential children
|
|
380
|
+
stack.push(node);
|
|
381
|
+
}
|
|
382
|
+
return root;
|
|
383
|
+
}
|
|
384
|
+
static extractBlockRefs(body, codeRanges, content, bodyStartIndex) {
|
|
385
|
+
const result = [];
|
|
386
|
+
const seen = new Set();
|
|
387
|
+
// Obsidian block ref: ^block-id (alphanumeric, hyphens, underscores)
|
|
388
|
+
const blockRefRegex = /\^([a-zA-Z0-9_-]+)/g;
|
|
389
|
+
let match;
|
|
390
|
+
while ((match = blockRefRegex.exec(body)) !== null) {
|
|
391
|
+
if (this.isInCodeBlock(match.index, codeRanges))
|
|
392
|
+
continue;
|
|
393
|
+
const blockId = match[1];
|
|
394
|
+
if (seen.has(blockId))
|
|
395
|
+
continue;
|
|
396
|
+
seen.add(blockId);
|
|
397
|
+
const pos = this.indexToPosition(body, match.index);
|
|
398
|
+
const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
|
|
399
|
+
result.push({ blockId, line: pos.line, column: pos.column, position });
|
|
400
|
+
}
|
|
401
|
+
return result;
|
|
140
402
|
}
|
|
141
403
|
static generateNoteContent(title, content, frontmatter = {}) {
|
|
142
404
|
const fm = yaml.stringify(frontmatter).trim();
|
|
@@ -154,6 +416,171 @@ class NoteParser {
|
|
|
154
416
|
};
|
|
155
417
|
return this.generateNoteContent(dateStr, content, frontmatter);
|
|
156
418
|
}
|
|
419
|
+
/**
|
|
420
|
+
* Convert HeadingRef[] to HeadingCache[] for ContentMetadata.
|
|
421
|
+
* Maps `text` property to `heading` property.
|
|
422
|
+
*/
|
|
423
|
+
static headingsToCache(headings) {
|
|
424
|
+
return headings.map(h => ({
|
|
425
|
+
heading: h.text,
|
|
426
|
+
level: h.level,
|
|
427
|
+
position: h.position
|
|
428
|
+
}));
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Build document sections from parsed note (Obsidian-aligned).
|
|
432
|
+
* Sections: frontmatter (if present), then one section per heading from that heading to the next
|
|
433
|
+
* (or end of file). With no headings, a single content section from body start to EOF.
|
|
434
|
+
*/
|
|
435
|
+
static buildSections(parsed, fullContent) {
|
|
436
|
+
const sections = [];
|
|
437
|
+
const bodyStartOffset = parsed.frontmatterPosition != null ? parsed.frontmatterPosition.end.offset + 1 : 0;
|
|
438
|
+
if (parsed.frontmatterPosition != null) {
|
|
439
|
+
sections.push({
|
|
440
|
+
id: 'frontmatter',
|
|
441
|
+
type: 'frontmatter',
|
|
442
|
+
position: parsed.frontmatterPosition
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
const headings = parsed.headings;
|
|
446
|
+
if (headings.length === 0) {
|
|
447
|
+
sections.push({
|
|
448
|
+
id: '0',
|
|
449
|
+
type: 'content',
|
|
450
|
+
position: (0, position_js_1.rangeToPos)(fullContent, bodyStartOffset, fullContent.length)
|
|
451
|
+
});
|
|
452
|
+
return sections;
|
|
453
|
+
}
|
|
454
|
+
for (let i = 0; i < headings.length; i++) {
|
|
455
|
+
const startOffset = headings[i].position.start.offset;
|
|
456
|
+
const endOffset = i + 1 < headings.length ? headings[i + 1].position.start.offset : fullContent.length;
|
|
457
|
+
sections.push({
|
|
458
|
+
id: String(i),
|
|
459
|
+
type: 'heading',
|
|
460
|
+
position: (0, position_js_1.rangeToPos)(fullContent, startOffset, endOffset)
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
return sections;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Convert ListItemRef[] to ListItemCache[] for ContentMetadata.
|
|
467
|
+
* Preserves task status and position information.
|
|
468
|
+
*/
|
|
469
|
+
static listItemsToCache(listItems) {
|
|
470
|
+
return listItems.map(li => ({
|
|
471
|
+
task: li.task,
|
|
472
|
+
position: li.position
|
|
473
|
+
}));
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Convert ParsedNote to ContentMetadata (Obsidian CachedMetadata format).
|
|
477
|
+
* Separates content-derived metadata from file system information.
|
|
478
|
+
*/
|
|
479
|
+
static parsedToContentMetadata(parsed, originalContent) {
|
|
480
|
+
const metadata = {};
|
|
481
|
+
// Convert links
|
|
482
|
+
if (parsed.links.length > 0) {
|
|
483
|
+
metadata.links = parsed.links.map((link) => {
|
|
484
|
+
// Try to extract display text from original content if available
|
|
485
|
+
let displayText;
|
|
486
|
+
let original = `[[${link.target}]]`;
|
|
487
|
+
if (originalContent) {
|
|
488
|
+
const startOffset = link.position.start.offset;
|
|
489
|
+
const endOffset = link.position.end.offset;
|
|
490
|
+
const linkText = originalContent.slice(startOffset, endOffset);
|
|
491
|
+
const match = linkText.match(/\[\[([^\]]+)\]\]/);
|
|
492
|
+
if (match) {
|
|
493
|
+
original = match[0];
|
|
494
|
+
const parts = match[1].split('|');
|
|
495
|
+
if (parts.length > 1) {
|
|
496
|
+
displayText = parts.slice(1).join('|');
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return {
|
|
501
|
+
link: link.target,
|
|
502
|
+
original,
|
|
503
|
+
displayText,
|
|
504
|
+
position: link.position
|
|
505
|
+
};
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
// Convert embeds
|
|
509
|
+
if (parsed.embeds.length > 0) {
|
|
510
|
+
metadata.embeds = parsed.embeds.map((embed) => {
|
|
511
|
+
// Try to extract display text from original content if available
|
|
512
|
+
let displayText;
|
|
513
|
+
let original = `![[${embed.target}]]`;
|
|
514
|
+
if (originalContent) {
|
|
515
|
+
const startOffset = embed.position.start.offset;
|
|
516
|
+
const endOffset = embed.position.end.offset;
|
|
517
|
+
const embedText = originalContent.slice(startOffset, endOffset);
|
|
518
|
+
const match = embedText.match(/!\[\[([^\]]+)\]\]/);
|
|
519
|
+
if (match) {
|
|
520
|
+
original = match[0];
|
|
521
|
+
const parts = match[1].split('|');
|
|
522
|
+
if (parts.length > 1) {
|
|
523
|
+
displayText = parts.slice(1).join('|');
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return {
|
|
528
|
+
link: embed.target,
|
|
529
|
+
original,
|
|
530
|
+
displayText,
|
|
531
|
+
position: embed.position
|
|
532
|
+
};
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
// Convert tags
|
|
536
|
+
if (parsed.tags.length > 0) {
|
|
537
|
+
metadata.tags = parsed.tags.map((tag) => ({
|
|
538
|
+
tag: tag.name,
|
|
539
|
+
position: tag.position
|
|
540
|
+
}));
|
|
541
|
+
}
|
|
542
|
+
// Convert headings
|
|
543
|
+
if (parsed.headings.length > 0) {
|
|
544
|
+
metadata.headings = this.headingsToCache(parsed.headings);
|
|
545
|
+
}
|
|
546
|
+
// Convert blocks
|
|
547
|
+
if (parsed.blockRefs.length > 0) {
|
|
548
|
+
metadata.blocks = parsed.blockRefs.map((block) => ({
|
|
549
|
+
id: block.blockId,
|
|
550
|
+
position: block.position
|
|
551
|
+
}));
|
|
552
|
+
}
|
|
553
|
+
// Convert frontmatter position
|
|
554
|
+
if (parsed.frontmatterPosition) {
|
|
555
|
+
metadata.frontmatter = {
|
|
556
|
+
position: parsed.frontmatterPosition
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
// Convert list items
|
|
560
|
+
if (parsed.listItems.length > 0) {
|
|
561
|
+
metadata.listItems = this.listItemsToCache(parsed.listItems);
|
|
562
|
+
}
|
|
563
|
+
// Convert footnotes (definitions)
|
|
564
|
+
if (parsed.footnotes.length > 0) {
|
|
565
|
+
metadata.footnotes = parsed.footnotes.map((fn) => ({
|
|
566
|
+
id: fn.id,
|
|
567
|
+
content: fn.content,
|
|
568
|
+
position: fn.position
|
|
569
|
+
}));
|
|
570
|
+
}
|
|
571
|
+
// Convert footnote refs
|
|
572
|
+
if (parsed.footnoteRefs.length > 0) {
|
|
573
|
+
metadata.footnoteRefs = parsed.footnoteRefs.map((ref) => ({
|
|
574
|
+
id: ref.id,
|
|
575
|
+
position: ref.position
|
|
576
|
+
}));
|
|
577
|
+
}
|
|
578
|
+
// Sections (from headings + frontmatter); require full content for correct positions
|
|
579
|
+
if (originalContent != null) {
|
|
580
|
+
metadata.sections = this.buildSections(parsed, originalContent);
|
|
581
|
+
}
|
|
582
|
+
return metadata;
|
|
583
|
+
}
|
|
157
584
|
}
|
|
158
585
|
exports.NoteParser = NoteParser;
|
|
159
586
|
//# sourceMappingURL=parser.js.map
|
package/dist/utils/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PlaceholderContext } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a DATE placeholder token and return the formatted date string.
|
|
4
|
+
*
|
|
5
|
+
* Supported formats:
|
|
6
|
+
* DATE → default 'YYYY-MM-DD'
|
|
7
|
+
* DATE:format → custom moment format
|
|
8
|
+
* DATE+N / DATE-N → offset by N days, default format
|
|
9
|
+
* DATE:format+N → custom format + day offset
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseDatePlaceholder(token: string, baseDate: Date): string;
|
|
12
|
+
/**
|
|
13
|
+
* Parse a TIME placeholder token and return the formatted time string.
|
|
14
|
+
*
|
|
15
|
+
* Supported formats:
|
|
16
|
+
* TIME → default 'HH:mm'
|
|
17
|
+
* TIME:format → custom moment format
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseTimePlaceholder(token: string, baseDate: Date): string;
|
|
20
|
+
/**
|
|
21
|
+
* Process all built-in placeholders in a template string.
|
|
22
|
+
*
|
|
23
|
+
* Built-in placeholders (uppercase keywords):
|
|
24
|
+
* {{DATE}} → today's date (YYYY-MM-DD)
|
|
25
|
+
* {{DATE:format}} → custom moment format
|
|
26
|
+
* {{DATE+N}} → N days from today
|
|
27
|
+
* {{DATE:format+N}} → custom format + offset
|
|
28
|
+
* {{TIME}} → current time (HH:mm)
|
|
29
|
+
* {{TIME:format}} → custom moment format
|
|
30
|
+
* {{TITLE}} → context.title (left as-is if not provided)
|
|
31
|
+
* {{VAULT}} → context.vault (left as-is if not provided)
|
|
32
|
+
* {{UUID}} → random UUID v4 (unique per occurrence)
|
|
33
|
+
*
|
|
34
|
+
* User-defined lowercase {{variable}} placeholders are NOT touched.
|
|
35
|
+
*/
|
|
36
|
+
export declare function processPlaceholders(template: string, context: PlaceholderContext): string;
|
|
37
|
+
//# sourceMappingURL=placeholder.d.ts.map
|