@novis10813/secondbrain-cli 0.1.0 → 0.1.1

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.
Files changed (93) hide show
  1. package/README.md +74 -5
  2. package/dist/commands/backlinks.d.ts.map +1 -1
  3. package/dist/commands/backlinks.js +16 -33
  4. package/dist/commands/backlinks.js.map +1 -1
  5. package/dist/commands/capture.d.ts.map +1 -1
  6. package/dist/commands/capture.js +71 -57
  7. package/dist/commands/capture.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +5 -20
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/get.js +27 -26
  12. package/dist/commands/get.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +21 -4
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +22 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/open.d.ts +3 -0
  21. package/dist/commands/open.d.ts.map +1 -0
  22. package/dist/commands/open.js +28 -0
  23. package/dist/commands/open.js.map +1 -0
  24. package/dist/commands/orphans.d.ts.map +1 -1
  25. package/dist/commands/orphans.js +9 -27
  26. package/dist/commands/orphans.js.map +1 -1
  27. package/dist/commands/outlinks.d.ts +3 -0
  28. package/dist/commands/outlinks.d.ts.map +1 -0
  29. package/dist/commands/outlinks.js +48 -0
  30. package/dist/commands/outlinks.js.map +1 -0
  31. package/dist/commands/search.d.ts +2 -0
  32. package/dist/commands/search.d.ts.map +1 -1
  33. package/dist/commands/search.js +57 -39
  34. package/dist/commands/search.js.map +1 -1
  35. package/dist/commands/stats.d.ts.map +1 -1
  36. package/dist/commands/stats.js +4 -18
  37. package/dist/commands/stats.js.map +1 -1
  38. package/dist/commands/sync.d.ts.map +1 -1
  39. package/dist/commands/sync.js +3 -17
  40. package/dist/commands/sync.js.map +1 -1
  41. package/dist/commands/template.d.ts +3 -0
  42. package/dist/commands/template.d.ts.map +1 -0
  43. package/dist/commands/template.js +63 -0
  44. package/dist/commands/template.js.map +1 -0
  45. package/dist/commands/vault.d.ts +3 -0
  46. package/dist/commands/vault.d.ts.map +1 -0
  47. package/dist/commands/vault.js +233 -0
  48. package/dist/commands/vault.js.map +1 -0
  49. package/dist/index.js +13 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/index.d.ts +134 -10
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/utils/config.d.ts +3 -1
  54. package/dist/utils/config.d.ts.map +1 -1
  55. package/dist/utils/config.js +12 -0
  56. package/dist/utils/config.js.map +1 -1
  57. package/dist/utils/database.d.ts +58 -14
  58. package/dist/utils/database.d.ts.map +1 -1
  59. package/dist/utils/database.js +627 -207
  60. package/dist/utils/database.js.map +1 -1
  61. package/dist/utils/global-config.d.ts +53 -0
  62. package/dist/utils/global-config.d.ts.map +1 -0
  63. package/dist/utils/global-config.js +144 -0
  64. package/dist/utils/global-config.js.map +1 -0
  65. package/dist/utils/parser.d.ts +95 -2
  66. package/dist/utils/parser.d.ts.map +1 -1
  67. package/dist/utils/parser.js +436 -38
  68. package/dist/utils/parser.js.map +1 -1
  69. package/dist/utils/placeholder.d.ts +37 -0
  70. package/dist/utils/placeholder.d.ts.map +1 -0
  71. package/dist/utils/placeholder.js +113 -0
  72. package/dist/utils/placeholder.js.map +1 -0
  73. package/dist/utils/position.d.ts +10 -0
  74. package/dist/utils/position.d.ts.map +1 -0
  75. package/dist/utils/position.js +24 -0
  76. package/dist/utils/position.js.map +1 -0
  77. package/dist/utils/sqlite-adapter.d.ts +8 -0
  78. package/dist/utils/sqlite-adapter.d.ts.map +1 -0
  79. package/dist/utils/sqlite-adapter.js +14 -0
  80. package/dist/utils/sqlite-adapter.js.map +1 -0
  81. package/dist/utils/template.d.ts +2 -2
  82. package/dist/utils/template.d.ts.map +1 -1
  83. package/dist/utils/template.js +8 -3
  84. package/dist/utils/template.js.map +1 -1
  85. package/dist/utils/vault-resolve.d.ts +23 -0
  86. package/dist/utils/vault-resolve.d.ts.map +1 -0
  87. package/dist/utils/vault-resolve.js +86 -0
  88. package/dist/utils/vault-resolve.js.map +1 -0
  89. package/dist/utils/vault.d.ts +77 -10
  90. package/dist/utils/vault.d.ts.map +1 -1
  91. package/dist/utils/vault.js +253 -98
  92. package/dist/utils/vault.js.map +1 -1
  93. package/package.json +9 -3
@@ -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 tags = this.extractTags(frontmatter, body);
44
- const links = this.extractLinks(frontmatter, body);
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
  }
@@ -60,13 +138,13 @@ class NoteParser {
60
138
  try {
61
139
  const frontmatter = yaml.parse(match[1]) || {};
62
140
  const body = content.slice(match[0].length);
63
- return { frontmatter, body };
141
+ return { frontmatter, body, bodyStartIndex: match[0].length };
64
142
  }
65
143
  catch {
66
144
  // Invalid YAML, treat as no frontmatter
67
145
  }
68
146
  }
69
- return { frontmatter: {}, body: content };
147
+ return { frontmatter: {}, body: content, bodyStartIndex: 0 };
70
148
  }
71
149
  static extractTitle(content) {
72
150
  // Look for first H1 heading
@@ -81,62 +159,217 @@ class NoteParser {
81
159
  }
82
160
  return 'Untitled';
83
161
  }
84
- static extractTags(frontmatter, content) {
85
- const tags = new Set();
86
- // From frontmatter
162
+ static extractTags(frontmatter, body, codeRanges, content, bodyStartIndex, frontmatterPosition) {
163
+ const seen = new Set();
164
+ const result = [];
165
+ const fmLine = { line: 1, column: 1 };
166
+ const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
87
167
  if (frontmatter.tags) {
88
168
  if (Array.isArray(frontmatter.tags)) {
89
- frontmatter.tags.forEach(tag => tags.add(String(tag)));
169
+ for (const tag of frontmatter.tags) {
170
+ const name = String(tag).replace(/^#/, '');
171
+ if (name) {
172
+ result.push({ name, ...fmLine, position: fmPosition });
173
+ }
174
+ }
90
175
  }
91
176
  else if (typeof frontmatter.tags === 'string') {
92
- frontmatter.tags.split(/[,\s]+/).forEach(tag => {
93
- if (tag)
94
- tags.add(tag.replace(/^#/, ''));
95
- });
177
+ for (const tag of frontmatter.tags.split(/[,\s]+/)) {
178
+ const name = tag.replace(/^#/, '');
179
+ if (name) {
180
+ result.push({ name, ...fmLine, position: fmPosition });
181
+ }
182
+ }
96
183
  }
97
184
  }
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
185
  const tagRegex = /#([\w/-]+)/g;
104
186
  let match;
105
- while ((match = tagRegex.exec(contentWithoutCode)) !== null) {
106
- // Exclude headings
107
- if (!contentWithoutCode.substring(match.index - 1, match.index).match(/\n|^/)) {
187
+ while ((match = tagRegex.exec(body)) !== null) {
188
+ if (this.isInCodeBlock(match.index, codeRanges))
108
189
  continue;
109
- }
110
- tags.add(match[1]);
190
+ const charBefore = match.index === 0 ? '\n' : body[match.index - 1];
191
+ const atLineStart = charBefore === '\n' || charBefore === '\r';
192
+ if (atLineStart && body.slice(match.index).match(/^#{1,6}\s+/))
193
+ continue; // heading
194
+ if (!atLineStart && !/[\s]/.test(charBefore))
195
+ continue; // require space/newline before #tag
196
+ const name = match[1];
197
+ const pos = this.indexToPosition(body, match.index);
198
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
199
+ result.push({ name, line: pos.line, column: pos.column, position });
111
200
  }
112
- return Array.from(tags);
201
+ return result;
113
202
  }
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;
203
+ static extractLinks(frontmatter, body, content, bodyStartIndex, frontmatterPosition) {
204
+ const result = [];
205
+ const fmPos = { line: 1, column: 1 };
206
+ const fmPosition = frontmatterPosition ?? (0, position_js_1.rangeToPos)(content, 0, Math.min(1, content.length));
207
+ this.extractLinksFromObject(frontmatter, (target) => {
208
+ result.push({ target, ...fmPos, position: fmPosition });
209
+ });
210
+ // Obsidian links [[x]] or [[x|label]]; exclude embeds ![[x]]
211
+ const linkRegex = /(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
120
212
  let match;
121
- while ((match = linkRegex.exec(content)) !== null) {
122
- links.add(match[1].trim());
213
+ while ((match = linkRegex.exec(body)) !== null) {
214
+ const target = match[1].trim();
215
+ const pos = this.indexToPosition(body, match.index);
216
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
217
+ result.push({ target, line: pos.line, column: pos.column, position });
123
218
  }
124
- return Array.from(links);
219
+ return result;
125
220
  }
126
- static extractLinksFromObject(obj, links) {
221
+ static extractEmbeds(body, codeRanges, content, bodyStartIndex) {
222
+ const result = [];
223
+ // Obsidian embeds: ![[path]] or ![[path|display]]; skip inside code blocks
224
+ const embedRegex = /!\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
225
+ let match;
226
+ while ((match = embedRegex.exec(body)) !== null) {
227
+ if (this.isInCodeBlock(match.index, codeRanges))
228
+ continue;
229
+ const target = match[1].trim();
230
+ const pos = this.indexToPosition(body, match.index);
231
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
232
+ result.push({ target, line: pos.line, column: pos.column, position });
233
+ }
234
+ return result;
235
+ }
236
+ static extractListItems(body, codeRanges, content, bodyStartIndex) {
237
+ const result = [];
238
+ // Match list items: unordered (-, *, +) or ordered (1., 2., etc.)
239
+ // Also match task items: - [ ] or - [x] or - [X]
240
+ // Pattern: (indentation)(marker)(optional task checkbox)(content)
241
+ const listItemRegex = /^(\s*)([-*+]|\d+\.)\s+(\[([ xX])\])?\s*(.+)$/gm;
242
+ let match;
243
+ while ((match = listItemRegex.exec(body)) !== null) {
244
+ if (this.isInCodeBlock(match.index, codeRanges))
245
+ continue;
246
+ const indent = match[1];
247
+ const level = Math.floor(indent.length / 2); // Typically 2 spaces per level
248
+ const taskCheckbox = match[3]; // '[x]', '[X]', '[ ]', or undefined
249
+ const taskChar = match[4]; // 'x', 'X', ' ', or undefined
250
+ // task is 'x' for checked tasks, undefined for unchecked/non-task items
251
+ const task = taskCheckbox && (taskChar === 'x' || taskChar === 'X') ? 'x' : undefined;
252
+ const pos = this.indexToPosition(body, match.index);
253
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
254
+ result.push({
255
+ level,
256
+ task,
257
+ line: pos.line,
258
+ column: pos.column,
259
+ position
260
+ });
261
+ }
262
+ return result;
263
+ }
264
+ static extractFootnoteDefinitions(body, codeRanges, content, bodyStartIndex) {
265
+ const result = [];
266
+ const definitionRegex = /^(\s*)\[\^([^\]]+)\]:\s*(.*)$/gm;
267
+ let match;
268
+ while ((match = definitionRegex.exec(body)) !== null) {
269
+ if (this.isInCodeBlock(match.index, codeRanges))
270
+ continue;
271
+ const id = match[2].trim();
272
+ const contentText = (match[3] ?? '').trim();
273
+ const pos = this.indexToPosition(body, match.index);
274
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
275
+ result.push({ id, content: contentText, line: pos.line, column: pos.column, position });
276
+ }
277
+ return result;
278
+ }
279
+ static extractFootnoteRefs(body, codeRanges, content, bodyStartIndex) {
280
+ const result = [];
281
+ const refRegex = /\[\^([^\]]+)\]/g;
282
+ let match;
283
+ while ((match = refRegex.exec(body)) !== null) {
284
+ if (this.isInCodeBlock(match.index, codeRanges))
285
+ continue;
286
+ const after = body[match.index + match[0].length];
287
+ if (after === ':')
288
+ continue;
289
+ const id = match[1].trim();
290
+ const pos = this.indexToPosition(body, match.index);
291
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
292
+ result.push({ id, line: pos.line, column: pos.column, position });
293
+ }
294
+ return result;
295
+ }
296
+ static extractLinksFromObject(obj, onLink) {
127
297
  if (typeof obj === 'string') {
128
298
  const linkRegex = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
129
299
  let match;
130
300
  while ((match = linkRegex.exec(obj)) !== null) {
131
- links.add(match[1].trim());
301
+ onLink(match[1].trim());
132
302
  }
133
303
  }
134
304
  else if (Array.isArray(obj)) {
135
- obj.forEach(item => this.extractLinksFromObject(item, links));
305
+ obj.forEach(item => this.extractLinksFromObject(item, onLink));
136
306
  }
137
307
  else if (obj && typeof obj === 'object') {
138
- Object.values(obj).forEach(value => this.extractLinksFromObject(value, links));
308
+ Object.values(obj).forEach(value => this.extractLinksFromObject(value, onLink));
309
+ }
310
+ }
311
+ static extractHeadings(body, codeRanges, content, bodyStartIndex) {
312
+ const result = [];
313
+ const headingRegex = /^(#{1,6})\s+(.+)$/gm;
314
+ let match;
315
+ while ((match = headingRegex.exec(body)) !== null) {
316
+ if (this.isInCodeBlock(match.index, codeRanges))
317
+ continue;
318
+ const level = match[1].length;
319
+ const text = match[2].trim();
320
+ const pos = this.indexToPosition(body, match.index);
321
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
322
+ result.push({ level, text, line: pos.line, column: pos.column, position });
323
+ }
324
+ return result;
325
+ }
326
+ static buildHeadingStructure(headings) {
327
+ const root = [];
328
+ const stack = [];
329
+ for (const heading of headings) {
330
+ const node = {
331
+ level: heading.level,
332
+ text: heading.text,
333
+ line: heading.line,
334
+ column: heading.column,
335
+ position: heading.position,
336
+ children: []
337
+ };
338
+ // Find the appropriate parent: the most recent heading with a lower level
339
+ while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
340
+ stack.pop();
341
+ }
342
+ if (stack.length === 0) {
343
+ // No parent found, add to root
344
+ root.push(node);
345
+ }
346
+ else {
347
+ // Add as child of the most recent parent
348
+ stack[stack.length - 1].children.push(node);
349
+ }
350
+ // Push current node onto stack for potential children
351
+ stack.push(node);
352
+ }
353
+ return root;
354
+ }
355
+ static extractBlockRefs(body, codeRanges, content, bodyStartIndex) {
356
+ const result = [];
357
+ const seen = new Set();
358
+ // Obsidian block ref: ^block-id (alphanumeric, hyphens, underscores)
359
+ const blockRefRegex = /\^([a-zA-Z0-9_-]+)/g;
360
+ let match;
361
+ while ((match = blockRefRegex.exec(body)) !== null) {
362
+ if (this.isInCodeBlock(match.index, codeRanges))
363
+ continue;
364
+ const blockId = match[1];
365
+ if (seen.has(blockId))
366
+ continue;
367
+ seen.add(blockId);
368
+ const pos = this.indexToPosition(body, match.index);
369
+ const position = (0, position_js_1.rangeToPos)(content, bodyStartIndex + match.index, bodyStartIndex + match.index + match[0].length);
370
+ result.push({ blockId, line: pos.line, column: pos.column, position });
139
371
  }
372
+ return result;
140
373
  }
141
374
  static generateNoteContent(title, content, frontmatter = {}) {
142
375
  const fm = yaml.stringify(frontmatter).trim();
@@ -154,6 +387,171 @@ class NoteParser {
154
387
  };
155
388
  return this.generateNoteContent(dateStr, content, frontmatter);
156
389
  }
390
+ /**
391
+ * Convert HeadingRef[] to HeadingCache[] for ContentMetadata.
392
+ * Maps `text` property to `heading` property.
393
+ */
394
+ static headingsToCache(headings) {
395
+ return headings.map(h => ({
396
+ heading: h.text,
397
+ level: h.level,
398
+ position: h.position
399
+ }));
400
+ }
401
+ /**
402
+ * Build document sections from parsed note (Obsidian-aligned).
403
+ * Sections: frontmatter (if present), then one section per heading from that heading to the next
404
+ * (or end of file). With no headings, a single content section from body start to EOF.
405
+ */
406
+ static buildSections(parsed, fullContent) {
407
+ const sections = [];
408
+ const bodyStartOffset = parsed.frontmatterPosition != null ? parsed.frontmatterPosition.end.offset + 1 : 0;
409
+ if (parsed.frontmatterPosition != null) {
410
+ sections.push({
411
+ id: 'frontmatter',
412
+ type: 'frontmatter',
413
+ position: parsed.frontmatterPosition
414
+ });
415
+ }
416
+ const headings = parsed.headings;
417
+ if (headings.length === 0) {
418
+ sections.push({
419
+ id: '0',
420
+ type: 'content',
421
+ position: (0, position_js_1.rangeToPos)(fullContent, bodyStartOffset, fullContent.length)
422
+ });
423
+ return sections;
424
+ }
425
+ for (let i = 0; i < headings.length; i++) {
426
+ const startOffset = headings[i].position.start.offset;
427
+ const endOffset = i + 1 < headings.length ? headings[i + 1].position.start.offset : fullContent.length;
428
+ sections.push({
429
+ id: String(i),
430
+ type: 'heading',
431
+ position: (0, position_js_1.rangeToPos)(fullContent, startOffset, endOffset)
432
+ });
433
+ }
434
+ return sections;
435
+ }
436
+ /**
437
+ * Convert ListItemRef[] to ListItemCache[] for ContentMetadata.
438
+ * Preserves task status and position information.
439
+ */
440
+ static listItemsToCache(listItems) {
441
+ return listItems.map(li => ({
442
+ task: li.task,
443
+ position: li.position
444
+ }));
445
+ }
446
+ /**
447
+ * Convert ParsedNote to ContentMetadata (Obsidian CachedMetadata format).
448
+ * Separates content-derived metadata from file system information.
449
+ */
450
+ static parsedToContentMetadata(parsed, originalContent) {
451
+ const metadata = {};
452
+ // Convert links
453
+ if (parsed.links.length > 0) {
454
+ metadata.links = parsed.links.map((link) => {
455
+ // Try to extract display text from original content if available
456
+ let displayText;
457
+ let original = `[[${link.target}]]`;
458
+ if (originalContent) {
459
+ const startOffset = link.position.start.offset;
460
+ const endOffset = link.position.end.offset;
461
+ const linkText = originalContent.slice(startOffset, endOffset);
462
+ const match = linkText.match(/\[\[([^\]]+)\]\]/);
463
+ if (match) {
464
+ original = match[0];
465
+ const parts = match[1].split('|');
466
+ if (parts.length > 1) {
467
+ displayText = parts.slice(1).join('|');
468
+ }
469
+ }
470
+ }
471
+ return {
472
+ link: link.target,
473
+ original,
474
+ displayText,
475
+ position: link.position
476
+ };
477
+ });
478
+ }
479
+ // Convert embeds
480
+ if (parsed.embeds.length > 0) {
481
+ metadata.embeds = parsed.embeds.map((embed) => {
482
+ // Try to extract display text from original content if available
483
+ let displayText;
484
+ let original = `![[${embed.target}]]`;
485
+ if (originalContent) {
486
+ const startOffset = embed.position.start.offset;
487
+ const endOffset = embed.position.end.offset;
488
+ const embedText = originalContent.slice(startOffset, endOffset);
489
+ const match = embedText.match(/!\[\[([^\]]+)\]\]/);
490
+ if (match) {
491
+ original = match[0];
492
+ const parts = match[1].split('|');
493
+ if (parts.length > 1) {
494
+ displayText = parts.slice(1).join('|');
495
+ }
496
+ }
497
+ }
498
+ return {
499
+ link: embed.target,
500
+ original,
501
+ displayText,
502
+ position: embed.position
503
+ };
504
+ });
505
+ }
506
+ // Convert tags
507
+ if (parsed.tags.length > 0) {
508
+ metadata.tags = parsed.tags.map((tag) => ({
509
+ tag: tag.name,
510
+ position: tag.position
511
+ }));
512
+ }
513
+ // Convert headings
514
+ if (parsed.headings.length > 0) {
515
+ metadata.headings = this.headingsToCache(parsed.headings);
516
+ }
517
+ // Convert blocks
518
+ if (parsed.blockRefs.length > 0) {
519
+ metadata.blocks = parsed.blockRefs.map((block) => ({
520
+ id: block.blockId,
521
+ position: block.position
522
+ }));
523
+ }
524
+ // Convert frontmatter position
525
+ if (parsed.frontmatterPosition) {
526
+ metadata.frontmatter = {
527
+ position: parsed.frontmatterPosition
528
+ };
529
+ }
530
+ // Convert list items
531
+ if (parsed.listItems.length > 0) {
532
+ metadata.listItems = this.listItemsToCache(parsed.listItems);
533
+ }
534
+ // Convert footnotes (definitions)
535
+ if (parsed.footnotes.length > 0) {
536
+ metadata.footnotes = parsed.footnotes.map((fn) => ({
537
+ id: fn.id,
538
+ content: fn.content,
539
+ position: fn.position
540
+ }));
541
+ }
542
+ // Convert footnote refs
543
+ if (parsed.footnoteRefs.length > 0) {
544
+ metadata.footnoteRefs = parsed.footnoteRefs.map((ref) => ({
545
+ id: ref.id,
546
+ position: ref.position
547
+ }));
548
+ }
549
+ // Sections (from headings + frontmatter); require full content for correct positions
550
+ if (originalContent != null) {
551
+ metadata.sections = this.buildSections(parsed, originalContent);
552
+ }
553
+ return metadata;
554
+ }
157
555
  }
158
556
  exports.NoteParser = NoteParser;
159
557
  //# sourceMappingURL=parser.js.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../src/utils/placeholder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,CA0B1E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,CAK1E;AAkBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA8BzF"}